DeepLearning
Keras
TensorFlow

感情分析を題材に、ロジスティック回帰とDLを比較してみる(2017/6/27)


今回の検証の主旨

①IMDbデータセットを利用して感情分析する。
 ・Internet Movie Database(インターネット・ムービー・データベース、略称:IMDb)は俳優、映画、テレビ番組、テレビ・スターおよびビデオゲームに関する情報のオンラインデータベース。1998年からはAmazon.comによって提供されている。(from wiki)
 ・IMDbデータセットは、5万件のレビュー文章+5段階レーティングで構成される。

②同じインプットデータに対し、ML/DLで判別
 ・それぞれの弁別精度/学習時間/前処理などの留意事項を把握
 ・使い分けの勘所を考察

結果のサマリ

◯今回検証では、検証環境の制約に起因してDL各方法では満足のいくAccuracyを出せなかった。
◯デモコードをなぞるのとは異なり、自分で用意したデータに対して、500,1000など最適なinputやoutputの次元数を探り、期待する結果を得るのは結構ハードルが高いと感じた。

※今回の検証でDLで弁別精度が悪かった原因は、学習の時間短縮のために特徴次元を圧縮しすぎたためと推察

 →DLの手法で成果を出すためには、学習のためのマシンリソース確保が重要な要素であることを改めて理解した。

検証環境

◯Anaconda 4.4.0 〜 ipython (on mac)
◯virtualenv でpython3.5環境構築
◯追加ライブラリは下記
  ・nltk →Natural Language Toolkit。今回はstopwordの取得に利用(後述)
  ・sklearn →レビュー文章のベクトル化、ロジスティック回帰に利用
  ・graphviz/pydot →NNのモデル視覚化に利用
  ・PyPrind →処理のProgress Bar表示
Kobito.jb56MT.png

大まかな流れ

◯データセット取得・CSV化
◯共通関数の定義
 ・レビュー文章のクレンジング
   - stopwordの除去(is andなど、判別に不要)
   - HTMLタグの除去  
 ・レビュー文章の数値ベクトル化(n次元の数値配列化)
 ・他、CSV処理用
◯学習 ☓ 4パターン
◯検証 ☓ 4パターン
 ※ロジ回帰/LSTM/biLSTM/CNN

データセット取得・CSV化

①ダウンロード(http://ai.stanford.edu/~amaas/data/sentiment/)
 ・5万個のテキストファイル
 ・中身は英文のレビュー文章
Kobito.5YT7E6.png

②CSVを作成
 ・5万行の「レビュー文章、ポジネガ判定のクラルラベル(0 or 1)」のCSVを作成
Kobito.xVOuJ8.png

Kobito.vJ2DpI.png

共通関数の定義

①レビュー文章のクレンジング
   - stopwordの除去(is andなど、判別に不要)
   - HTMLタグの除去
Kobito.UM8yhi.png

②CSV処理用
Kobito.uGU2mn.png

③レビュー文章のベクトル化(n次元の数値配列化)
Kobito.nOweSp.png
HashingVectorizerインスタンス化。
レビュー文章をN次元の特徴ベクトル化するのに、後ほど利用。N次元の (Hashid、特徴ベクトル)のSparse配列に変換される

上の例では、2**21 = 20976152次元 となる。
なお今回の検証では
 ・MLは、20976152次元
 ・DLは、512次元   とした。 ※次元数を増やすと処理時間が跳ねあがったため。

これが、DLでうまく判別できてない理由に繋がっている。

学習〜検証

①ロジスティック回帰
Kobito.EoAwgX.png

②DL共通
Kobito.txmt0V.png

②-1. LSTMのモデル定義
image.png

②-2. bi-LSTMのモデル定義
image.png

②-3. CNNのモデル定義
image.png
image.png

結果まとめ

image.png

気付き&つぶやき

◯DLの学習には半端なくコストがかかる(マシン時間)
◯MLでできることは、DLではなく素直にMLを使うのが良さそう。コスト・説明力観点で
◯DLの層の組み方は世間のデモを参考にするとしても、やりたいことに対してinputやoutputの次元数を考えるのはなかなか難しい
◯DL(MLもだが)にインプットするデータを整備するのは労力が掛かる
◯本当は、DLの3種類のモデルの使い分けも考察したかったが、至らなかったのが残念

参考情報

◯「Python機械学習プログラミング 9章」 @インプレス
◯NNモデルの層の組み方については、以下を参考
https://github.com/fchollet/keras/blob/master/examples/imdb_lstm.py
https://github.com/fchollet/keras/blob/master/examples/imdb_bidirectional_lstm.py
https://github.com/fchollet/keras/blob/master/examples/imdb_cnn.py