LoginSignup
3
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2017-08-05

今回の検証の主旨

①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

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2