Bag of Tricks for Efficient Text Classification
メタデータなど
FAIR所属のArmand Joulin, Edouard Grave, Piotr Bojanowski, Tomas Mikolovの論文. Last authorはword2vecで有名なTomas Mikolov氏.
Mikolov氏が共著に入ってる論文は,高速化とか単純化をするモデルが多いと勝手に思っているが,これも高速化なモデルを提案している.
1行要約: CNNでがんばるモデルと同じくらいの文書分類性能をモデルが3層のニューラルネットワークでも出せた.
本題
文書分類のタスクにおいて,CBoWをベースにしたモデル fastText
の提案を行っている.
CBoWは,注目する1単語 (出力層) を前後 \(n\) 単語 (入力層) の分散表現の平均ベクトル (中間層) で予測するモデルであった.
提案モデルは,CBoWの入力を文書中の単語のone-hotベクトル,出力を文書のラベルに変える (入力にn-gramも加えるとさらに性能が上がる) . 出力層ではword2vecと同じく階層Softmaxを使うことで高速化を図っている.
実験では,CNNのモデルでは数日を要しているが, fastText
では数分で学習が終わることが示されている.
あと,TF-IDF+SVMのモデルでもDLと近いような分類性能が報告されている.
コード
気になったのでKeras実装してみた.
階層Softmaxを組みたくないため,出力層が sigmoid
関数で済む2値分類で比較する.
ちょうどKerasのサンプルコード に映画レビューの2値分類があるので,これを使う.
サンプルのCNNでは2epochでval accuracyが0.88であった (1epoch あたりTesla K40で 7sec CPUでは 70sec).
単語だけを使った fastText
では,1epochが1sec (CPUでは 9~10sec)でCNNと同じtest accuracyに達するまでに6epochを必要とした.
というわけで確かに高速.
雑感
CNNと比較すると指定するパラメータがEmbeddingsの次元数だけで,とりあえずで試せるので重宝しそう.