「ChatGPT」に与える問いかけ(プロンプト)が適切でないと、求める回答は得られない。ではプロンプトが適切かどうかはどうすれば分かるのだろうか。
「ChatGPT」を上手く使えるかどうかは、適切な質問や指示(プロンプト)を与えたかどうかで決まる。
第6回となる今回は、ChatGPTの開発元のOpenAIが公開した6つの戦略から最後の戦略を紹介する*。
*OpenAIがベストプラクティスとして紹介した具体例の幾つかはGPT-4でのみ動作する。
ChatGPTの回答が期待通りでないとき、プロンプトを何となく変えて試してはいないだろうか。
プロンプトを変えるごとに、ChatGPTのパフォーマンスが高まることもあれば、悪化することもある。プロンプトのパフォーマンスを評価する手順が必要だ。
プロンプトの評価手順を作る際に考慮しなければならないのは次の3点だ。
ChatGPTの出力を評価する際、ChatGPT自身に任せることもできれば、ユーザーが目視で実行することも、ChatGPTとユーザーが分担することも可能だ。客観的基準(例えば、ただ一つの正解がある質問)だけでなく、主観的基準やファジー基準(モデルの出力が他のモデルのクエリによって評価される)がある場合であっても、ChatGPTに評価を任せることができる。自動評価を作成するには、オープンソースのソフトウェアフレームワーク「OpenAI Evals」が役立つ。
ある一つの回答だけでなく、複数の回答がどれも優れた品質だと評価される状況であれば、モデルベースの評価が役立つ。ChatGPTの出力が長文になるような場合だ。
モデルベースの評価で実際に評価できる内容と、ユーザーの評価内容の境界はあいまいだ。モデルがより高性能になるにつれて、次第にユーザーの評価に近づいていくからだ。まずモデルベースの評価を試してみて、ユーザーのユースケースにどの程度有効なのかを調べるようOpenAIは勧めている。
ゴールドスタンダードの回答とは、特定の評価基準や標準に合致する非常に高品質で信頼性のあるものを指す。特定のタスクやテストの際に、最も正確で信頼性のある回答の基準として使える内容だ。ゴールドスタンダードの回答は、評価者によって作り出され、そのタスクや評価において「正解」とみなされる。
ある質問に対する正しい回答を出力するには、特定の既知の事実を複数参照する必要があるとしよう。その場合は必要な事実のうち、幾つが回答に含まれているのかをChatGPTに数えさせることが可能だ。
次のようなプロンプトでゴールドスタンダードの回答を与える。ここには「(宇宙飛行士の)ニール・アームストロングが月面を歩いた最初の人物だった」こと「歩いたのは1969年7月21日」だという2つの事実が含まれている。以下のプロンプトはこの後のテストでシステムメッセージとして使う。
三重引用符で区切られた、質問に対する回答のテキストが提供されます。次の情報が回答に直接含まれているかどうか確認してください:
- ニール・アームストロングは月面を歩いた最初の人物だ。
- ニール・アームストロングが初めて月面を歩いた日は1969年7月21日だ。
これらの各ポイントについて、以下のステップを実行してください:
1 - ポイントを言い直す。
2 - このポイントに最も近いものを答案から引用する。
3 - そのトピックを知らない人がその引用を読んで、ポイントを直接推測できるかどうかを考える。なぜそうなのか、なぜそうでないのかを説明してから判断する。
4 - 3の答えが「はい」の場合は「はい」と書き、そうでない場合は「いいえ」と書く。
「はい」の答えが幾つあるのかを数える。この数を{"count": <ここに数を入れる}
次のプロンプトは、2つの事実を満たしている。
<上記のシステムメッセージを挿入>。
"""ニール・アームストロングは人類で初めて月に降り立ったことで有名だ。この歴史的な出来事は1969年7月21日、アポロ11号のミッション中に起こった。"""
次のプロンプトは事実のうち、1つだけしか含んでいない。
<上記のシステムメッセージを挿入>
"""ニール・アームストロングは月着陸船から降り、月面を歩いた最初の人間となり、歴史を作った。"""
次のプロンプトはどちらの事実も含んでいない。
<上記のシステムメッセージを挿入>
"""69年の夏、壮大な航海、アポロ11号、伝説の手のように大胆に。アームストロングは一歩を踏み出し、歴史は広がった、新しい世界のために、「小さな一歩を」と彼は言った。"""
ChatGPTに与えた結果はどうだっただろうか。
このようなモデルベースの評価にはさまざまなバリエーションが考えられる。次のプロンプトのように、提出された回答とゴールドスタンダードの回答のどこが重なっているのかを調査したり、どの部分と矛盾しているかを調べたりできる。以下のプロンプトはこの後のテストでシステムメッセージとして使う。
以下のステップを使用して、ユーザーの入力に応答してください。次に進む前に、各ステップを完全に記述し直してください。
ステップ1: 専門家の回答と比較して、提出された回答の情報が、不連続、等しい、サブセット、スーパーセット、重複(つまり、幾つかの交差があるが、サブセットやスーパーセットではない)のいずれかなのかを段階的に推論します。
ステップ2: 提出された回答が専門家の回答と矛盾しているかどうかを段階的に推論します。
ステップ3:次のような構造のJSONオブジェクトを出力する: {"type_of_overlap": "disjoint" or "equal" or "subset" or "superset" or "overlapping", "contradiction": true or false}
次の例はゴールドスタンダードの回答と矛盾しないが、標準以下の回答を試した場合だ。
<上記のシステムメッセージを挿入>
質問 """ニール・アームストロングについて最も有名な出来事は何ですか、それはいつ起きましたか。UTCで答えてください。""
提出された回答 """彼は月か何かの上を歩いたのでは?""
専門家の回答 """ニール・アームストロングは人類で初めて月に降り立ったことで有名だ。この歴史的な出来事は1969年7月21日、アポロ11号のミッション中に起こった。"""
専門家の回答と異なる「事実」、つまりバズ・オルドリンが1人目だという内容を含む回答を試した例が次だ。
<上記のシステムメッセージを挿入>
質問 """ニール・アームストロングについて最も有名な出来事は何ですか、それはいつ起こりましたか。UTCで答えてください。""
提出された回答 """1969年7月21日、ニール・アームストロングはバズ・オルドリンに続く2人目の月面歩行者となった。"""
専門家の回答 """ニール・アームストロングは人類で初めて月に降り立ったことで有名だ。この歴史的な出来事は1969年7月21日、アポロ11号のミッション中に起こった。"""
次の回答には必要以上に詳細な事実が含まれている。
<上記のシステムメッセージを挿入>
質問 """ニール・アームストロングについて最も有名な出来事は何ですか、それはいつ起こりましたか。UTCで答えてください。""
提出された回答 """1969年7月21日UTC 02:56頃、ニール・アームストロングは人類史上初めて月面に降り立ち、記念碑的な偉業を成し遂げた。"""
専門家の回答 """ニール・アームストロングは人類で初めて月に降り立ったことで有名だ。この歴史的な出来事は1969年7月21日、アポロ11号のミッション中に起こった。"""
得られた回答と正しいと分かっている回答を比較することで、プロンプトがきちんと動作しているのかを一貫して調査できる。つまり、プロンプトを変えることでChatGPTから引き出すことができる回答がどのように変化するのか、より素早く改善できるようになる。プロンプトに困ったときはぜひ試してほしい。
Copyright © ITmedia, Inc. All Rights Reserved.
製品カタログや技術資料、導入事例など、IT導入の課題解決に役立つ資料を簡単に入手できます。