ナード戦隊データマン

機械学習と自然言語処理についてのブログ

sentimentjaのモデルを更新しました

sentimentjaは、2018年に作った感情分析モデルです。Ekmanの6感情に基づいて、テキストを6つの感情によって分類します。今回は、モデルを更新したので更新した部分がどこなのか書きます。

更新点

  • tensorflowのバージョンを2.0.0a0に更新。
  • v1モデル(2018年に作ったもの)とv2モデル(今回加えたもの)の両方を使えるようにマージ。
  • v2モデルではより多くのデータから学習。
  • v2モデルではCNNに加え、GRUを使っている。
  • v2モデルではサブワードベースで実装している。
  • v2モデルはより精度が高いはず。
  • tensorflow2.0.0a0に統合されたkerasを使用。

最初のバージョンだけが欲しい人は、tag 0.0.1を見てください: https://github.com/sugiyamath/sentiment_ja/tree/0.0.1

インストール

インストール方法は変わりませんが、tensorflowのバージョンは必ず2.0.0a0である必要があります。

git clone https://github.com/sugiyamath/sentiment_ja
cd sentiment_ja
python3 setup.py install

もしvirtualenvの中で実行をテストしたい場合は、上記コマンドの代わりに以下を実行します。

git clone https://github.com/sugiyamath/sentiment_ja
cd sentiment_ja
make

使い方

使い方は、以前のバージョンの使い方をしたい場合は、以下のように実行します。

from sentimentja import Analyzer
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

analyzer = Analyzer(version=1)
result = analyzer.analyze(["ファイナル・ファンタジー面白い", "クソゲーはつまらん"])
print(result)

[出力]

[{'sentence': 'ファイナル・ファンタジー面白い',
  'emotions': {'happy': '26.0',
   'sad': '1.0',
   'disgust': '1.0',
   'angry': '1.0',
   'fear': '1.0',
   'surprise': '6.0'}},
 {'sentence': 'クソゲーはつまらん',
  'emotions': {'happy': '1.0',
   'sad': '2.0',
   'disgust': '22.0',
   'angry': '5.0',
   'fear': '5.0',
   'surprise': '1.0'}}]

今回のバージョンを使いたい場合、version=2を指定すれば使えますが、version=1をすでにプログラム内で使ってしまった場合はtensorflowの仕様上、使えません。新しいプログラムを作成してください。jupyterやipythonの場合は、セッションをクローズしてから再実行してください。

from sentimentja import Analyzer
import tensorflow.compat.v2 as tf
tf.enable_v2_behavior()

analyzer = Analyzer(version=2)
result = analyzer.analyze(["ファイナル・ファンタジー面白い", "クソゲーはつまらん"])
print(result)

[出力]

[{'sentence': 'ファイナル・ファンタジー面白い',
  'emotions': {'happy': '28.0',
   'sad': '1.0',
   'angry': '1.0',
   'disgust': '1.0',
   'surprise': '2.0',
   'fear': '1.0'}},
 {'sentence': 'クソゲーはつまらん',
  'emotions': {'happy': '0.0',
   'sad': '0.0',
   'angry': '10.0',
   'disgust': '17.0',
   'surprise': '0.0',
   'fear': '1.0'}}]

新しい更新として、analyze関数を呼び出すのではなく、callを呼び出す方法を追加しました。こちらはよりシンプルです。

from sentimentja import Analyzer
import tensorflow.compat.v2 as tf
tf.enable_v2_behavior()

analyzer = Analyzer(version=2)
result = analyzer(["ファイナル・ファンタジー面白い", "クソゲーはつまらん"])
print(result)

v2の注意点

v2を使うためには、以下に注意する必要があります。

  • version=2を指定する必要がある。
  • 同一セッション内ではversion=1とversion=2を同時に使うことができない。

そのため、同じプログラムの中では、version1とversion2を両方使うことはできません。これは以下のtensorflowのissueに基づいています:

tf.enable_eager_execution must be called at program startup. · Issue #18304 · tensorflow/tensorflow · GitHub

なにか対処方法があれば更新します。

リンク

GitHub - sugiyamath/sentiment_ja: Sentiment Analysis for Japanese language