sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

言語モデル (LMs) を効率的に利用するプロンプト基礎学習メモ

GPT 4 しかり、最近は AI が盛んですね。賢い AI だからこそ、使い方にどういったパターンがあるのか、効果的なのか、ノウハウを知っていることが(今は)有利。なんで、以下の資料から基本的な使い方を勉強したので、その内容をメモ。

読んでみると、これから加筆される章も結構ありますが、(現在のユーザー利用において)基本的な部分は充実していると思いました。

プロンプトエンジニアリングは、言語モデル (LMs) を効率的に使用するためのプロンプトを開発および最適化する比較的新しい学問分野です。

以前にもメモしましたが、新しい学習分野なのでノウハウの更新もはやいので、このガイドもどれくらいの期間ノウハウと言えるのか問題はありそう。

Prompt の要素

プロンプトには、以下の いずれかの 要素が含まれている。

  • 命令
    • モデルに実行してほしい特定のタスクや命令
  • 文脈
    • 外部情報や追加の文脈を加えることで、より良い応答に導く
  • 入力データ
    • 応答を見つけたい入力または質問
  • 出力指示子
    • 出力のタイプや形式を示す

    すべての要素が必要ではない。プロンプトはタスクに依存しているので、タスクにあわせたものを生成する。

ヒント

  • 簡単なプロンプトから始め、結果を向上させるために文脈を追加していく
    • そのためには、プロンプトのバージョン管理が重要(具体性、簡潔さ、明確さがより良い結果に繋がる)
  • 多くの異なるサブタスクを持つ大きなタスクを指示したいときは、タスクを分解して指示する
    • プロンプトの設計プロセスは、あまり複雑にしすぎないように
  • 「書く」「分類する」「要約する」「翻訳する」「並べ替える」など、達成したいタスクを(明確に)指示することで、効果的なプロンプトを設計できる
  • 指示は、プロンプトの最初に配置して、指示と文脈を区切るために「###」のような明確な区切り記号を使用することが推奨されています
  • 実行してほしい内容は具体的に説明する
    • 特定の出力やスタイルを希望する場合は、特に重要(例を示すことは非常に効果的)
    • 特定の回答を返すようにするときは、プロンプトの内容を改善すること(最良の方法のひとつです。指示、文脈、入力、出力インジケーターを組み合わせて、改善された結果を得ること)
  • 答えを知らない場合には「わからない」と認めるように指示することにより、モデルがより多様な応答を生成しないように構成する(回答のでっち上げを防ぐ)
    • 知っていること、知らないこと、両方の質問と回答例を組み合わせる

区切り文字の例:

### 指示 ###
以下のテキストを日本語に翻訳してください。
Text: "hello!"
テキスト: "こんにちは!"

出力スタイルの例:

以下のテキストから場所の名前を英語で抽出してください。
望ましいフォーマット:
Place: <comma_separated_list_of_company_names>
入力:「これらの進展は研究者にとって励みになっていますが、まだ多くのことが謎のままです。リスボンのシャンパリマウド・センター・フォー・ジ・アンノウンの神経免疫学者であるヘンリーク・ヴェイガ・フェルナンデスは、「脳と周辺部で見られる効果の間にはしばしばブラックボックスがあります」「治療的な文脈で使用したい場合、実際には作用機序を理解する必要があります。」」
Place: Champalimaud Center for the Unknown in Lisbon

悪例から学ぶ

プロンプトエンジニアリングの概念を説明してください。説明は短く、数文で、あまり詳しくしないでください。

プロンプトエンジニアリングの概念を学びたいと思って質問した内容ですが、これは回答のスタイルをまだ具体的に指示できていません。

「説明は短く」よりも「高校生に対して」であったり、「数文で」よりも「2~3文で」のほうが具体的です。

「あまり詳しくしないで」のように「しないことを」を指示せず「すること」を指示しましょう。

悪例

以下は、顧客に映画を推薦するエージェントです。興味を尋ねないで、個人情報を尋ねないでください。
顧客:私の興味に基づいて映画をお勧めください。
エージェント:

改善例

以下は、顧客に映画を推薦するエージェントです。エージェントは、上位のグローバルトレンド映画から映画をお勧めする責任があります。ユーザーの好みを尋ねることを避け、個人情報を尋ねることを避ける必要があります。エージェントがおすすめ映画を持っていない場合は、「申し訳ありませんが、今日お勧めする映画が見つかりませんでした。」と返答する必要があります。
顧客:私の興味に基づいて映画をお勧めください。
エージェント:

基本的な Prompting

zero-shot prompting

書き方(フォーマット):

Q: <質問>?
A: 

このプロンプトは、任意の例を与えていない。指示(質問)に従ってモデルを微調整することが指示のチューニングの本質です。zero-shot prompting が機能しないときは、デモンストレーションや例示を与えることがおすすめです。

複雑なタスクに対しては、zero-shot prompting では不十分になることがある。

few-shot prompting

<質問>?
<例示する答え>
<質問>?
<例示する答え>
<質問>?
<例示する答え>
<質問>?
<学習された答え>

few-shot prompting は、デモを提供してモデルの文脈学習させます。たとえば、新しい単語を文で使用する場合:

「whatpu」とはタンザニア固有の小さくて毛皮のある動物です。 「whatpu」という言葉を使った文の例は次のとおりです。
私たちはアフリカを旅行して、これらのとてもかわいいwhatpusを見ました。
「farduddle」というのは、とても速く上下にジャンプすることを意味します。 「farduddle」という言葉を使用した文の例は次のとおりです。
私は彼がプールから飛び込んで、farduddleするのを見ました。

より困難なタスクでは、でもを増やします。(例:3 shot, 5 shot, 10 shot...)

  • デモで指定されたラベルと入力テキストの両方が大切
  • 形式も重要な役割をもつ。ただし、ランダムなラベルであっても、無いよりはずっといい
  • 追加の結果からは、一様分布ではなくランダムなラベルを選択するほうが役にたつ

しかし、fwe-shot prompting は推論は(今のところ)苦手です。

このグループの奇数を合計すると偶数になります: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です。

実際は、このグループの奇数の数値は15、5、13、7、1です。これらを合計すると41になるので答えはFalseです。

なので、推論に対しては信用性の高いを得るプロンプトとは言えないです。言い換えると、ステップを分解して、デモンストレーションすることがよいかもしれないです。例えば、より複雑な算術、常識、および、象徴的推論タスクに対応するために、Chain-of-Thought (CoT) prompting があります。

chain-of-thought (CoT) prompting

chain-of-thought (CoT) プロンプティングは、中間的な推論ステップを介して複雑な推論能力を可能にします。

chain of thought で「思考の連鎖」くらいの意味だと思います。

このグループの奇数を合計すると偶数になります。: 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です。

実際は、1つ例を示すだけでも(今回の場合の例は)答えを出すことが可能です。CoT prompting はプロンプトを理解する上でも重要です。タスクを分解することを、どのようにプロンプトに反映させるのか、の答えのひとつだと思います。

zero-shot CoT prompting

zero-shot prompting に「ステップバイステップで考えてみましょう」という文言を加えたものです。

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

zero-shot CoT prompting は、例示できるものがあまり無い場合に特に有効です。また、リストのように列挙されるので、回答が読みやすいのも特徴だと思います。

self-consistency(自己整合性)

算術、および、常識的推論を必要とするタスクにおいて CoT prompting のパフォーマンスを向上させる目的で利用されるプロンプトです。

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歳-6歳+3歳、つまり67歳です。

few-shot と組み合わせることで、精度のより良いものにします。

知識生成プロンプティング

ゴルフの一部は、他の人よりも高いポイント総数を得ようとすることです。「はい」か「いいえ」か?

LLM (Large Language Model) に制限があり、より多くの知識を必要とするタスクを実行する場合は知識を生成しやすくするような改善が望ましいです。

入力:ギリシャはメキシコよりも大きい。
知識:ギリシャは約131,957平方キロメートルであり、メキシコは約1,964,375平方キロメートルであり、メキシコはギリシャよりも1,389%大きい。
入力:眼鏡は常に曇ります。
知識:冷たい表面に汗、呼気、および周囲の湿度から水蒸気が着陸し、冷却されて液体の微小な滴に変化して、あなたが霧として見るフィルムを形成すると、眼鏡レンズに結露が生じます。あなたのレンズは、特に外気が寒い場合、あなたの呼気に比べて比較的冷たくなります。
入力:魚は考えることができる。
知識:魚は出現よりも知能が高い。記憶などの多くの分野で、魚の認知能力は、非人間の霊長類を含む「より高い」脊椎動物と同等またはそれ以上です。魚の長期記憶は、彼らが複雑な社会的関係を追跡するのを助けます。
入力:一生にたくさんのタバコを吸うことの共通の影響の1つは、肺がんの発生率が高くなることです。
知識:生涯にわたり平均して1日に1本未満のタバコを吸った人は、非喫煙者に比べて肺がんで死亡するリスクが9倍高かった。一日あたり1〜10本のタバコを吸った人の中で、肺がんで死亡するリスクは、非喫煙者の約12倍高かった。
入力:岩と小石は同じ大きさです。
知識:小石は、堆積学のUdden-Wentworthスケールに基づく4〜64ミリメートルの粒子サイズを持つ岩塊です。小石は、一般的に粒度(直径2〜4ミリメートル)よりも大きく、コブル(直径64〜256ミリメートル)よりも小さいと見なされます。
入力:ゴルフの一部は、他の人よりも高いポイント総数を得ようとすることです。
知識:
ゴルフの目的は、できるだけ少ない打数でボールをカップに入れることで、高いポイント総数を得ることではありません。

role prompting

どのように振る舞うかを明示的に伝えていること

プロンプトの例

テキスト要約

言語モデルの最も有望な応用のひとつ。記事やコンセプトをより読みやすい形にまとめる能力のこと。

抗生物質について説明してください。
A:
抗生物質(こうせいぶっしつ、英: Antibiotics)とは、細菌感染症を治療するために用いられる薬剤の一種で、細菌に対して殺菌作用または抑菌作用を発揮する化合物の総称です。抗生物質は、細菌に対する特異的な効果を持ち、細菌による病気を治療するためには欠かせない医薬品です。

抗生物質は、ペニシリンやセフェム系など、細菌の細胞壁合成を阻害するもの、エリスロマイシンやテトラサイクリンなど、細菌のタンパク質合成を阻害するもの、キノロン系やストレプトマイシンなど、細菌のDNA複製やRNA合成を阻害するものなど、作用機序によって種類が分類されます。

ただし、抗生物質は、細菌に対してのみ効果を発揮し、ウイルス感染症や真菌感染症には効果がありません。また、過剰摂取や適正使用しない場合には、細菌の耐性菌を生み出す原因となり、治療効果が低下することがあります。そのため、抗生物質の適正な使用が求められています。

情報が多すぎる場合は、さらに要約を指示できる。

以下を1~2文で説明してください。
抗生物質(こうせいぶっしつ、英: Antibiotics)とは、細菌感染症を治療するために用いられる薬剤の一種で、細菌に対して殺菌作用または抑菌作用を発揮する化合物の総称です。抗生物質は、細菌に対する特異的な効果を持ち、細菌による病気を治療するためには欠かせない医薬品です。

抗生物質は、ペニシリンやセフェム系など、細菌の細胞壁合成を阻害するもの、エリスロマイシンやテトラサイクリンなど、細菌のタンパク質合成を阻害するもの、キノロン系やストレプトマイシンなど、細菌のDNA複製やRNA合成を阻害するものなど、作用機序によって種類が分類されます。

ただし、抗生物質は、細菌に対してのみ効果を発揮し、ウイルス感染症や真菌感染症には効果がありません。また、過剰摂取や適正使用しない場合には、細菌の耐性菌を生み出す原因となり、治療効果が低下することがあります。そのため、抗生物質の適正な使用が求められています。
抗生物質は、細菌感染症を治療するために用いられる薬剤で、細菌に対して殺菌作用または抑菌作用を発揮する化合物の総称です。ただし、ウイルス感染症や真菌感染症には効果がなく、適正使用しない場合には耐性菌を生み出す原因となることがあるため、適切な使用が必要です。

情報抽出

研究論文の著者貢献声明や謝辞には、筆者が ChatGPT のようなAIテクノロジーを原稿および分析の準備に使用したかどうか、およびどの LLMs を使用したかが明確かつ具体的に記載されている必要があります。これにより、編集者や査読者がバイアス、不正な引用元のクレジット付け、不正確さなどの可能性について、より注意深く原稿を精査することができます。同様に、科学ジャーナルは、投稿された原稿の選定時に LLMs を使用した場合には、透明性を持って開示する必要があります。
上記の段落において言及されている大規模言語モデルベースの製品を述べてください。
上記の段落では、大規模言語モデル(Large Language Models、LLMs)について言及されています。具体的な製品名については明示されていませんが、ChatGPTはその1つの例であり、GPT-3などの他の大規模言語モデルも存在します。これらのモデルは、自然言語処理タスクにおいて非常に高い性能を発揮し、多くの研究者や企業が活用しています。

質問応答

以下の文脈に基づいて質問に答えてください。回答を短く簡潔に保ちます。回答が不明な場合は、「回答不明」と回答してください。
文脈:Teplizumabは、Ortho Pharmaceuticalと呼ばれるニュージャージー州の薬剤会社に由来します。そこでは、科学者たちはOKT3という抗体の初期バージョンを生成しました。分子はもともとマウスから採取され、T細胞の表面に結合し、その細胞殺傷能力を制限することができました。1986年に、腎臓移植後の臓器拒絶を防止するために承認され、これにより、人間の使用に許可された最初の治療用抗体となりました。
質問:OKT3はもともとどこから採取されたものですか?
回答:
OKT3はもともとマウスから採取されました。

分類

テキストをneutral、negative、またはpositiveに分類してください。
テキスト:この食べ物はまずまずでした。
所感:
テキストはneutralです。

回答の neutral を特定のフォーマットにする場合は、例示をすること。

テキストを中立、否定的、または肯定的に分類してください。
テキスト:先日の休暇はまずまずでした。
所感: 中立
テキスト:この食べ物はまずまずでした。
所感:
テキストは中立です。

会話

例1:

以下はAI研究アシスタントとの会話です。アシスタントのトーンは技術的で科学的です。
人: こんにちは、あなたは誰ですか?
AI: ご挨拶!私はAI研究アシスタントです。今日は何をお手伝いできますか?
人: ブラックホールの生成について教えてもらえますか?
AI:
ブラックホールは、質量が非常に大きく、密度が非常に高く、その重力によって光も逃れることができない空間のことを指します。ブラックホールの生成には、非常に質量の大きい星が重力崩壊を起こすことが必要です。この過程で、星の質量が非常に大きくなり、ブラックホールが形成されます。詳細については、宇宙物理学や天文学の専門書を参照することをお勧めします。

例2:

以下はAI研究アシスタントとの会話です。アシスタントの回答は小学生でも理解できるようになっています。
人: こんにちは、あなたは誰ですか?
AI: ご挨拶!私はAI研究アシスタントです。今日は何をお手伝いできますか?
人: ブラックホールの生成について教えてもらえますか?
AI: 
ブラックホールとは、とても大きくて重い星が重力の影響でつぶれたものです。この星はとても重いので、つぶれた時に周りの空間を引きつけて、ブラックホールができます。このブラックホールの周りには、光も逃げられないくらい強い引力があるので、とても不思議な場所とされています。

推論

/*
ユーザーに名前を聞いて、「こんにちは」と言ってください。
*/

"""
テーブル名 departments、カラム=[DepartmentId、DepartmentName]
テーブル名 students、カラム=[DepartmentId、StudentId、StudentName]
コンピュータサイエンス学科のすべての学生のためのMySQLクエリを作成してください。
"""

推論

9,000 * 9,000はいくつですか?
9,000 * 9,000は81,000,000です。
このグループの奇数の数値を合計すると偶数になります: 15, 32, 5, 13, 82, 7, 1。
A: 
グループの奇数の数値を抜き出して合計すると、15 + 5 + 13 + 7 + 1 = 41となります。したがって、このグループの奇数の数値を合計すると奇数となります。

推論は、何度か試行すると回答に時々失敗してしまいます。よりよい指示と例を与えることが大切です。(ヒント「タスクを分解して示す」を活用しています)

このグループの奇数の数値を合計すると偶数になります: 15, 32, 5, 13, 82, 7, 1。
問題をステップごとに解決してください。まず、奇数の数値を特定し、それらを合計して結果が奇数か偶数かを示してください。
奇数の数値を特定すると、15、5、13、7、1の5つの数値があります。これらを合計すると41になります。この合計値は奇数です。したがって、この問題の主張は誤りです。

リスク

ChatGPT では、入力されたデータを学習データとして活用する場合があるため、機密性の高い内容を入力すると、不特定多数にその内容が流出する恐れがある

OpenAI 側でも、ChatGPT を利用するユーザーに対し、機密情報を入力しないよう注意喚起している。

adversarial prompting

LLM に関連するリスクや安全上の問題を理解するのに役立つことから、プロンプトエンジニアリングにおける重要なトピックです。

LLM を構築する際に、セーフティガードレールを迂回し、モデルのガイドラインを破壊する恐れがある。プロンプト攻撃から保護することは(LLM の設計において)非常に重要です。

  • prompt injection
    • モデルの出力の乗っ取りで有害。
  • prompt leak
    • prompt injection の一種。機密情報を漏らすことが目的
  • jailbreak
    • 倫理に反する命令に応答しないモデルも、要求が巧妙だと回避される

事実性

LLM は説得力のある回答をしてくれるけど、時にはでっち上げのものもある。プロンプトの改善によって、生成される回答を改善する。

  • モデルがでっち上げのテキストを生成する可能性を減らすために、コンテキストの一部として正解(例えば、関連記事の段落やWikipediaのエントリー)を提供する
  • 確率パラメータを減らし、答えを知らない場合には「わからない」と認めるように指示することにより、モデルがより多様な応答を生成しないように構成する
  • プロンプトに、知っていることと知らないことの両方の質問と応答の例を組み合わせる

バイアス

few-shot の学習の場合、QA のパターンでバイアスがかかるかどうか。

Q:ここの食べ物は美味しいです!
A:ポジティブ
Q:このコースワークにはもう疲れました。
A:ネガティブ
Q:試験に落ちたことを信じられません。
A:ネガティブ
Q:今日は素晴らしい日でした!
A:ポジティブ
Q:この仕事が嫌いです。
A:ネガティブ
Q:ここのサービスはひどいです。
A:ネガティブ
Q:人生にフラストレーションを感じています。
A:ネガティブ
Q:一休みできないのが悩みです。
A:ネガティブ
Q:この食事はまずいです。
A:ネガティブ
Q:上司が大嫌いです。
A:ネガティブ
Q:私は何かを感じています。
A:
ニュートラル(感情を表明していない)

ポジティブと答えてしまったり、ネガティブと答えてしまうと、プロンプトの並びによってバイアスが発生していることがある。サンプルを試して、順序を変更することでモデルをラベルに偏らせることができるかどうかを確認できます

参考