テキスト分類問題その2 上位入賞者手法紹介

テキスト分類問題その2」コンペティションの上位入賞者の予測手法を紹介します。

1位入賞者:nicknameさん

前処理

データはBag-of-wordsで与えられていて出現回数は1か0だったので以下[単語の出現回数]=[単語の含まれる文書数]。はじめに"出現回数が2回以下“の単語は頻度が少なすぎるので削除した。

次に、はずれ値を決めるために事後分布がほしいのでナイーブベイズを使って事後分布を得る。その後確率0.97を割り当てて分類に失敗したもの(例えば P(男性|x_i)=0.97,y_i=女性)ははずれ値として訓練データから除きはずれ値を取った訓練データで再びナイーブベイズを構成した。

予測

ナイーブベイズはスコアが0.82を超えられないこと、文書で単語の出現確率の間に独立性が成り立つとしてベイズを使うのはなんだか不自然と考えてこれ以上ベイズを利用するのを辞めた。

SVMをはずれ値のないデータで訓練、その際rbfカーネルをはじめ使い適当なパラメータを与えるもベイズよりもスコアは低かった。線形カーネルの分類のスコアが悪くなかったので単純なモデルでいいと考えさらに入力の次元削減をした。最終的にsigmoidカーネルを与えたときにナイーブベイズに近い値が出た(スコア0.79前後)。

sigmoidカーネルでうまくいくことから多層パーセプトロン(ライブラリはPyBrain)をうまく使って性能をあげれないか試行錯誤したがうまくいかなかった、またAdaBoostやランダムフォレスト等試したがうまくいかなかった、最終的に

  • 特徴:出現が2回以下のもの全てと、4回以下でなおかつその単語が出現するときの目標となるクラスが全て同じになっていないような特徴を削除して次元削減した
  • ナイーブベイズ:α=3.45付近
  • はずれ値:0.96以上の確率を割り振り分類に失敗したデータ(全データ中の1.5%位)
  • SVM:sigmoidカーネル
  • SVMのγとC:計算時間がかかり全データを使った探索が出来なかったので訓練データの1/5を使って最もよいパラメータを探索して決定
  • SVMの境界付近のデータはベイズの結果を信じて書き換え

したものを提出した。ただ、最終的に提出したデータよりも良い最終スコアをはずれ値を除いて同様に次元削減した訓練データで学習したナイーブベイズ分類器が出した。

2位入賞者:takuさん

  1. 出現した回数が4回未満の特徴量を削除
  2. gensim (https://github.com/piskvorky/gensim/) ライブラリを利用して、TF-IDF で各特徴量を重み付け
  3. ナイーブベイズ分類器 (MultinomialNB) で学習 (パラメータは確か a=1.0)