イベント
[CEDEC 2023]AIが「感情を読み取る」ことは可能なのか。自然言語処理と音声解析によるアプローチが解説されたCygamesのセッション
セリフのテキストやボイスデータから,AIに感情を読み取らせるという,興味深い試みが解説されたセッションの模様をレポートしよう。
立福氏はCygamesの開発運営支援部署にいるとのことで,今回の取り組みのきっかけは,ゲームのストーリーパートのスクリプト作成を効率化したい,という社内からの依頼だった。
ストーリーパートのスクリプトとは,登場するキャラクターのセリフや表情などを指定し,制御するもの。
依頼の具体的な内容は,作業担当者が1つずつ行っているキャラクターの表情設定を,AIで自動的に行えないか,というものだった。
それを受けて立福氏は,シナリオ(テキスト)や音声データをAIに入力し,感情に適した表情の設定を出力してもらう,というシステムを作ろうと決めた。
具体的には,会話文のテキストを句読点や記号のところで区切ったうえで,それぞれに「標準」(普段の表情)「喜び」「悲しみ」「怒り」「照れ」という5種類の表情(基本感情)を設定し,出力することを目標とする。
実際のゲームでは,基本感情に加えてキャラクターごとのバリエーションもあるのだが,今回の効率化においては,この5種類が対象。基本感情以外のものはすべて「標準」として扱う。
また,立福氏が「おおざっぱに分類したときの結果も知りたい」ということで,「標準」「ポジティブ(喜び・照れ)」「ネガティブ(悲しみ・怒り)」の3種類に分類する場合についてもテストが行われた。
自然言語処理でのアプローチ
シナリオと音声データを使うということで,AIが行うのは自然言語処理と音声認識ということになる。
まずは自然言語処理についての取り組みが紹介された。
立福氏はまず,「感情分析とは,テキストの部分部分に感情の属性を付けること」だと考え,「固有表現抽出タスク」を試してみることにした。これは例えば「株式会社Cygamesの所在地は東京です」というテキストを入力すると,「株式会社Cygames」に「会社名」,「東京」に「地名」といった属性が割り当てられて出力されるもの。
これを応用して,「はい。よろしくお願いします!」というテキストを入力したら,「はい。」に「標準」,「よろしくお願いします!」に「喜び」の属性が付けられるようにできないか,というわけだ。
だが,実際にAIに学習させたうえでのテストは,うまくいかなかった。
感情判定の精度が低いのも問題だったが,属性の割り当て範囲が文の一部だけだったり,句読点をまたいでしまったりと,想定と違っていたのも大きかったという。
属性の割り当て範囲を人間側から指定することはできないため,固有表現抽出タスクはここであきらめることになった。
この結果を受けて,立福氏は「そもそもAIではどれくらいの感情分析できるのか」ということを確認するべきだと考えた。そのため,(最終的に実装する)句読点や記号区切りの単位ではなく,1行ごとでの処理を試し,それがうまくいったら単位を細かくしていくことにしたという。
そのうえで立福氏が次に試したのは,シナリオの1行を感情ごとに分類する「文章分類タスク」。もちろん1行の中に複数の感情が入ることもあるため,分類は「標準のみ」「標準+喜び」「標準+悲しみ」「標準+ポジティブ(喜び+照れ)」「標準+ネガティブ(悲しみ+怒り)」の5種類とした。
おおざっぱな分類の場合は「標準のみ」「標準+ポジティブ(喜び+照れ)」「標準+ネガティブ(悲しみ+怒り)」の3種類となる。
これをGoogleが開発した自然言語処理モデル「BERT」で試したところ,5種類での正解率は49%だったが,3種類では69%となった。まだ5種類での精度に問題はあるが,立福氏は「AIによる感情認識は可能で,ツールとしても使えそう」という手応えを得たという。
1行ごとの処理でひとまず成果が得られたので,そのまま句読点単位での処理も試したが,精度は下がってしまったとのこと。
立福氏はこの結果について,単純に対象自体の文字数が減る(情報量が減る)だけでなく,前後の文章の情報もなくなるため,判断がつかなくなることが原因だとした。
違うアプローチが必要だと考えた立福氏は,次に「質問応答タスク」を試すことにした。
これは,コンテキストと質問から回答を返すタスクだ。例えば,「伊藤博文は日本の初代内閣総理大臣です」というコンテキストと「日本の最初の内閣総理大臣は誰ですか?」という質問を入力すると,「伊藤博文」という回答を返してくれる。
これを応用して,感情を求めたい文章+前後の文章をコンテキスト,感情を求めたい文章を質問とし,求めたい感情を回答してもらうのが狙いだ。例としては,コンテキストとして「今日は、おすすめの公園に、連れて行くね」という文章を渡したうえで,「『おすすめの公園に』の感情は?」と質問すれば「標準」が,「『連れていくね』の感情は?」と質問すれば「喜び」が返ってくるという感じだ。
そして,立福氏はここにもうひと工夫を加えた。
質問応答タスクには「抽出型」と「生成型」の2種類がある。名前の通り,抽出型はコンテキストの文中から回答を抽出し,生成型は回答の文章を新たに作成するのだが,今回の感情分析は,5種類の感情のどれかを返してもらうだけでいいので,抽出型との相性のほうがよさそうと立福氏は判断した。
そこで,コンテキストの文章の頭に,感情と対応した抽出用の番号を付けることにしたという。0なら「標準」,1なら「喜び」といった具合だ。
ごく希に,数値以外のものが抽出されてしまうこともあったが,その場合は「標準」として処理することにしたそうだ。
これで学習を行いテストした結果,5種類では66%,3種類では70%という正解率になった。ツールとして十分に使える数字だ。
「喜び」「悲しみ」は精度が高い一方,「怒り」「照れ」は低くなっているが,立福氏はこれについて,「怒り」「照れ」の学習用データが少なく,学習量が少ないことが影響したのではないかと推測した。
また,立福氏は今回の講演を行うにあたって,そもそも感情の判別は人間にとっても難しいのではないかと思い,プロジェクト外のエンジニア3人の協力を得て,実際にテストしてみたとのこと。
その結果,なんと人間の正解率は57%で,質問応答タスクよりも低い結果となってしまった。また,人間もAI同様に「怒り」「照れ」の正解率が低くなったという。
音声解析によるアプローチ
続いては音声解析AIでの手法が紹介された。
立福氏はまず,有料で利用できる音声での感情分析システムを見つけて使ってみたが,元気のいい「おはようございます!」が「悲しみ」や「怒り」と判定されてしまうなど,精度は低く,使えるレベルではなかったとのこと。
そこでAIのモデルを自分で探すことになったのだが,ちょうど別件でCNN(Convolutional Neural Networks)という深層学習の仕組みを利用した効果音の分類を行っていたため,「音声による感情分析は,音声の分類と考えられるのでは」と,その仕組みを流用することを思いついたという。
これは音声から特徴量を求め,それをCNNで分類するもの。例えば電話のベルが鳴った後に会話が入る音声データを入力すると,「会話:0.89」「電話のベル:0.75」「室内,小さい部屋:0.23」といった類似度を返してくれる。
とは言え,あくまで効果音用なので,立福氏としては期待が大きかったわけではないようだ。
学習用データの作成するために,句読点ごとに音声ファイルを分ける必要があったが,ゲーム中に適切なタイミングで文字を表示させるためのデータを利用し,「ある程度の精度」で切り出せたという。うまく切り出せていない部分が多少あることは承知のうえで,まずはテストをしてみたようだ。
その結果,正解率は30.8%と,かなり低くなってしまった。ある程度予想していたことではあったが,自然言語処理の作業も同時進行だったため,いったん音声認識の可能性を探ることは止めたという。
しばらくしてから,利用できそうなものを見つけたことで,作業を再開した。それが,Meta(旧Facebook)のAI研究機関が発表した音声認識フレームワークであるWav2Vec2を利用した「SpeechBrain」という音声解析のパッケージだ。前述のCNNで使用したデータをひとまず入れてみたところ,高い精度が出たので,学習用データも,OpenAIが公開した音声認識モデル「Whisper」「WhisperX」を利用してしっかり作り直した。
そうしてテストした結果,正解率は5種類で63%,3種類では66%となった。「標準」「喜び」「悲しみ」は高く,「怒り」「照れ」が低い傾向は,自然言語処理と同様だ。ただ,自然言語処理は対象の前後の文章も渡しているのに対し,音声認識では該当部分のデータだけで判別しているため,その点ではまだ向上が期待できるとのことだ。
開発現場に導入
自然言語処理での正解率は66%,音声解析は63%と,どちらも一定の成果を得て,いよいよツールへ実装することに。立福氏は当初,自然言語処理と音声認識の両方を使う予定だったそうだが,最終的にツールへの実装は自然言語処理のみとした。
実際に導入されると,その効果は大きく,スクリプトチーム全体で10%程度の効率化が実現したそうだ。もちろんAIがつけた表情がすべて正しいとは限らないので,最終的には人による調整が必要になるが,それでも作業負担は大きく減ったわけだ。
立福氏は,AI以外の部分でも効率化を図っている。以前は,「シナリオ執筆ツールからシナリオをダウンロード」→「音声ファイルを共有フォルダからコピー」→「コマンドラインツールを実行」という手順を踏むとスクリプトのひな形が作成され,そこに担当者が表情を追加していくという流れだったが,立福氏が開発したツールは,Jenkins(ソフトウェア開発の自動化支援ツール)でシナリオのIDを指定して実行するだけで,AIによる表情の指定が入ったスクリプトが作成される仕組みになっている。
AIによる感情認識はもちろんだが,チームとしては煩雑化していた手順が単純化されたという改善も大きく,新たに加わったメンバーが作業に慣れるまでの時間も大幅に短縮されたそうだ。
つまりチームにとってはJenkinsのインパクトが大きかったようで,AIの実装に苦心した立福氏としては「ちょっと残念」な気持ちもあるそうだが,「効率化できたのだからよし」として,セッションを終えた。
4Gamerの「CEDEC 2023」記事一覧
- この記事のURL: