はじめに
こんな景色、ずっと見たかった。"公開直後"からずっと!
吉田さん、興津さん、生コメンタリーラジオ みんなでアイうた ありがとうございました!
生コメンタリーラジオ#みんなでアイうた
— 映画『アイの歌声を聴かせて』 絶賛配信レンタル中! (@ainouta_movie) 2022年6月10日
ご視聴いただいた皆様
そして、よっぴーさんと興津さんも
ありがとうございました!!
1週間程度アーカイブ配信しますので
もう一度聴きたい方はコチラから!#アイの歌声を聴かせて @yoshidahisanori @okitsu3__8 https://t.co/a1ChbghuD6
実は今の自然言語処理AIに あるお願い をして、みんなでアイうた に参加していました。
この記事にまとめます。
目次
2022年時点の自然言語処理AIへのお願い
#みんなでアイうた よーし、今日は配信最終日だし、現在の自然言語処理AIの力を借りて参加しちゃうぞー#アイの歌声を聴かせて
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2022年6月10日
サトミのセリフをポジティブ/ネガティブどう判定するかな?https://t.co/ka5kvarits
今の自然言語処理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は、サトミがシオンに言ったセリフをどのように判定したのでしょうか?
果たしてシオンになれるのか、チャレンジスタート!
>>> nlp("AIだってバレたら絶対に許さないから")
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2022年6月10日
[{'label': 'ポジティブ', 'score': 0.8723382353782654}]
→ここはポンコツですね
>>> nlp("歌うの禁止!")
[{'label': 'ポジティブ', 'score': 0.5679196119308472}]
こっちは0.5に近いのでポジティブかネガティブか自信なし#みんなでアイうた
転校直後のセリフ、シオンはネガティブとして受け取っていると思う1ので、ちょっとイマイチ。
「歌うの禁止!」はネガティブだと判定してほしい!
>>> nlp("私の幸せなんてどうでもいいでしょ")
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2022年6月10日
[{'label': 'ポジティブ', 'score': 0.9814968109130859}]
これはポンコツ😂
(めちゃポジティブ思考のAIなのかも)#みんなでアイうた
1日目の音楽室(ユー・ニード・ア・フレンドを歌う前)。
このセリフはネガティブだと思うのですが、ポジティブと受け取ったから、そのまま歌い出したんですかね?
ここはポンコツ具合がシオンと一致しているかも!
>>> nlp("なるわけないでしょ")
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2022年6月10日
[{'label': 'ネガティブ', 'score': 0.981569766998291}]
いまのAI、ここは頑張った。幸せじゃないって判定したから次の施策に行くんですかね?#みんなでアイうた
サトミを幸せにするためにピンチ施策を試した後。
施策を試した後のサトミからのフィードバックはネガティブ(幸せになっていない)。
だから次の施策に行ったのか!
>>> nlp("詩音はいっつも変よ")
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2022年6月10日
[{'label': 'ネガティブ', 'score': 0.7299455404281616}]
自信ないけどネガティブ(=幸せじゃない)よさそう#みんなでアイうた
行動に対してのこのフィードバック、人間だったら結構なダメージだ、これ
※この記事ではアイうたのネタバレしないので、この後に続くサトミ→シオンのセリフに興味のある向きは、Twitterスレッドを直接ご覧ください
やってみての気付き
思わぬ気付きがあったんですよ!
>>> nlp("ちょっと付き合って")
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2022年6月10日
[{'label': 'ポジティブ', 'score': 0.9780380725860596}]
そうか、ロボット側はポジティブなセリフなら肯定すればいいし、ネガティブなら否定すればいいのか#みんなでアイうた
サトミ→シオンのセリフをポジティブ(=サトミは幸せ)と判定したら応じればよさそう。
逆に(あんまりなさそうですが)ネガティブと判定したら断るのかなと思います。
そして、シオンはセリフを文字ではなく音声で受け取っているんですよね。
なので、文字だけでなく抑揚など、感情分析に有用な特徴量が入力されていそうです2。
例えば「歌うの禁止!」も語気が強いですもんね。
日本語テキストからの感情分析を発展させて、日本語音声からの感情分析、できないかなあ(論文とかあるのかなあ?)
終わりに
このアイデア(電波)は、6/9のみんなのPython勉強会で「BERT以後の自然言語処理入門」を話す準備をしている中で浮かびました!
6/9の発表準備はかなり苦労していて、発表が終わって10日にぶっつけ本番で試してみました(いやもうテンション上がっちゃって)
やってみたらポンコツな部分も機能している部分も似ていたという感想です3。
未来は意外と近くにある!
考察的な気付きもあり、手を動かしてよかったなーと思います。
現実にはdaigo/bert-base-japanese-sentiment
のようなAIは誰でも使えるのですが、果たしてシオン開発ではそういうAIを使っているんでしょうか?
こういうところも気になります!
#みんなでアイうた リアルワールドだと優秀なAIは公開してみんなで使えるようにしているから(だからこのスレのポジティブ/ネガティブ判定もできてます)、
— nikkie にっきー シオンv0.0.1開発中⚒ (@ftnext) 2022年6月10日
この世界もシオンのベースになっているAIは誰でも使えるのかもしれないですね