#はじめに
今回はラベル付きツイートデータの感情分析(Sentiment Analysis,or 感情分類 Sentiment Classification)をしました.
2015/10/19 追加実験を行いました.
2015/12/19 SCNNのソースコード公開しました.hogefugabar/CharSCNN-theano
2015/12/27 SCNNだけでなく,CharSCNNの実装も公開しました.hogefugabar/CharSCNN-theano
#アルゴリズム
今回はDeep Convolutional Neural Networks for Sentiment Analysis of Short Textsという論文に載っているCharSCNNというアルゴリズムを使おうとしたのですが,メモリの都合上SCNNというアルゴリズムを使いました.このアルゴリズムは入力として与える文(Sentence)を,単語のone-hot表現の系列として与えます.CharSCNNは単語に加えて文字にもone-hot表現を与えたものになります.SCNNは僕の理解が間違っていなければ以下に近いアーキテクチャになるかと思われます.
[UNITN: Training Deep Convolutional Neural Network for Twitter Sentiment Classification](http://alt.qcri.org/semeval2015/cdrom/pdf/SemEval079.pdf)より
#実装
GitHubにsatwantrana/CharSCNNがあったのでこれをまんま使おうと下のですが,いろいろコードがおかしかったので自分で修正しました.2015/12/19 ソースコード公開しました.hogefugabar/CharSCNN-theano こちらを参照してください.
To Word Embeddings → Convolution → Max Pooling → Fully-Connected → Fully-Connected → Softmaxみたいな感じで実装しました.Dropout,RMSpropなども使ってます.
#データセット
satwantrana/CharSCNNの中にあったtweets_clean.txtの2万ツイートを使いました.訓練データ18000ツイート,テストデータ2000ツイートです.それぞれのツイートには0/1(negative/positive)のラベルがついていますので,2クラス分類です.
#実験結果
グラフ10シード平均とったもに更に移動平均をとったものになります.
大体2epoch(180000*2 iteration)回したあたりから過学習が始まる感じでした.
最高で0.8ほどの分類精度となりました.元論文には0.82~0.85くらいまで行ったとあったので,データセットの違いやパラメータの違いが影響しているのかなと思います.
#終わりに
一番最初の入力をWord Embeddingsに変換する重みをWord2Vecで事前学習したものを使用すると結果が良くなるらしいのでそれもやってみたい.
#追加実験(2015/10/19更新)
ChainerのサンプルにWord2VecがあったのでSkip-gram with Negative-Samplingで事前学習した結果をつかってみました.Chainerで事前学習してTheanoプログラム回すという笑.cPickleさんありがてえ.
あれ,立ち上がりは事前学習したほうが良かったけど最終的な結果は事前学習していないほうがいい...もうちょっと長く回したらどうなるんだろ.