Character-level Convolutional Networks for Text Classificationを読んだ
今日から20minくらいで論文1本ずつ斜め読みして15分くらいでメモ書いていこうと思う.
別にわざわざ俺が書くまでもないくらい有名なの多めだけど、
そんなこと言ってたら何も書けないのです.
NIPSにacceptされた奴をチマチマ読みたいけど、
その前にText classificationをちょっと勉強しておきたいので、こいつを読む.
[1509.01626] Character-level Convolutional Networks for Text Classification
よく見る文字レベルでテキスト分類する有名な奴.
構造は以下のような感じ.
メリットとしては,
- 文字レベルでConvNetに書けるので、単語の知識が不要.
- ミススペルや顔文字っぽいのにも対応できる(?)
とか何とか.
ハイパーパラメータ
ここで主に試しているのは大きめと小さめの2種類と比較用に色々.
- 9 layer (6 conv-layer + 3 FC-layer)
- 1D-max pooling (temporal max-poolingと呼んでる)
- ReLU
- minibatch 128
- momentum 0.9
- initial step size 0.01 (3 epoches ごとに10倍)
- 使用している単語は70文字
- feature length 1014
- FCにはdropout (p=0.5)
data augmentationもなんか試してるっぽい. (あんまちゃんと読めてない)
比較対象
- BoW and TF-IDF
- n-gram and TF-IDF
- Bag of means on word embedding
- word-base ConvNet (word2vec embedding, dimension = 300)
- LSTM (word2vec embedding, dimension = 300)
おまけとしてアルファベットの大文字・小文字を区別したケースも試したらしいけど、
イマイチだったと書いてある.
検証結果
追試はしてない. そのうちやりたい.
結論としては大規模データセットであれば強い.
(青字がベストモデル・赤字がワーストモデル)
Yelp.P が訓練データ56万、Yelp.Fが65万でちょうどn-gramあたりが優位になる境目っぽい.
100万データセットを超えるYahoo, Amazonあたりだとかなり強い.
Sogouデータセットは中国語ソースらしいが、pypinyinパッケージとjiebaという奴で、
中国語をローマ字化したらしい.
たまに出てくるローマ字化のくだりはここか.
感想
これをやるときは訓練データ100万は揃えてからが勝負感あるということで.(強い
ペーパーの最後がノーフリーランチで終わってるのなかなか趣がある.