#今回の検証の主旨
①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表示
#大まかな流れ
◯データセット取得・CSV化
◯共通関数の定義
・レビュー文章のクレンジング
- stopwordの除去(is andなど、判別に不要)
- HTMLタグの除去
・レビュー文章の数値ベクトル化(n次元の数値配列化)
・他、CSV処理用
◯学習 ☓ 4パターン
◯検証 ☓ 4パターン
※ロジ回帰/LSTM/biLSTM/CNN
#データセット取得・CSV化
①ダウンロード(http://ai.stanford.edu/~amaas/data/sentiment/)
・5万個のテキストファイル
・中身は英文のレビュー文章
②CSVを作成
・5万行の「レビュー文章、ポジネガ判定のクラルラベル(0 or 1)」のCSVを作成
#共通関数の定義
①レビュー文章のクレンジング
- stopwordの除去(is andなど、判別に不要)
- HTMLタグの除去
③レビュー文章のベクトル化(n次元の数値配列化)
HashingVectorizerインスタンス化。
レビュー文章をN次元の特徴ベクトル化するのに、後ほど利用。N次元の (Hashid、特徴ベクトル)のSparse配列に変換される
上の例では、2**21 = 20976152次元 となる。
なお今回の検証では
・MLは、20976152次元
・DLは、512次元 とした。 ※次元数を増やすと処理時間が跳ねあがったため。
これが、DLでうまく判別できてない理由に繋がっている。
#学習〜検証
#気付き&つぶやき
◯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