nikkie-ftnextの日記

イベントレポートや読書メモを発信

今の自然言語処理AIは #アイの歌声を聴かせて のシオンとどれくらい近いのか、感情分析機能を比較してみました

はじめに

こんな景色、ずっと見たかった。"公開直後"からずっと!

吉田さん、興津さん、生コメンタリーラジオ みんなでアイうた ありがとうございました!

実は今の自然言語処理AIに あるお願い をして、みんなでアイうた に参加していました。
この記事にまとめます。

目次

2022年時点の自然言語処理AIへのお願い

今の自然言語処理AIには、日本語の文章がポジティブかネガティブか判定できるものがあります(このタスクは感情分析や極性判定と言われます)。

このAIに『アイの歌声を聴かせて』のサトミのセリフを入れたら、サトミの感情(ポジティブ/ネガティブ)を判定できるってことですね!!
今のAIでどのくらい感情を判定できるのか(シオンとどれくらい一致するのか)私気になります!

ポジティブ/ネガティブと幸せか否かは、以下の仮説で対応させることにしました:

  • サトミのセリフがポジティブならサトミは幸せ
  • サトミのセリフがネガティブならサトミは幸せでない

感情分析、わずか数行!

上記のAI(daigo/bert-base-japanese-sentiment)を使うには、Pythonでは以下のようなコードになります:

from transformers import pipeline

nlp = pipeline(
    "sentiment-analysis",
    model="daigo/bert-base-japanese-sentiment",
    tokenizer="daigo/bert-base-japanese-sentiment",
    truncation=True,
)

python -i awesome.py で実行した後、nlpに文字列を渡すと感情分析されます!

>>> nlp("吾輩は猫である")
[{'label': 'ポジティブ', 'score': 0.9805924892425537}]

スコアについて

上のスコアですが、ポジティブ+ネガティブ=1になると理解しています。

  • 1に近いとポジティブ/ネガティブ自信あり
  • 0.5に近いとポジティブかネガティブか自信なし

ポジティブ+ネガティブ=1の挙動は、以下のサイトでも確認できます(Hosted inference API)。

結果発表! ポンコツ具合がシオンと近い?

それでは現在の日本語感情分析AIは、サトミがシオンに言ったセリフをどのように判定したのでしょうか?
果たしてシオンになれるのか、チャレンジスタート!

転校直後のセリフ、シオンはネガティブとして受け取っていると思う1ので、ちょっとイマイチ。
「歌うの禁止!」はネガティブだと判定してほしい!

1日目の音楽室(ユー・ニード・ア・フレンドを歌う前)。
このセリフはネガティブだと思うのですが、ポジティブと受け取ったから、そのまま歌い出したんですかね?
ここはポンコツ具合がシオンと一致しているかも!

サトミを幸せにするためにピンチ施策を試した後。
施策を試した後のサトミからのフィードバックはネガティブ(幸せになっていない)。
だから次の施策に行ったのか!

行動に対してのこのフィードバック、人間だったら結構なダメージだ、これ

※この記事ではアイうたのネタバレしないので、この後に続くサトミ→シオンのセリフに興味のある向きは、Twitterスレッドを直接ご覧ください

やってみての気付き

思わぬ気付きがあったんですよ!

サトミ→シオンのセリフをポジティブ(=サトミは幸せ)と判定したら応じればよさそう。
逆に(あんまりなさそうですが)ネガティブと判定したら断るのかなと思います。

そして、シオンはセリフを文字ではなく音声で受け取っているんですよね。
なので、文字だけでなく抑揚など、感情分析に有用な特徴量が入力されていそうです2
例えば「歌うの禁止!」も語気が強いですもんね。
日本語テキストからの感情分析を発展させて、日本語音声からの感情分析、できないかなあ(論文とかあるのかなあ?)

終わりに

このアイデア(電波)は、6/9のみんなのPython勉強会で「BERT以後の自然言語処理入門」を話す準備をしている中で浮かびました!
6/9の発表準備はかなり苦労していて、発表が終わって10日にぶっつけ本番で試してみました(いやもうテンション上がっちゃって)

やってみたらポンコツな部分も機能している部分も似ていたという感想です3
未来は意外と近くにある!
考察的な気付きもあり、手を動かしてよかったなーと思います。

現実にはdaigo/bert-base-japanese-sentimentのようなAIは誰でも使えるのですが、果たしてシオン開発ではそういうAIを使っているんでしょうか?
こういうところも気になります!

動作環境

  • IntelチップのmacOS(M1ではないということです)
    • CPUで検証しています
  • Python 3.9.4
  • torch 1.11.0
  • transformers 4.19.2
    • pip install torch transformers[ja] で環境構築しました

  1. 監督のトークからここでシオンは歌うの禁止を学習していると理解しています

  2. さらに言えば、シオンは音声だけでなく視覚情報も使ってますよね(マルチモーダル)

  3. シオンのソフトウェアとハードウェアは同じタイミングで完成していなくても辻褄は合うので、自然言語処理AIとしてはひょっとするとほとんど変わらないのかもしれません。魔法は他のソフトウェアやハードウェアなのかも!