論文: Convolutional Neural Networks for Sentence Classification
概要
- CNNを使ってdocument classificationをやってみた
- word2vecが予想以上にうまくいっていることがわかった
内容
CNN for Text
テキストは単語の並び。まず、単語のその分散表現で表してその上でCNNをする。
I have a dream .
という文章に対して、windowが3のCNNを行うと<BOS> I have
、I have a
、have a dream
、a dream .
、dream . <EOS>
それぞれに対して同じフィルターがかかり、非線形の活性化関数を通る。式で書けば
$${\bf c_i} = f(W{\bf x_{i:i+h}}+{\bf b})$$
ここで、${\bf x}$はword2vecで学習された単語の分散表現。
この結果
$$
{\bf c} = [{\bf c_1}, {\bf c_2}, {\bf c_3}, \cdots, {\bf c_{T-h+1}}]
$$
がこの層の出力になる。プーリングをして一つのベクトルにする。
プーリングは各特徴量に対してその最大のものをとるmax-over-timeを使う。
モデルの種類
- CNN-rand: 単語の分散表現を全てランダムに初期化して学習する。
- CNN-static: 単語の分散表現をword2vecで初期化して、学習はしない。word2vecにない単語はランダムに初期化
- CNN-non-static: 単語の分散表現をword2vecで初期化して、fine-turningする。word2vecにない単語はランダムに初期化
- CNN-multichannel: 単語の分散表現はword2vecで初期化して、二つにコピーする。一つはfine-turningして、もう一つは学習しない。二つを両方とも入力として扱う。
これらを比較して、word2vecの汎用性、fine-turningの効果、multichannelの効き具合を検証する。
結果と議論
ランダムに初期化されて学習したCNN-randはword2vecで初期化されて学習しなかったCNN-staticよりも結果がよくない。word2vecは特定のタスクのみではなく多様なタスクで使えるものなのではないか?
fine-turningにより、もっと精度が上がる。
Multichannel vs. Single Channel
思ったよりもmultichannelの効果がなかった。
もっと実験が必要。
Static vs. non-Static
staticとnon-staticの比較では、non-staticの方が全体的にいい。
タスクによって最適な単語の表現は変わる。例えば、元々の分散表現ではbadはgoodに近い。これは、文法的に近いから。これに対して、感情分析のタスクではこれらの単語は遠くになければならない。感情表現のタスクの中でfine-turningされた分散表現では、badはterribleなど、goodはniceなどに近くなる。