感情分析ライブラリML-AskのPythonライブラリのインストールを行います。
・ML-Ask
http://arakilab.media.eng.hokudai.ac.jp/~ptaszynski/repository/mlask.htm
ML-Askでは「喜、 怒、 哀、 怖、 恥、 好、 厭、 昂、 安、 驚」の10種類の感情の推定をしてくれます。
感情の推定は複数行なってくれて、その中の代表的な感情も抽出してくれます。
また、推定された感情から「ネガティブ、ポジティブ、ニュートラル」の3種類のネガぽじの分類を実施してくれます。
感嘆符などにより感情の強さを測定したり、否定語などを考慮した文脈なども考慮してくれます。
・Git
https://github.com/ikegami-yukino/pymlask
詳細はML-Ask Pythonのプロジェクトのコントリビューター(というか製作者?)の方が記載している記事が一番参考になります。
https://qiita.com/yukinoi/items/ef6fb48b5e3694e9659c
Mecabのインストール
ML-AskではMecabがないと動かないためインストールを行います。
今回は開発環境からインストールしています。
また、辞書として「mecab-ipadic-neologd」もインストールします。
開発環境インストール
1 2 3 |
# dnf group install "Development Tools" |
Groongaリポジトリを導入
1 2 3 4 5 6 7 8 |
# rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm # yum -y makecache # vi /etc/yum.repos.d/groonga.repo --- 変更 gpgcheck=0 --- |
Mecab本体+その他諸々のインストール
1 2 3 4 5 6 |
# yum -y install mecab mecab-ipadic # yum -y install mecab-devel # pip3 install mecab-python3 # pip3 install unidic-lite |
mecab-ipadic-neologdのインストール
1 2 3 4 5 6 |
# cd /usr/local/src # git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git # cd mecab-ipadic-neologd # ./bin/install-mecab-ipadic-neologd -n |
こちらでmecab関連の設定が終わりました。
ML-AskのPythonライブラリのインストール
それではいよいよ本番のML-AskのPythonライブラリのインストールを行います。
1 2 3 |
# pip3 install pymlask |
ライブラリだけですとインストールはとても簡単です。
それではこちらのテストを行います。
ML-Askの動作確認
まずはgitに記載されているサンプルの文章での解析を行います。
ライブラリはmecab-ipadic-neologdのインストールされたパスを指定しています。
1 2 3 4 5 6 7 8 |
from mlask import MLAsk emotion_analyzer = MLAsk('-d /usr/lib64/mecab/dic/mecab-ipadic-neologd') result = emotion_analyzer.analyze('彼のことは嫌いではない!(;´Д`)') print(result) |
こちらを実行した結果です。
1 2 3 4 |
# python3 ml-ask-test.py {'text': '彼のことは嫌いではない!(;´Д`)', 'emotion': defaultdict(<class 'list'>, {'yorokobi': ['嫌い*CVS'], 'suki': ['嫌い*CVS']}), 'orientation': 'POSITIVE', 'activation': 'NEUTRAL', 'emoticon': ['(;´Д`)'], 'intension': 2, 'intensifier': {'exclamation': ['!'], 'emotikony': ['´Д`', 'Д`', '´Д', '(;´Д`)']}, 'representative': ('yorokobi', ['嫌い*CVS'])} |
確かにサンプルのような結果が表示されています。
「yorokobi:喜」に分類されているようなので否定後なども当てはまっているようです。
感情は以下で結果が出てくるようです。
- aware:哀
- haji:恥
- ikari:怒
- iya:厭
- kowa:怖
- odoroki:驚
- suki:好
- takaburi:昂
- yasu:安
- yorokobi:喜
折角なのでもう一つ解析を。
コロナ系の記事など感情・ネガポジがわかりやすい文章を解析してみます。
若干、出力を調整しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
from mlask import MLAsk emotion_analyzer = MLAsk('-d /usr/lib64/mecab/dic/mecab-ipadic-neologd') result = emotion_analyzer.analyze('居酒屋「もう駄目かも」、旅行会社「ショック」…GoTo見直しに懸念と困惑。新型コロナウイルスの感染が急拡大する中で迎えた3連休初日の21日、政府が需要喚起策「Go To キャンペーン」の運用を見直す方針を打ち出した。観光業者や旅行者からは、回復傾向にある観光への打撃を懸念する声や、方針変更に戸惑う声が相次いだ。') print("text:{}".format(result['text'])) print("emotion:{}".format(result['emotion'])) print("orientation:{}".format(result['orientation'])) print("activation:{}".format(result['activation'])) print("emoticon:{}".format(result['emoticon'])) print("intension:{}".format(result['intension'])) print("intensifier:{}".format(result['intensifier'])) print("representative:{}".format(result['representative'])) |
さて、こちらの出力の結果が以下になります。
1 2 3 4 5 6 7 8 9 10 11 |
# python3 ml-ask-test2.py text:居酒屋「もう駄目かも」、旅行会社「ショック」…GoTo見直しに懸念と困惑。新型コロナウイルスの感染が急拡大する中で迎えた3連休初日の21日、政府が需要喚起策「Go To キャンペーン」の運用を見直す方針を打ち出した。観光業者や旅行者からは、回復傾向にある観光への打撃を懸念する声や、方針変更に戸惑う声が相次いだ。 emotion:defaultdict(<class 'list'>, {'iya': ['困惑', '戸惑う', '駄目'], 'kowa': ['懸念'], 'odoroki': ['ショック']}) orientation:mostly_NEGATIVE activation:ACTIVE emoticon:None intension:2 intensifier:{'interjections': ['ウイ'], 'exclamation': ['…']} representative:('odoroki', ['ショック']) |
結果はかなり納得のいくもので、代表的な感情が「驚」で「厭」「怖」「驚」を含んでいます。
感情としては「とてもネガティブ」ということで非常に腑に落ちる結果でした。
複数の角度での感情の分析はとても面白いと思います。
では、今回はこの辺で。
このブログは株式会社CoLabMixによる技術ブログです。
GCP、AWSなどでのインフラ構築・運用や、クローリング・分析・検索などを主体とした開発を行なっています。
Ruby on RailsやDjango、Pythonなどの開発依頼などお気軽にお声がけください。
開発パートナーを増やしたいという企業と積極的に繋がっていきたいです。