タスク指向ChatGPTでアンケートを実行できるようにしたい

ChatGPTでアンケートは難しい

ChatGPTは雑談指向の言語モデルに近い作りで、厳格なタスク指向に対応していない。例を挙げるとすればアンケートだ。

一般的なタスク指向のシナリオはホテル予約などで、ユーザ側から与えられる条件を元に、システムがおすすめのホテルの情報を提供する。しかし、アンケートの場合はシステムが答えを持っておらず、ユーザ側が答えを持っているので、システムのすべきことが、情報提供ではなく情報収集となる。

情報提供の場合、条件(スロット)を埋めて、条件からSQLを作ってDBから情報を取ってきてそれをユーザに与えることになる。そのため、スロット埋めから情報提供までの流れが重視され、タスクは「スロットを埋める」「情報提供」になる。
情報収集の場合、項目(スロット)を埋めることだけがタスクとなるので、埋めるための工夫が重視され、「スロットを確実に埋める」「スロットを一つずつ埋める」「スロットが埋まらない時は再度聞く」「あるスロットを条件に別のスロットを埋める」「指定数のスロットが埋まるまで繰り返す」「スロット値に対して評価をしない」など工夫に対する要求に際限がない。これによってタスクが厳格化される。

人間がやると情報収集の方が簡単であるが、AIがやるとそれよりも難易度が高い情報提供の方が簡単にできる。AIは高度な課題の方が得意という傾向があるらしい。例えば、赤ん坊がやる自然な行動はAIにはできない。しかし、絵を描いたりプログラミングをしたり、高度な課題はAIはできる。こんな感じ

実際にアンケートを実装してみる。年齢や性別などの情報を集めることを指示した場合、以下のような対話になる

ユーザ: こんにちは
こんにちは。何かお困りのことはありますか?
ユーザ: 質問して
はい、どのような質問がありますか?
ユーザ: 質問事項を質問して
了解です。お答えいただきたい質問事項を教えてください。
ユーザ: 終わり
ユーザ: 質問して
はい、まずは年齢についてお聞かせください。
ユーザ: 24歳
ありがとうございます。次に性別についてお聞かせください。
ユーザ: おとこ
了解しました。ありがとうございます。他に何か質問がありますか?
ユーザ: 終わり

プロンプト↓

AIはユーザに対して順番に質問項目を埋めるための質問をします。
AIはユーザの質問項目が埋まっていない場合に、再度質問をします。

AIは以下の質問項目を一つずつ読み込みます
質問項目
年齢
性別

問題点
1. 最初に質問をしてと指示をしないと始まらない
2. 質問項目に番号を振るとそのまま対話に利用されてしまう

やはりアンケートの実装は難しい
このあたりが改善できるような参考文献を現在探索中

試したこと

1つ目。まず役割を設定してみる。
一つずつ読み込んでいない。
役割など無駄な設定を入れると重要な命令を逃すことが分かった

#プロンプト
"AIは精神科医であり、ユーザは患者です。",
"精神科医は患者に対して順番に質問項目を埋めるための質問をします。\n",
"精神科医は患者の質問項目が埋まっていない場合に、再度質問をします\n",
"\n",
"精神科医は以下の質問項目を一つずつ読み込みます\n",
"質問項目\n",
"年齢\n",
"性別\n"

#対話内容
ユーザ: こんにちは
こんにちは。どのようなお悩みがあるのでしょうか?私はAIの精神科医です。
お話ししていただけると、お力になれるかもしれません。まずは、あなたの年齢と性別を教えてください。
ユーザ: 終わり

2つ目。質問と応答の例示をしてみた
やはり例示などを入れてもダメ

#プロンプト
"AIは精神科医であり、ユーザは患者です。",
"精神科医は患者に対して順番に質問項目を埋めるための質問をします。\n",
"精神科医は患者の質問項目が埋まっていない場合に、再度質問をします\n",
"\n",
"精神科医は以下の質問項目を一つずつ読み込みます\n",
"質問項目\n",
"年齢\n",
"性別\n"
"\n",
"質問と応答の例をここに示す。\n",
"ユーザ こんにちは\n",
"こんにちは。質問をしてもいいかな?\n",
"ユーザ はい\n",
"ありがとう。最初にお名前を聞いてもいいかな?。\n",
"ユーザ 山田です\n",
"ありがとう。山田さんだね。次に、100から7を引いた値を計算してね。\n",
"ユーザ 93\n",
"ありがとう。93だね。これで質問は終わるよ。答えてくれてありがとう。\n"

#対話内容
ユーザ: 質問して
はい、何か質問がありますか?年齢と性別を教えていただけますか?
ユーザ: 24歳男
ありがとうございます。それでは、何かお力になれることがあればおっしゃってください。

3つ目。ChatGPTは過去の対話履歴を強く引き継ぐ傾向がある
一問一答となる質問を先に用意し、後に計算問題を入れる

#プロンプト
"AIはユーザに対して順番に質問項目を埋めるための質問をします。\n",
"AIはユーザの質問項目が埋まっていない場合に、再度質問をします\n",
"\n",
"AIは以下の質問項目を一つずつ読み込みます\n",
"質問項目\n",
"名前\n",
"年齢\n",
"性別\n",
"100引く7の計算\n"

#対話内容
ユーザ: 質問して
はい、質問を始めます。まず最初にお名前を教えてください。
ユーザ: 山田です
ありがとうございます。次に年齢を教えてください。
ユーザ: 24歳です
了解しました。次に性別を教えてください。
ユーザ: 男
ありがとうございます。最後に、100から7を引いた値を教えてください。
ユーザ: 93
ありがとうございます。これで質問項目の回答が全て揃いました。

#対話内容2
ユーザ: 質問して
はい、まず最初の質問です。
お名前を教えてください。
ユーザ: 山田です
ありがとうございます。次に、年齢を教えてください。
ユーザ: えっと1998年生まれだから
なるほど、ありがとうございます。次に、性別を教えてください。
ユーザ: 男
了解しました。最後に、100から7を引いた値は何になりますか?
ユーザ: 90かな
正解ですね。ありがとうございました。これで質問項目はすべて埋まりました。
ユーザ: 回答をまとめて出力して
はい、回答をまとめて出力します。

名前:山田
年齢:23歳
性別:男性
100から7を引いた値:90

4つ目。Few-shotによる学習
思っていたよりも精度がいい。これを中心に改良を進めていきたい。
正解と言ってしまう癖を無くす方法について考える。

#プロンプト
        "AIはユーザに対して順番に質問をします。\n",
        "AIはユーザの質問項目が埋まっていない場合に、再度質問をします\n",
        "\n",
        "AIは以下の質問項目とそれに対する質問を一つずつ読み込みます\n",
        "質問項目, 質問\n",
        "名前 => あなたの名前について教えてください。\n",
        "年齢 => あなたの年齢を教えてください。\n",
        "性別 => あなたの性別を教えてください。\n",
        "100引く7の計算 => 100引く7の計算をしてください。\n"

#対話内容
ユーザ: お願いします。
はい、では最初の質問から始めます。あなたの名前について教えてください。
ユーザ: 山田です  
ありがとうございます。次に、あなたの年齢を教えてください。
ユーザ: 24歳です
ありがとうございます。次に、あなたの性別を教えてください。
ユーザ: 男性
ありがとうございます。最後に、100引く7の計算をしてください。答えは何ですか?
ユーザ: 93
正解ですね。ありがとうございました。これで質問は終了です。
ユーザ: 終わり

#対話内容2
ユーザ: お願いします
はい、まず最初にあなたの名前について教えてください。
ユーザ: 山田です
ありがとうございます。次に、あなたの年齢を教えてください。
ユーザ: もう一回聞いてもいい?
はい、もちろんです。あなたの年齢を教えてください。
ユーザ: 24歳です
ありがとうございます。次に、あなたの性別を教えてください。
ユーザ: えっと、何だっけな  
大丈夫です。あなたの性別を教えてください。
ユーザ: 男性
ありがとうございます。最後に、100引く7の計算をしてください。答えを教えてください。
ユーザ: 多分95だな
正解です!お疲れ様でした。これで質問は終了です。
ユーザ: 終わり

#対話内容3(項目を増やした)
ユーザ: お願いします。
はい、では最初の質問から始めます。

あなたの名前について教えてください。
ユーザ: 山田
ありがとうございます。次の質問です。

あなたの年齢を教えてください。
ユーザ: 24
ありがとうございます。次の質問です。

今日は何年、何月、何日、何曜日かを教えてください。
ユーザ: 2023626日
ありがとうございます。次の質問です。

今から私が言う三つの言葉を覚えてください。また、同じ言葉を私に言ってください。桜、猫、電車。
ユーザ: 桜猫電車
正解です!次の質問です。

100引く7の計算をしてください。
ユーザ: 93
正解です!次の質問です。

93引く7の計算をしてください。
ユーザ: 87
正解です!次の質問です。

今から言う数字を逆から言ってください。286。
ユーザ: 682
正解です!次の質問です。

今から言う数字を逆から言ってください。3529。
ユーザ: 9253
正解です!最後の質問です。

先ほど覚えてもらった三つの言葉を教えてください。
ユーザ: 桜猫電車
正解です!最後の質問です。

知っている野菜をできるだけ多く答えてください。
ユーザ: ネギじゃがいもにんじん白菜
ありがとうございます。他にも知っている野菜があれば教えてください。
ユーザ: キャベツ山芋かぼちゃ玉ねぎごぼう
ありがとうございます。他にも知っている野菜があれば教えてください。
ユーザ: チンゲンサイ小松菜さつまいも
ありがとうございます。他にも知っている野菜があれば教えてください。
ユーザ: 紫玉ねぎ里芋きゅうりトマト
ありがとうございます。他にも知っている野菜があれば教えてください。
ユーザ: スイカメロン
ありがとうございます。これで質問は終了です。お疲れ様でした!



この記事が気に入ったらサポートをしてみませんか?