Pythonスキルの習得

ChatGPTのチャット技術 – 質の高い回答を得るプロンプト技術 –

ChatGPTのチャット技術 - 質の高い回答を得るプロンプト技術 -

こんにちは、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に知識が足りず、回答できない問題、もしくは一般的な知識に対しても、精度の高い回答が欲しい場合

テクニック:

  1. まず、いくつかの質問(入力)と、それに関する知識をプロンプト
  2. 次に新しい質問に対し、①を基にした「知識」を生成させる
  3. 最後に、②で生成した「知識」を基に、より精度の高い回答を得る。

プロンプト例:

① まず、質問と知識をプロンプトに入れる。(多いほど、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倍を持っています。
太郎と花子が持っている、リンゴの総数は?

この問題を解決するために、まずは小さなサブプロブレムに分解してください。
それを全て列挙してください。

これらのサブプロブレムの解答をもとに、最終的な答えを導いてください。

さらに詳しく知りたい場合、こちらの論文が参考になります。