ディープラーニングを使って映画の感想レビューデータを感情分析してみたけど・・・

シェアする

スポンサーリンク

別記事作成中(データ集めて、少し修正してやり直したら・・・)

株購入の判断条件のひとつとして、個人投資家などのTwitterの発言などを使えないかと
ディープラーニングを使って転職会議の企業クチコミデータを感情分析してみるという面白そうな記事を参考に、まず手始めに映画感想レビューをもとに試してみたのですが・・・

trainデータ pos/neg 2000,2000 testデータ pos/neg 2000,2000集めてもやってみたのだが、7から8割の正答率まではたどり着けず。

入力としてはMecabでの単語単位と記事にある1文字ずつを数値化する方法どちらでも試してみた。

サンプルを再度集めている最中なのですが、
最後にTrain pos/neg 700/700 test pos/neg 700 700のサンプルで以下の設定の場合で
3未満、4以上(サンプルが少ないので)の評点を2未満,5以上の評点のみ抽出(ネガティブ評価のほうがサンプルが少なくてこの切り分けも微妙な気がするが)
他設定値などは下記。


model options {
'encoder': 'lstm',
 'optimizer': ,
 'validFreq': 30, 
 'lrate': 0.0001, 
 'batch_size': 16,
 'decay_c': 0.0, 
'patience': 10, 
'reload_model': None,
 'n_words': 15000, 
 'max_epochs': 100, 
 'dispFreq': 10, 
 'dataset': 'imdb',
 'valid_batch_size': 64,
 'use_dropout': True,
 'dim_proj': 8,
 'maxlen': 4500,
 'saveto': 'lstm_model.npz', 
 'noise_std': 0.0,
 'test_size': 1400, 
 'saveFreq': 1110}
Loading data
test size:1400
ydim:2
Building model
Optimization
1330 train examples
70 valid examples
1400 test examples

その結果
pos分析確率: 0.532857142857 373 700
neg分析確率: 0.898571428571 629 700

dim_proj隠れ層は時間かかるので、まだ確認できてないが、2000/2000サンプルにしてもposの確率が3割とかだったので、上記の確率はそれポックなってきたような気もしますが、微妙ですね。もうちょっとサンプル集め中。

ディープラーニングを使って転職会議の企業クチコミデータを感情分析してみるの記事ではエラー率のところで
「検証データを終える2600 updateを超えたあたりで1エポックを終えるので、その後から誤差が縮んでいる様子が見える。」とあるが、batch_sizeサイズがデフォルトで16なので、2600updateで1エポックじゃなくて、実行時のログ上だとその十分の1ぐらいで1epochなりそうだけど、実際には設定値などをいろいろ変えてるんだろうか。

とりあえず、私が実装した入力部に問題なければ、
「dim_proj=8(隠れ層)、validFreq=30(検証頻度)」だとサンプルが4000でも記事の図のような、激しい上下の繰り返しはログでは発生しなかった・・・(モデルデータのほうにヒストリーデータが含まれているようなので、そちらで確認すればいいのかもしれない)

そもそもいろいろなことを理解してないので、正解が見えてないが正答率どちらも7割から8割には持って行きたいな。
しかし、映画感想レビュー人気作品のは4、5とかばかりで評価が低い感想を集めにくい。人気がなくなるにつれレビュー数も減っていくので・・・

調査中
考えられる原因、imdb_preprocess.pyのMecab or 1文字ずつの日本語対応した箇所。
lstm.py,imdb.pyの設定値、変更箇所
sample(negaposi.py)の処理
(関連するTheanoのLSTM Tutorialで何やっているのかコードリーディングする記事ではimdb.pyを拡張するのが一番手軽となっていたが、imdb_preprocessで読み込み部分を日本語対応すれば、train,testデータを作成できるので活用することにした。)

error: