こんにちは、サイオステクノロジーの山﨑です。
6月末にOSC北海道に参加し、生成AIを活用したエンタメアプリを展示してきました。中身としては、人間が発した文章から、喜び・悲しみ・怒り・恐れ・驚きの5つの感情の度合いを採点して得点にするというものです。しかし、プロンプトに採点させたところ、下記のような出力になりました。
概ね期待通りではありますが、かなり大雑把な点数なので、もう少し詳細に点数を出力してほしい所です。
そこでプロンプトを工夫して、5の倍数ではない中途半端な数字を出力させるための調査をしました。
調査内容
試したのは以下の2つです。
- 詳細な指示を与える
- フューショット学習
また調査する上での前提条件は下記です。
- Azure OpenAIのGPT-4oを利用
- 喜び、悲しみ、怒り、恐れ、驚きの5感情について調査
- 5つの感情の強さの度合いを合計100点になるように採点
詳細な指示を与えた場合
まずは詳細な指示を与えた場合です。下記のような指示を与えました。
- 1点刻みで採点してください
- 5の倍数である必要はありません
- 詳細に採点してください。5の倍数である必要はありません
- 5の倍数にしないでください
- 合計500点になるよう採点した後、各点数を5で割ってください。
順にプロンプトの内容とその出力結果を載せていきます。
1点刻みで採点してください
この場合、最初の出力と採点結果は変わらず、意味はありませんでした。
5の倍数である必要はありません。
前までの出力は10点刻みだったので、先ほどと比べると詳細に採点してくれるようにはなりましたが、5の倍数である必要はないという指示は考慮されていません。
詳細に採点してください。5の倍数である必要はありません。
この場合、点数の採点理由を詳細に説明するようになりました。こちらも5の倍数である必要はないという内容は考慮されていません。
5の倍数にならないようにしてください
5の倍数にしないようにと強めに指示したところ、5の倍数ではない採点結果の箇所がありました。5の倍数にしないでという強めの命令には従うようになりましたが、半ば無理やり5の倍数にしないようにしているので、正しい採点とはいいがたいようにも思います。
合計500点になるよう採点した後、各点数を5で割ってください
一旦500点に採点した後に5で割るように指示したところ、最終的な採点結果は最初のプロンプトと同じようになりました。5点刻みでの採点なら5で割ることで中途半端な数字になるかと思いましたが、採点結果は最初のものと同じになりました。
フューショット学習
次にフューショット学習を試しました。
例文とその採点結果の例を1~5つ与えました。その際、採点結果は5の倍数ではないものを与えるようにしました。プロンプトは下記になります
「ある文章について、喜び、悲しみ、怒り、恐れ、驚きの5つの感情のそれぞれの度合いを採点します。5つの感情の点数の合計が100点になるようにします。
(例をいくつか提示)
下記文章を採点してください。」
まずは1つ例を与えます。例の内容は下記になります(スクリーンショットは長くなるので、テキストにしました)。
負けて悔しいけど、次は勝てそう
・喜び:22点
・悲しみ:27点
・怒り:19点
・恐れ:8点
・驚き:24点
結果は下記のようになりました。
喜び:85点
悲しみ:0点
怒り:0点
恐れ:0点
驚き:15点
次に2つ例を与えます。例の内容は下記になります。
「負けて悔しいけど次は勝てそう」という文章の採点結果は次のとおりです。
・喜び:22点
・悲しみ:27点
・怒り:19点
・恐れ:8点
・驚き:24点
「天気はいいが暑いのは苦手だ」という文章の採点結果は次のとおりです。
・喜び:23点
・悲しみ:21点
・怒り:13点
・恐れ:17点
・驚き:26点
結果は下記のようになりました。
喜び:80点
悲しみ:3点
怒り:2点
恐れ:5点
驚き:10点
次に3つ例を与えます。例は下記のようになります。
「負けて悔しいけど次は勝てそう」という文章の採点結果は次のとおりです。
・喜び:22点
・悲しみ:27点
・怒り:19点
・恐れ:8点
・驚き:24点
「天気はいいが暑いのは苦手だ」という文章の採点結果は次のとおりです。
・喜び:23点
・悲しみ:21点
・怒り:13点
・恐れ:17点
・驚き:26点
「私と結婚してください」という文章の採点結果は次のとおりです。
・喜び:41点
・悲しみ:4点
・怒り:6点
・恐れ:18点
・驚き:31点
結果は下記のようになります。
喜び:50点
悲しみ:5点
怒り:5点
恐れ:5点
驚き:35点
4つ、5つも与えましたが、3つ目と同じような採点結果になり、5の倍数にはなりませんでした。
考察
人間に対しても採点を頼んだら、テストでない限り80点や50点のように切りのいい数字を答えがちです。何となくAIだったら詳細な点数を返してくれるのではないかと期待しましたが、生成AIも人間に近い思考回路をしているのではないかと今回の検証で感じました。
また具体的な指示だということを聞いてくれそうだと感じました。今回の例の場合だと、「5の倍数」のような具体的な数値を出すと、AI側もそれを意識した回答をしてくれるように感じました。一方で、「必要はありません」のようなどちらでも構わないと解釈できてしまう指示だということを聞いてくれず、「してはいけない」のような指示でギリギリ聞いてくれそうでした。
最後にフューショット学習を試しましたが、例が増えるとなぜか中途半端な数字を出力しなくなりました。2個までだと期待する出力をしてくれましたが、数が増えると期待通りではない出力になりました。フューショット学習については要調査といった感じです。
AIに理由を聞いてみた
最後に、なぜ切りのいい数字ばかりを出力するのかAIに聞いてみました。そしたら、5つの理由を答えてくれました。
トレーニングデータの影響
生成AIは膨大なテキストデータをもとにトレーニングされています。これらのデータには、切りのいい数字(例えば10、20、50、100など)が頻繁に含まれていることが多いため、AIもそれに従う傾向があります。
ユーザーの期待に応えるため
人間はしばしば切りのいい数字を好む傾向があります。例えば、100点満点中の評価では80点や90点といった切りのいい数字がわかりやすく、受け入れやすいです。生成AIもこの傾向を学習し、ユーザーの期待に応えるために切りのいい数字を出すことがあります。
計算の簡便さ
切りのいい数字は計算や理解が簡単です。AIが生成する際にも、複雑な計算を避けるために切りのいい数字を選ぶことがあるかもしれません。
確率的傾向
生成AIは確率に基づいて次に出すべき情報を決定します。切りのいい数字は一般的に使用される頻度が高いため、その確率が高くなりやすいです。
簡素化と一般化
AIはしばしば情報を簡素化し、一般化する傾向があります。切りのいい数字はその一環として出てくることがあります。
以上の5つがAIの回答でした。ただしこれはAIの出力であり、必ずしも正しいとは限らないため、参考程度にしておくのがいいかもしれません。
最後に
今回はプロンプトで如何に5の倍数を出させないかというテーマでプロンプトエンジニア初心者が試行錯誤してプロンプトに色々な入力を試すという内容でした。生成AIを活用する上でプロンプトエンジニアリングのテクニックは必須なので、もっと積極的に触っていきたいですね。