up:: プロンプトエンジニアリングガイド

Techniques

テクニックを一個一個詳しく見ていく。


Zero-shot

Zero-Shotプロンプティング | Prompt Engineering Guide

基本。
RLHF(reinforcement learning from human feedback、人間による学習)でここは調整できるらしい。


Few-shot

Few-Shotプロンプティング | Prompt Engineering Guide

一つの例示のことをone-shotという。
困難度に合わせて例示は増やす。

例示の書き方にはいくつかヒントがある。

  • テキストもラベルも両方書き方が重要。あくまで書き方であり、それぞれのラベルが正しいかどうかは特に関係ない
  • 例示によって書き方がデタラメでも、書かないよりはるかにマシ
  • ラベルがいくつかあるだろうが、その全てのラベルが同じぐらいに出る(一様分布)ようにとかは考えないほうがいい。それより偏ったまま(真の分布)例示として作るべき。その偏りもデータになるから。

ちなみにバイアスでやるが、モデルによっては例の順序まで学習してしまうことがある。最初だけポジティブ、残り全部ネガティブだと次もネガティブになっちゃうという話。chatGPTは対処済み。注意。

真の分布とは、データに対してつくはずのラベルの割合。犬鳥猫が50:30:20ならラベルも50:30:20になるよねという話。

一様分布は全てのラベルが同じ割合であること。全ての動物に対して犬鳥猫を1:1:1でつけていくようなもの。これはデータの特徴量や傾向を無視する。

これらのことを踏まえると、これくらい雑でも例として読み込んでくれる。

プロンプト:

Positive これは素晴らしい! 
これは酷い! ネガティブ
あの映画は最高だった! 
ポジティブ
なんてひどい番組なんだ! --

出力:

ネガティブ

制限

大体の問題はfew-shotで何とかなる。というか、それで解けないのはモデルのせいになるレベル。
一方、複雑度が上がってくるとfew-shotじゃ厳しい時がある。特に数学はいくら例示を重ねても難しい。

プロンプト:

このグループの奇数を合計すると偶数になります:4、8、9、15、12、2、1。
A: 答えはFalseです。
このグループの奇数を合計すると偶数になります:17、10、19、4、8、12、24。
A: 答えはTrueです。
このグループの奇数を合計すると偶数になります:16、11、14、4、8、13、24。
A: 答えはTrueです。
このグループの奇数を合計すると偶数になります:17、9、10、12、13、4、2。
A: 答えはFalseです。
このグループの奇数を合計すると偶数になります:15、32、5、13、82、7、1。 
A: 

出力:

答えはTrueです。

それでも解きたいときは、Chain-of-Thought promptingがいい。次でやる。


Chain-of-Thought

Chain-of-Thoughtプロンプティング | Prompt Engineering Guide

image

略してCoT。現在主流。思考過程を例示の返答に追加することで、モデルに思考過程を加えて答えを出しやすくする。

プロンプト:

このグループの奇数を合計すると偶数になります。: 4、8、9、15、12、2、1。
A: 奇数を全て加えると(9, 15, 1)25になります。答えはFalseです。
このグループの奇数を合計すると偶数になります。: 17、10、19、4、8、12、24。
A: 奇数を全て加えると(17, 19)36になります。答えはTrueです。
このグループの奇数を合計すると偶数になります。: 16、11、14、4、8、13、24。
A: 奇数を全て加えると(11, 13)24になります。答えはTrueです。
このグループの奇数を合計すると偶数になります。: 17、9、10、12、13、4、2。
A: 奇数を全て加えると(17, 9, 13)39になります。答えはFalseです。
このグループの奇数を合計すると偶数になります。: 15、32、5、13、82、7、1。
A:

出力:

奇数を全て加えると(15, 5, 13, 7, 1)41になります。答えはFalseです。

これを使うと、例示一つ二つから答えを出すことが出来る。

プロンプト:

このグループの奇数を合計すると偶数になります。: 4、8、9、15、12、2、1。
A: 奇数を全て加えると(9, 15, 1)25になります。答えはFalseです。
このグループの奇数を合計すると偶数になります。: 15、32、5、13、82、7、1。
A:

出力:

奇数を全て加えると(15, 5, 13, 7, 1)41になります。答えはFalseです。

Zero-shot CoT

さらに「Step-by-Stepで考えてみましょう」を追加すると、Zero-shotでも数学問題が解けたりする。使用できる例があんまりないときはこれで。

プロンプト:

私は市場に行って10個のリンゴを買いました。隣人に2つ、修理工に2つ渡しました。それから5つのリンゴを買って1つ食べました。残りは何個ですか?
ステップバイステップで考えてみましょう。

出力:

最初に、10個のリンゴから始めました。
隣人と修理工に合わせて、リンゴを2つずつ渡し、残りは6個になりました。
次に、5つのリンゴを買い、11個になりました。
最後に、1つのリンゴを食べたため、残りは10個になります。

Self-Consistency

Self-Consistency(自己整合性) | Prompt Engineering Guide

常識問題を解く場合の鍵。まずはプロンプト。

プロンプト:

私が6歳のとき、妹は私の半分の年齢でした。今、私は70歳です。私の妹は何歳ですか?

出力:

35

これは明らかな誤り。常に妹が自分の半分しか年齢行かない、と考えるからこういうことになる。じゃあどうするか。ここの答えは単純、大量に例示を用意すればいい

プロンプト:

Q:林には15本の木があります。林業従事者は今日、林に木を植える予定です。その後、21本の木があります。林業従事者は今日、何本の木を植えましたか?
A:15本の木から始めます。後で21本の木があります。差は、彼らが植えた木の数でなければなりません。したがって、彼らは21-15 = 6本の木を植えなければなりません。回答は6です。
Q:駐車場に車が3台あり、さらに2台の車が到着した場合、駐車場には何台の車がありますか?
A:駐車場には既に3台の車があります。2台の車が到着しました。これで、車が3+2 = 5台あります。回答は5です。
Q:リアは32個のチョコレートを持っており、彼女の姉妹は42個のチョコレートを持っています。彼らが35個食べた場合、彼らが残したピースの数は何ですか?
A:リアは32個のチョコレートを持っており、リアの姉妹は42個のチョコレートを持っていたことを意味します。つまり、もともとは32 + 42 = 74個のチョコレートがありました。35個食べられました。したがって、合計で残るのは74-35 = 39個のチョコレートです。回答は39です。
Q:ジェイソンは20個のキャンディを持っていました。彼はデニーにいくつかのキャンディを与えました。今、ジェイソンは12個のキャンディを持っています。ジェイソンはデニーに何個のキャンディを与えましたか?
A:ジェイソンは20個のキャンディを持っていました。今は12個しか持っていないので、残りはデニーに与えられたものです。彼がデニーに与えたキャンディの数は20-12 = 8個のキャンディです。回答は8です。
Q:ショーンは5つのおもちゃを持っています。クリスマスに、彼は両親からそれぞれ2つのおもちゃをもらいました。今、彼は何個のおもちゃを持っていますか?
A:彼は5つのおもちゃを持っています。彼は母親から2つのおもちゃをもらいました。したがって、5 + 2 = 7個のおもちゃがあります。その後、父親から2つのおもちゃが追加されたので、合計で7 + 2 = 9個のおもちゃがあります。回答は9です。
Q:サーバールームには9台のコンピューターがあります。月曜日から木曜日まで、毎日5台のコンピューターが追加されました。サーバールームには現在何台のコンピューターがありますか?
A:月曜日から木曜日までの日数は4日です。1日に5台のコンピューターが追加されました。つまり、合計で4 * 5 = 20台のコンピューターが追加されました。最初に9台のコンピューターがありましたので、現在は9 + 20 = 29台のコンピューターがあります。回答は29です。
Q:マイケルは58個のゴルフボールを持っています。火曜日に、彼は23個のゴルフボールを失いました。水曜日に、さらに2個を失いました。水曜日の終わりには、彼は何個のゴルフボールを持っていましたか?
A:マイケルは最初に58個のボールを持っていました。火曜日に23個を失いましたので、その後35個のボールが残りました。水曜日に2個を失ったので、現在33個のボールがあります。回答は33です。
Q:オリビアは23ドル持っています。彼女は1つあたり3ドルのベーグルを5つ買いました。彼女が残したお金はいくらですか?
A:彼女は1つあたり3ドルのベーグルを5つ購入しました。これは彼女が5を購入したことを意味します。
Q:私が6歳のとき、妹は私の半分の年齢でした。今、私は70歳です。私の妹は何歳ですか?
A:

出力:

私が6歳のとき、私の妹は私の半分の年齢であったため、彼女は3歳でした。今、私が70歳であるため、彼女は70-3 = 67歳です。回答は67です。

算数の話をしてるんだとめちゃくちゃ教え込む。
なおこれでもたまにミスるので、いくつか出して多数派を最終的な回答にすると良い。

出力(誤り):

私が6歳のとき、私の妹は私の半分の年齢だったので、彼女は3歳でした。今、私は70歳なので、彼女は70/2=35歳です。答えは35です。

Generated Knowledge

知識生成プロンプティング | Prompt Engineering Guide

image

QとAの間で、プロンプトを使い情報を仕入れ、Aの助けにする。
Bingがやってること。

まずはSelf-Consistency。inputとknowledgeになってるが実質QA。いくつか常識をつける。

プロンプト:

input: ギリシャはメキシコより大きい。
knowledge: ギリシャは約131,957平方キロメートル、メキシコは約1,964,375平方キロメートルで、メキシコはギリシャの1,389%大きい。
input: メガネがいつも曇ってしまう。
knowledge: メガネレンズの結露は、汗や息、周囲の湿度から発生する水蒸気が冷たい表面に降り注ぎ、冷えて小さな液滴に変化し、霧として見える膜を形成するときに発生します。特に外気が冷たい場合、レンズは呼気と比較して相対的に冷たくなります。
input: 魚は考えることができる。
knowledge: 魚は見かけによらず知能が高い。記憶など多くの分野で、その認知力は、ヒト以外の霊長類を含む「高等」脊椎動物と同等かそれ以上です。魚の長期記憶は、複雑な社会的関係を把握するのに役立ちます。
input: 一生のうちにたくさんのタバコを吸うと、肺がんになる確率が通常より高くなることがよくある。
knowledge: 生涯の平均喫煙本数が1日1本以下の人は、一度もタバコを吸わなかった人に比べて肺がんで死亡するリスクが9倍であった。1日1本から10本の喫煙者では、肺がんで死亡するリスクは、喫煙しない人の約12倍であった。
input: 岩は小石と同じ大きさである。
knowledge: 小石は、堆積学のUdden-Wentworthスケールに基づく4~64ミリメートルの粒子径を持つ岩石のクラストである。小石は一般的に、粒(直径2~4ミリ)より大きく、玉石(直径64~256ミリ)より小さいと考えられています。
input: ゴルフの一部は、他の人よりも高いポイントの合計を取得しようとすることです。
knowledge:

出力1:

ゴルフの目的は、最小限のストローク数で一連のホールをプレーすることです。ゴルフのラウンドは、通常18ホールで構成されています。各ホールは、標準的なゴルフコースでラウンド中に1回プレーします。各ストロークは1点としてカウントされ、総ストローク数でゲームの勝敗を決めます。

出力2:

ゴルフは、クラブとボールを使った精密なスポーツで、プレーヤー(ゴルファー)は多くの種類のクラブを使い、最少のストローク数でコース上の一連のホールにボールを打ち込む。目標は、各ホールのストローク数を合計して算出される最低スコアでコースを回ることです。最も低いスコアでプレーしたプレイヤーが勝利となります。

これで出力された内容を質問に統合し再度聞く。

プロンプト(出力1統合):

question: ゴルフの一部には、他の人よりも高いポイント数を得ようとするものがある。イエスかノーか?
knowledge: ゴルフの目的は、最小限のストローク数で一連のホールをプレーすることです。ゴルフのラウンドは、通常18ホールで構成されています。各ホールは、標準的なゴルフコースでラウンド中に1回プレーします。各ストロークは1点としてカウントされ、総ストローク数でゲームの勝敗を決めます。
Explain and Answer:

出力:

いいえ、ゴルフの目的は他の人よりも高いポイント総数を得ることではありません。むしろ、目的はできるだけ少ない打数で一連のホールをプレイすることです。総打数がゲームの勝者を決定するために使用されますが、ポイントの総数ではありません。

これで成功。ちなみに、Self-Consistency部分を除いて知識だけ適用してもうまく解答できない。原文では自信を無くしたと表現されている。

プロンプト(特に理由はないが出力2統合):

question: ゴルフの一部には、他の人よりも高いポイント数を得ようとするものがある。イエスかノーか?
knowledge: ゴルフは、クラブとボールを使った精密なスポーツで、プレーヤー(ゴルファー)は多くの種類のクラブを使い、最少のストローク数でコース上の一連のホールにボールを打ち込む。目標は、各ホールのストローク数を合計して算出される最低スコアでコースを回ることです。最も低いスコアでプレーしたプレイヤーが勝利となります。
Explain and Answer:

出力:

はい、ゴルフの一部は、他の人よりも高い得点を取ることです。各プレイヤーは、各ホールで打たれた総打数を合計して計算される最低スコアでコースを完了しようとします。最低スコアを出したプレイヤーが勝利します。

これより先はまだ論文段階だし、プログラム組まないと使えなさそうなテクニックばかり並んでいる。


Automatic Prompt Engineer (APE)

image

自動プロンプトエンジニア(APE) | Prompt Engineering Guide

タスクに対する最良の手順を表示するテクニック。

あるタスクに対し、モデルを使ってタスクを指示候補に分解。候補を元に手順を作成。それをモデルを用いて架空で実行、評価スコアを作って適切な手順を選択し表示する。

これで新しくZero-shot CoTプロンプトが発見されている。「正しい答えを得るために、ステップバイステップで考えてみましょう。」がいいらしい。


Active

image

Active-Prompt | Prompt Engineering Guide

最も適切な例を作成するためのテクニック。

CoTの問題点として、人間が作る例に対しての模範解答に縛られるというものがあった。タスクが別になると、模範解答が邪魔して正しい答えが出せなくなる可能性がある。

そこでこれ。いくつかの模範解答はモデル自身に出させるアプローチ。質問に対してある一定数の回答を生成させ、それらのuncertainty metricを計算する。
uncertainty metricとは、予測や推論の結果に含まれる誤差や不確かさのこと
ニューラルネットワーク界隈などで使う普通の用語

その中で不確実性が高かったものは人間が再度ラベリング、低かったものはそのままその後の推論に使用する。


Directional Stimulus

image

方向性刺激プロンプティング | Prompt Engineering Guide

望ましい要約を生成するため、モデルを誘導するテクニック。

専門用語が多く完全に論文読め状態。要はヒントを生成するのに特化したポリシーLMというものを追加し、ヒントを与える技術みたいだが。


ReAct

image

ReAct | Prompt Engineering Guide

LLMと他の何かを対話させるテクニック。
完全に外部連携用フレームワーク。

生成したアクションステップを誘導、追跡、更新しつつ例外を処理する。
これも論文。


Multimodal CoT

image

マルチモーダルCoTプロンプティング | Prompt Engineering Guide

マルチモーダルモデルにCoT組み込む試み。

インプットにイメージと文章の二つを持ち込む。対してモデルはまず根拠を作成し、根拠を元にタスクをこなすというものになるらしい。


Graph

グラフプロンプト(GraphPrompts) | Prompt Engineering Guide

とうとう説明全部消えたのでまた今度。