こんにちは、Zero-Cheeseです。
本記事では、「ChatGPT」を含む大規模言語モデル(LLM)を、
- 効果的な使用するための「プロンプト技術」
について、ご紹介します。
実用性の高い「プロンプト技術」を6つ厳選し、それぞれの使用方法について、解説していきます。
この記事を読むことで、
- ChatGPTを含む言語モデルから、より精度の高い回答を得る方法
が分かります。
プロンプトの基本とその進化
すでにご存じの方は、次の章までSkipして下さい。
プロンプトとは?
プロンプトは、
- レストランでウェイターに注文する際の、「注文の仕方」
に似ています。
つまり、どのように注文するか(プロンプトするか)によって、ウェイター(言語モデル)の対応(応答)を変える事ができます。
プロンプト技術の進化
プロンプト技術は、大きく3つの段階に、分ける事ができます。
初期段階(2000年代初頭)
キーワード中心のクエリ
初期の言語モデルは、
- 単語の頻度
- キーワードの出現パターン
に基づいて、「回答」していました。
例えば、「天気」と入力すると、単純に天気関連の情報を、提供していました。
中期段階(2010年代)
複雑な質問形式に対応
言語モデルの進化により、複雑な質問形式にも、対応可能となりました。
例えば、「明日の東京の天気は?」のような具体的な質問に対し、精度よく返答する事ができるようになりました。
最近時(2020年代)
コンテキスト情報を含む、複雑な質問にも対応
コンテキスト(質問の背景情報)を踏まえた質問にも、適切に回答できるようになりました。
例えば、
- 「最近の気候変動を考えると、明日の東京の天気予報は、どうなっている?」
というような、背景情報を踏まえた質問にも、対応可能となりました。
よく使用される、プロンプト技術 6選
「普通のプロンプト」問題点
「普通のプロンプト」とは、単純な質問・指示を指します。
例えば、
- 「明日の天気は?」とか、
- 「ニューヨークの人口は?」
のような質問です。
このような質問の場合、「ChatGPT」が必要な詳細情報・背景(コンテキスト)を把握していないため、適切な応答が困難です。
そこでより精度適切な回答を得るための、「プロンプト技術」を6つに絞って、解説します。
プロンプト技術 6選
ChatGPTは、日々進化しています。
下記の技術がなくても、自動的に、補ってくれる場合があります。
また、複数個組み合わせると、より有効に働く事が多いです。
① Chain-of-thought (CoT)
使用する状況:複雑なタスクで、精度の高い回答を得たい場合
テクニック:AIの思考過程を、明示的に回答の中に入れさせる。
例えば、「ステップバイステップ」とか、「結論至った過程」という言葉をプロンプトに入れます。
CoTを使わない場合の例:
質問: 「電車とバスの合計運賃が800円で、電車はバスより400円高い。電車の運賃は?」
回答: (間違う場合がある)
CoTを使う場合の例:
質問: 「電車とバスの合計運賃が800円で、電車はバスより400円高い。電車の運賃はいくらか
結論に至った過程も含めて、教えてください。」
回答: 「バスの運賃をx円とすると、電車はx+400円です。したがって、x + (x+400) = 800。
これを解くと、x=200。よって電車の運賃は600円です。」
本技術に関して、より詳細を知りたい方は、こちらの論文が参考になります。
② Few-shot Prompting
使用する状況:新しいタスク、偏った知識・ニュアンスが必要な場合
テクニック:プロンプトに、少数の例(1〜5程度)を入れる事で、AIに課題の実行方法を学習させる。
プロンプト例:
# 日本語の敬語を学ばせるとき
Q: 「明日は休みます」と言いたいとき、敬語ではどう言うべきですか?
A: 「明日は、休ませて頂きます。」
Q: 上司に「報告書をだした」と伝える場合、敬語でどう言うべきですか?
A: 「報告書を提出いたしました」
Q: クライアントに「資料を送った」と伝えたいとき、敬語ではどう言うべきですか?
A:
上記のプロンプトに対する、回答例:
A: クライアントに対しては、「資料をお送りいたしました」と伝えるのが適切です。
さらに詳しく知りたい場合、こちらの論文が参考になります。
③ Self-Consistency(自己整合性)
使用する状況:①で紹介したCoTよりも、精度の高い回答が求められる場合
テクニック:複数のCoT例を与えて学習させ、もっとも整合性(一貫性)のある、回答を引き出す
厳密には、AIが生成する、複数の推論パス(問題に対する思考の流れ)の中で、最も一貫性のある推論パスを選択させる方法です。
プロンプト例:
「もともと男子生徒が15人いた。そのうち3人が早退したので、残る男子生徒は15 - 3 = 12人。」
「女子生徒は最初10人いたが、2人が早退したので、残る女子生徒は10 - 2 = 8人。」
「残る生徒の総数を求めるには、残る男子生徒の数と女子生徒の数を合計する。
12人の男子生徒と8人の女子生徒がいるので、合計は12 + 8 = 20人。」
問題: 「ある教室には男子生徒が15人、女子生徒が10人います。
3人の男子生徒と2人の女子生徒が早退しました。教室に残っている生徒は合計何人ですか?」
上記の場合の回答
教室には元々男子生徒が15人、女子生徒が10人いました。
3人の男子生徒と2人の女子生徒が早退したため、男子生徒は15 - 3 = 12人に、
女子生徒は10 - 2 = 8人になります。
したがって、教室には合計で12 + 8 = 20人の生徒が残っています。答えは20人です。
この手法は、CoTよりもさらに精度が高い回答が得られると、言われています。
さらに詳しく知りたい場合、こちらの論文が参考になります。
④ Generated Knowledge Prompting
使用する状況:ChatGPTに知識が足りず、回答できない問題、もしくは一般的な知識に対しても、精度の高い回答が欲しい場合
テクニック:
- まず、いくつかの質問(入力)と、それに関する知識をプロンプト
- 次に新しい質問に対し、①を基にした「知識」を生成させる
- 最後に、②で生成した「知識」を基に、より精度の高い回答を得る。
プロンプト例:
① まず、質問と知識をプロンプトに入れる。(多いほど、better)
このステップで、質問に対し、AIが持っている知識をどのように活用するべきか、学習させます。
質問: 「日本の桜の花はいつ咲く?」
知識: 「日本の桜は春に咲くことが多い」
質問: 「日本の伝統的な服装は何?」
知識: 「日本の伝統的な服装には着物がある」
② 次に質問をして、回答(新しい知識)を得ます。
質問: 「日本の伝統的な新年の行事はいつ行われる?」
回答:
回答例:
「日本では、新年は伝統的に1月の初めに祝われる」
③ ②で生成した「知識」を基に、より精度の高い回答を得る。
プロンプト例:
日本の新年の祝日はいつですか?
回答例:
日本の新年の祝日は1月1日です
さらに詳しく知りたい場合、こちらの論文が参考になります。
⑤ ReAct Prompting (Reason + Action)
使用する状況:外部情報源を元に、精度の高い応答が必要な場合や、タスクの状況が変化しやすい場合
テクニック:Thought(思考・推論)、Action(判断・行動)、Observation(観察・洞察)を繰返すよう要求し、具体的な実例を、Few-Shotで示します。
プロンプト例:
Thought(思考・推論)、2. Action(判断・行動)、3. Observation(観察・洞察)
の3ステップを繰り返した上で、回答してください。
タスク: 「アインシュタインがノーベル賞を受賞した年を調べる」
回答には、
1. Thought(思考・推論)
2. Action(判断・行動)
3. Observation(観察・洞察)
も併せて記載してください。
例
Thought: 「ニュートンの三大法則が初めて発表された年を特定する必要がある。」
Action: 「Wikipediaでニュートンの生涯と業績に関する情報を調べる。」
Observation: 「ニュートンの三大法則は、彼の著書『プリンキピア』にて1687年に発表されたことがわかる。」
さらに詳しく知りたい場合、こちらの論文が参考になります。
⑥ Least-to-Most
使用する状況:かなり複雑な問題に対し、有効な回答を得たい場合
テクニック:複雑な問題を、単純な問題(部分問題)に分解し、それらを順に問いていく事で、最終的な答えを導く方法
プロンプト例:
太郎は10個のリンゴを持っていて、花子は太郎のリンゴの2倍を持っています。
太郎と花子が持っている、リンゴの総数は?
この問題を解決するために、まずは小さなサブプロブレムに分解してください。
それを全て列挙してください。
これらのサブプロブレムの解答をもとに、最終的な答えを導いてください。
さらに詳しく知りたい場合、こちらの論文が参考になります。