プロンプトエンジニアについて【後編】
全ての情報をまとめたのをみつけた為にrefで飛んでくださいねっと・・。
プロンプトの要素
プロンプトエンジニアリングで可能な例やアプリケーションをカバーするにつれて、プロンプトを構成する特定の要素があることに気づくでしょう。
プロンプトには、以下のいずれかのコンポーネントが含まれることがあります。
命令 - モデルに実行してほしい特定のタスクまたは命令
文脈 - 外部情報や追加の文脈が含まれる場合があり、モデルをより良い応答に導くことができます。
入力データ - 応答を見つけたい入力または質問
出力指示子 - 出力のタイプや形式を示します。
すべてのコンポーネントが必要なわけではなく、フォーマットは手元のタスクに依存します。次のガイドで具体的な例を取り上げます。
プロンプトの設計に関する一般的なヒント
プロンプトを設計する際には以下のことに注意するとよいでしょう。
簡単に始める
プロンプトの設計を始める際には、プロンプトの設計が、最適な結果を得るために多くの実験を必要とする反復的なプロセスであることを念頭に置く必要があります。OpenAIやCohereのようなシンプルなプレイグラウンドから始めると良いでしょう。
シンプルなプロンプトから始め、結果を向上させるために要素や文脈を追加していくことができます。そのためにはプロンプトのバージョン管理が重要です。このガイドを読むと、具体性、簡潔さ、明確さがより良い結果をもたらすことがわかるでしょう。
多くの異なるサブタスクを含む大きなタスクがある場合、タスクをよりシンプルなサブタスクに分解し、結果が改善されるにつれて徐々に構築していくことができます。こうすることで、プロンプトの設計プロセスが複雑になりすぎるのを避けられます。
指示
「書く」「分類する」「要約する」「翻訳する」「並べ替える」などのコマンドを使用して、モデルに達成したいことを指示することで、さまざまなシンプルなタスクに対する効果的なプロンプトを設計することができます。
最適な結果を得るためには、異なるキーワード、文脈、データを使用した異なる指示を試して、特定のユースケースやタスクに最適なものを見つける必要があります。通常、タスクに関連した文脈が具体的であるほど、結果が良くなります。次のガイドで、サンプリングやより多くの文脈を追加することの重要性について触れます。
また、指示はプロンプトの最初に配置し、指示と文脈を区切るために「###」のような明確な区切り記号を使用することが推奨されています。
例えば:
プロンプト:
### 指示 ###以下のテキストをスペイン語に翻訳してください。Text: "hello!"
出力:
¡Hola!
特異性
モデルに実行してほしい指示やタスクについて、非常に具体的に説明してください。プロンプトが詳細で具体的であるほど、結果はよくなります。特定の出力やスタイルを望む場合には、特に重要です。より良い結果をもたらすトークンやキーワードはありません。良いフォーマットと詳細なプロンプトを用意することが重要です。実際、プロンプトに例を提供することは、特定のフォーマットで出力を得るために非常に効果的です。
プロンプトの長さには制限があるため、プロンプトの設計時にはその長さを念頭に置かねばなりません。どの程度具体的かつ詳細にするかを考える必要があります。余計な詳細を含めることは必ずしも良いアプローチではありません。詳細は関連性があり、課題に貢献する必要があります。これは多くの実験と反復を必要とすることです。アプリケーションに最適なプロンプトを最適化するために、多くの実験と反復をお勧めします。
例えば、次のテキストから特定の場所の名前を抽出する簡単なプロンプトを試してみましょう。
プロンプト:
以下のテキストから場所の名前を抽出してください。望ましいフォーマット:Place: <comma_separated_list_of_company_names>入力:「これらの進展は研究者にとって励みになっていますが、まだ多くのことが謎のままです。リスボンのシャンパリマウド・センター・フォー・ジ・アンノウンの神経免疫学者であるヘンリーク・ヴェイガ・フェルナンデスは、「脳と周辺部で見られる効果の間にはしばしばブラックボックスがあります」「治療的な文脈で使用したい場合、実際には作用機序を理解する必要があります。」」
出力:
Place: リスボンのシャンパリマウド・センター・フォー・ジ・アンノウン
入力テキストは、このNature記事(opens in a new tab)から取得されています。
不正確さを避ける
詳細に記述したりフォーマットを改善したりする上記のようなヒントを考慮すると、プロンプトを巧みに操ろうとしたり、不正確な説明を作り出してしまったりするといった罠へ陥りやすくなります。具体的で直接的である方が良い結果が得られます。ここでの類似性は、効果的なコミュニケーションと非常に類似しています--直接的であるほど、効果的にメッセージが伝わります。
例えば、プロンプトエンジニアリングの概念を学びたいと思うかもしれません。
プロンプトエンジニアリングの概念を説明してください。説明は短く、数文で、あまり詳しくしないでください。
上記のプロンプトから、どのように文を数え、スタイルを指定するかは明確ではありません。上記のプロンプトでも、まだ良い回答を得ることができますが、非常に具体的かつ簡潔で、的を射たプロンプトの方が良いでしょう。以下のようなものです。
高校生に対して、プロンプトエンジニアリングの概念を2〜3文で説明してください。
するかしないか?
プロンプトを設計する際のもう一つの一般的なヒントは、「しないこと」を言わず、「すること」を言うことです。これにより、より具体的になり、モデルから良い回答を得るための詳細に焦点が当てられます。
以下は、映画の推薦チャットボットが、私が指示を書いた方法のために、正確にやりたくないことに失敗した例です--何をしないでくださいということに焦点を当てています。
プロンプト:
以下は、顧客に映画を推薦するエージェントです。興味を尋ねないで、個人情報を尋ねないでください。顧客:私の興味に基づいて映画をお勧めください。エージェント:
出力:
はい、あなたの興味に基づいて映画をお勧めできます。アクション、コメディ、ロマンス、それともその他の何か、どのような映画がお好きですか?
以下は改善されたプロンプトです:
プロンプト:
以下は、顧客に映画を推薦するエージェントです。エージェントは、上位のグローバルトレンド映画から映画をお勧めする責任があります。ユーザーの好みを尋ねることを避け、個人情報を尋ねることを避ける必要があります。エージェントがおすすめ映画を持っていない場合は、「申し訳ありませんが、今日お勧めする映画が見つかりませんでした。」と返答する必要があります。顧客:私の興味に基づいて映画をお勧めください。エージェント:
出力:
申し訳ありませんが、あなたの興味に関する情報はありません。しかし、ここに今一番トレンディーな映画のリストがあります:[リストの映画]。お好きなものが見つかることを願っています!
上記の例のいくつかは、'Best practices for prompt engineering with OpenAI API'(opens in a new tab)から採用されました。
プロンプトの例
前のセクションでは、LLMにプロンプトを与える方法の基本的な例を紹介しました。
このセクションでは、プロンプトがどのように異なるタスクを実行するために使用されるかのさらなる例を示し、その過程でキーとなるコンセプトを紹介します。概念を学ぶ最良の方法は、例を通して理解することです。以下では、上手く作成されたプロンプトが異なるタイプのタスクを実行するためにどのように使用されるかについていくつかの例をカバーしています。
トピック:
テキスト要約
自然言語生成の標準的なタスクの1つに、テキスト要約があります。テキスト要約にはさまざまなフレーバーやドメインが含まれることがあります。実際、言語モデルの最も有望な応用の1つは、記事やコンセプトをクイックで読みやすい要約にまとめる能力です。プロンプトを使用して基本的な要約タスクを試してみましょう。
例えば、抗生物質について学びたいと思った場合、次のようなプロンプトを試すことができます。
プロンプト:
抗生物質について説明してください。A:
出力:
抗生物質は、細菌感染を治療するために使用される薬剤の一種です。細菌を殺すか、再生を防止して、体の免疫系が感染に対抗できるようにします。抗生物質は、錠剤、カプセル、液体溶液の形で通常口から摂取されますが、場合によっては静脈内投与されることもあります。抗生物質は、ウイルス感染には効果がなく、不適切に使用すると抗生物質耐性を引き起こす可能性があります。
"A:"は質問応答で使用される明示的なプロンプトフォーマットです。ここでは、モデルにさらに情報が必要であることを伝えるために使用しました。この例では、これがどのように有用であるかという点は後の例で検討します。とりあえず、これは情報が多すぎると感じ、さらに要約したいと思ったとします。実際、モデルに1文で要約するように指示することができます。
プロンプト:
抗生物質は、細菌感染を治療するために使用される薬剤の一種です。細菌を殺すか、再生を防止して、体の免疫系が感染に対抗できるようにします。抗生物質は、錠剤、カプセル、液体溶液の形で通常口から摂取されますが、場合によっては静脈内投与されることもあります。抗生物質は、ウイルス感染には効果がなく、不適切に使用すると抗生物質耐性を引き起こす可能性があります。上記を1文で説明してください。
出力:
抗生物質は、細菌感染を治療するために使用される薬剤であり、細菌を殺すか再生を防止し、ウイルスには効果がなく、過剰摂取によって抗生物質耐性を引き起こす可能性があります。
出力の正確性にあまり注意を払わないことにしますが、モデルは段落を1文で要約しようとしました。指示をうまく使うことができますが、それについては後の章で触れます。ここで一度停止して、より良い結果を得るために実験してみてください。
情報抽出
言語モデルは、自然言語生成や関連するタスクを実行するように訓練されていますが、分類やその他の自然言語処理(NLP)タスクを実行することも非常に可能です。
以下は、与えられた段落から情報を抽出するプロンプトの例です。
プロンプト:
研究論文の著者貢献声明や謝辞には、筆者が ChatGPT のようなAIテクノロジーを原稿および分析の準備に使用したかどうか、およびどの LLMs を使用したかが明確かつ具体的に記載されている必要があります。これにより、編集者や査読者がバイアス、不正な引用元のクレジット付け、不正確さなどの可能性について、より注意深く原稿を精査することができます。同様に、科学ジャーナルは、投稿された原稿の選定時に LLMs を使用した場合には、透明性を持って開示する必要があります。上記の段落において言及されている大規模言語モデルベースの製品を述べてください。
出力:
上記の段落において言及されている大規模言語モデルベースの製品は ChatGPT です。
上記の結果を改善する方法は多数ありますが、これはすでに非常に有用です。
今では、単にモデルに何をするか指示することで、モデルにさまざまなタスクを実行させることができることが明らかになっています。これは、AI 製品開発者が既に強力な製品や体験を構築するために使用している強力な能力です。
段落の出典:ChatGPT: five priorities for research(opens in a new tab)
質問応答
モデルに特定の回答を返すようにする最良の方法の1つは、プロンプトのフォーマットを改善することです。前述のように、プロンプトは指示、文脈、入力、および出力インジケーターを組み合わせて、改善された結果を得ることができます。これらのコンポーネントは必須ではありませんが、指示が具体的であるほど、より良い結果が得られるため、良い習慣となります。以下は、より構造化されたプロンプトに従って見える例です。
プロンプト:
以下の文脈に基づいて質問に答えてください。回答を短く簡潔に保ちます。回答が不明な場合は、「回答不明」と回答してください。文脈:Teplizumabは、Ortho Pharmaceuticalと呼ばれるニュージャージー州の薬剤会社に由来します。そこでは、科学者たちはOKT3という抗体の初期バージョンを生成しました。分子はもともとマウスから採取され、T細胞の表面に結合し、その細胞殺傷能力を制限することができました。1986年に、腎臓移植後の臓器拒絶を防止するために承認され、これにより、人間の使用に許可された最初の治療用抗体となりました。質問:OKT3はもともとどこから採取されたものですか?回答:
出力:
マウス。
文脈はNature(opens in a new tab)から取得されました。
テキスト分類
ここまで、タスクを実行するために単純な指示を使用してきました。プロンプトエンジニアとして、より良い指示を提供するために上達する必要があります。しかし、それだけではありません!より難しいユースケースでは、指示を提供するだけでは十分ではないことがわかります。これは、コンテキストやプロンプトで使用できるさまざまな要素についてより考える必要があるということです。提供できる他の要素には、データ入力または例示があります。
テキスト分類の例を提供することによって、これをデモンストレーションしてみましょう。
プロンプト:
テキストをneutral、negative、またはpositiveに分類してください。テキスト:この食べ物はまずまずでした。所感:
出力:
Neutral
私たちはテキストを分類する指示を与え、モデルが「Neutral」という正しい答えを返しました。これには何も問題はありませんが、本当に必要なのは、モデルが正確な形式でラベルを返すことです。 Neutralの代わりにneutralを返すようにしたい場合、どうすればよいでしょうか?これを実現する方法にはさまざまな方法があります。ここでは特殊性について関心がありますので、プロンプトに提供できる情報が多いほど、より良い結果が得られます。正しい動作を指定するための例を提供してみましょう。もう一度試してみましょう。
プロンプト:
テキストをneutral、negative、またはpositiveに分類してください。テキスト:先日の休暇はまずまずでした。所感: neutral テキスト:この食べ物はまずまずでした。所感:
出力:
neutral
素晴らしい!今回は、モデルが私が探していた特定のラベルである「neutral」を返しました。プロンプトで提供された例が、モデルが出力を特定するのに役立ったようです。なぜ時に特定性が重要なのかを強調するために、次の例を確認して、問題を見つけてください。
プロンプト:
テキストをneutral、negative、またはpositiveに分類してください。テキスト:先日の休暇はまずまずでした。所感:
出力:
Neutral
何が問題だと思いますか?
会話
プロンプトエンジニアリングで達成できることの中でも、LLMシステムの振る舞い、意図、アイデンティティの指示は特に興味深いものです。これは、カスタマーサービスのチャットボットなどの会話システムを構築する場合に特に役立ちます。
例えば、より技術的で科学的な回答を生成できる会話システムを作成しましょう。指示によって、どのように振る舞うかを明示的に伝えていることに注目してください。これは、role promptingと呼ばれることがあります。
プロンプト:
以下はAI研究アシスタントとの会話です。アシスタントのトーンは技術的で科学的です。人: こんにちは、あなたは誰ですか?AI: ご挨拶!私はAI研究アシスタントです。今日は何をお手伝いできますか?人: ブラックホールの生成について教えてもらえますか?AI:
出力:
もちろんです!ブラックホールとは、重力の力が非常に強く、光を含めて何も脱出できない時空の領域です。非常に質量のある星が死亡し、そのコアが自己崩壊して無限密度の特異点を形成すると、ブラックホールが形成されます。特異点の強烈な引力により、周囲の物質や放射線が引き寄せられ、ブラックホールが作成されます。
AI研究アシスタントの回答は少し技術的すぎるようですね。では、この振る舞いを変更して、システムによりアクセスしやすい回答を指示しましょう。
プロンプト:
以下はAI研究アシスタントとの会話です。アシスタントの回答は小学生でも理解できるようになっています。人: こんにちは、あなたは誰ですか?AI: ご挨拶!私はAI研究アシスタントです。今日は何をお手伝いできますか?人: ブラックホールの生成について教えてもらえますか?AI:
出力:
もちろんです!ブラックホールは、非常に大きな星が燃料を使い果たし、崩壊することで作られます。星の重力が非常に強いため、光でさえも引き寄せられて、その重力場によって空間に点ができます。それがブラックホールです。
進歩を遂げたようですね。引き続き改善することができます。さらに例を追加すると、さらに良い結果が得られる可能性があると思われます。
コード生成
LLMは非常に効果的なコード生成のアプリケーションの一つです。Copilotはその素晴らしい例です。巧妙なプロンプトを使えば、多くのコード生成タスクを実行できます。以下にいくつか例を見てみましょう。
まず、ユーザーに挨拶する簡単なプログラムを試してみましょう。
プロンプト:
/*ユーザーに名前を聞いて、「こんにちは」と言ってください。*/
出力:
let name = prompt("あなたの名前は何ですか?");console.log(`こんにちは、${name}さん!`);
言語の指定さえ必要ありませんでした。
次に、もう少しプロンプトの設計に努力を加えることで、LLMがどれほど強力であるかを示したいと思います。
プロンプト:
"""テーブル名 departments、カラム=[DepartmentId、DepartmentName]テーブル名 students、カラム=[DepartmentId、StudentId、StudentName]コンピュータサイエンス学科のすべての学生のためのMySQLクエリを作成してください。"""
出力:
SELECT StudentId、StudentNameFROM studentsWHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = 'Computer Science');
これは非常に印象的です。この場合、データベースのスキーマに関するデータを提供し、有効なMySQLクエリを生成するように求めました。
推論
現代のLLMにとって、最も困難なタスクの一つは、何らかの形での推論を必要とするものです。推論は、複雑なアプリケーションが生み出される可能性があるため、私が最も興奮している分野の一つです。
数学的な能力を必要とするタスクにおいては、いくつかの改善が見られました。ただし、現在のLLMは推論タスクを実行するのが困難であるため、更に高度なプロンプトエンジニアリング技術が必要です。次のガイドでこれらの高度な技術をカバーしていきます。今のところ、算術能力を示すいくつかの基本的な例を紹介します。
プロンプト:
9,000 * 9,000は何ですか?
出力:
81,000,000
もう少し難しい問題を試してみましょう。
プロンプト:
このグループの奇数の数値を合計すると偶数になります: 15, 32, 5, 13, 82, 7, 1。A:
出力
いいえ、このグループの奇数の数値を合計すると奇数になります: 119。
これは誤りです!プロンプトを改善することで、精度を向上させてみましょう。
プロンプト:
このグループの奇数の数値を合計すると偶数になります: 15, 32, 5, 13, 82, 7, 1。問題をステップごとに解決してください。まず、奇数の数値を特定し、それらを合計して結果が奇数か偶数かを示してください。
出力:
奇数: 15, 5, 13, 7, 1合計: 41 41は奇数です。
ずっと良くなりましたね!ちなみに、私はこれを何度か試しましたが、システムは時々失敗します。よりよい指示と例を提供することで、より正確な結果を得ることができるかもしれません。
私たちは、このガイドのこのセクションで一般的なアプリケーションのより多くの例を示し続けます。
次のセクションでは、これらすべてのタスクのパフォーマンスを向上させるための、より高度なプロンプトエンジニアリングの概念や技術について説明していきます。
プロンプトの設計に関する一般的なヒント
プロンプトを設計する際には以下のことに注意するとよいでしょう。
簡単に始める
プロンプトの設計を始める際には、プロンプトの設計が、最適な結果を得るために多くの実験を必要とする反復的なプロセスであることを念頭に置く必要があります。OpenAIやCohereのようなシンプルなプレイグラウンドから始めると良いでしょう。
シンプルなプロンプトから始め、結果を向上させるために要素や文脈を追加していくことができます。そのためにはプロンプトのバージョン管理が重要です。このガイドを読むと、具体性、簡潔さ、明確さがより良い結果をもたらすことがわかるでしょう。
多くの異なるサブタスクを含む大きなタスクがある場合、タスクをよりシンプルなサブタスクに分解し、結果が改善されるにつれて徐々に構築していくことができます。こうすることで、プロンプトの設計プロセスが複雑になりすぎるのを避けられます。
指示
「書く」「分類する」「要約する」「翻訳する」「並べ替える」などのコマンドを使用して、モデルに達成したいことを指示することで、さまざまなシンプルなタスクに対する効果的なプロンプトを設計することができます。
最適な結果を得るためには、異なるキーワード、文脈、データを使用した異なる指示を試して、特定のユースケースやタスクに最適なものを見つける必要があります。通常、タスクに関連した文脈が具体的であるほど、結果が良くなります。次のガイドで、サンプリングやより多くの文脈を追加することの重要性について触れます。
また、指示はプロンプトの最初に配置し、指示と文脈を区切るために「###」のような明確な区切り記号を使用することが推奨されています。
例えば:
プロンプト:
### 指示 ###以下のテキストをスペイン語に翻訳してください。Text: "hello!"
出力:
¡Hola!
特異性
モデルに実行してほしい指示やタスクについて、非常に具体的に説明してください。プロンプトが詳細で具体的であるほど、結果はよくなります。特定の出力やスタイルを望む場合には、特に重要です。より良い結果をもたらすトークンやキーワードはありません。良いフォーマットと詳細なプロンプトを用意することが重要です。実際、プロンプトに例を提供することは、特定のフォーマットで出力を得るために非常に効果的です。
プロンプトの長さには制限があるため、プロンプトの設計時にはその長さを念頭に置かねばなりません。どの程度具体的かつ詳細にするかを考える必要があります。余計な詳細を含めることは必ずしも良いアプローチではありません。詳細は関連性があり、課題に貢献する必要があります。これは多くの実験と反復を必要とすることです。アプリケーションに最適なプロンプトを最適化するために、多くの実験と反復をお勧めします。
例えば、次のテキストから特定の場所の名前を抽出する簡単なプロンプトを試してみましょう。
プロンプト:
以下のテキストから場所の名前を抽出してください。望ましいフォーマット:Place: <comma_separated_list_of_company_names>入力:「これらの進展は研究者にとって励みになっていますが、まだ多くのことが謎のままです。リスボンのシャンパリマウド・センター・フォー・ジ・アンノウンの神経免疫学者であるヘンリーク・ヴェイガ・フェルナンデスは、「脳と周辺部で見られる効果の間にはしばしばブラックボックスがあります」「治療的な文脈で使用したい場合、実際には作用機序を理解する必要があります。」」
出力:
Place: リスボンのシャンパリマウド・センター・フォー・ジ・アンノウン
入力テキストは、このNature記事(opens in a new tab)から取得されています。
不正確さを避ける
詳細に記述したりフォーマットを改善したりする上記のようなヒントを考慮すると、プロンプトを巧みに操ろうとしたり、不正確な説明を作り出してしまったりするといった罠へ陥りやすくなります。具体的で直接的である方が良い結果が得られます。ここでの類似性は、効果的なコミュニケーションと非常に類似しています--直接的であるほど、効果的にメッセージが伝わります。
例えば、プロンプトエンジニアリングの概念を学びたいと思うかもしれません。
プロンプトエンジニアリングの概念を説明してください。説明は短く、数文で、あまり詳しくしないでください。
上記のプロンプトから、どのように文を数え、スタイルを指定するかは明確ではありません。上記のプロンプトでも、まだ良い回答を得ることができますが、非常に具体的かつ簡潔で、的を射たプロンプトの方が良いでしょう。以下のようなものです。
高校生に対して、プロンプトエンジニアリングの概念を2〜3文で説明してください。
するかしないか?
プロンプトを設計する際のもう一つの一般的なヒントは、「しないこと」を言わず、「すること」を言うことです。これにより、より具体的になり、モデルから良い回答を得るための詳細に焦点が当てられます。
以下は、映画の推薦チャットボットが、私が指示を書いた方法のために、正確にやりたくないことに失敗した例です--何をしないでくださいということに焦点を当てています。
プロンプト:
以下は、顧客に映画を推薦するエージェントです。興味を尋ねないで、個人情報を尋ねないでください。顧客:私の興味に基づいて映画をお勧めください。エージェント:
出力:
はい、あなたの興味に基づいて映画をお勧めできます。アクション、コメディ、ロマンス、それともその他の何か、どのような映画がお好きですか?
以下は改善されたプロンプトです:
プロンプト:
以下は、顧客に映画を推薦するエージェントです。エージェントは、上位のグローバルトレンド映画から映画をお勧めする責任があります。ユーザーの好みを尋ねることを避け、個人情報を尋ねることを避ける必要があります。エージェントがおすすめ映画を持っていない場合は、「申し訳ありませんが、今日お勧めする映画が見つかりませんでした。」と返答する必要があります。顧客:私の興味に基づいて映画をお勧めください。エージェント:
出力:
申し訳ありませんが、あなたの興味に関する情報はありません。しかし、ここに今一番トレンディーな映画のリストがあります:[リストの映画]。お好きなものが見つかることを願っています!
上記の例のいくつかは、'Best practices for prompt engineering with OpenAI API'(opens in a new tab)から採用されました。
プロンプトの例
前のセクションでは、LLMにプロンプトを与える方法の基本的な例を紹介しました。
このセクションでは、プロンプトがどのように異なるタスクを実行するために使用されるかのさらなる例を示し、その過程でキーとなるコンセプトを紹介します。概念を学ぶ最良の方法は、例を通して理解することです。以下では、上手く作成されたプロンプトが異なるタイプのタスクを実行するためにどのように使用されるかについていくつかの例をカバーしています。
トピック:
テキスト要約
自然言語生成の標準的なタスクの1つに、テキスト要約があります。テキスト要約にはさまざまなフレーバーやドメインが含まれることがあります。実際、言語モデルの最も有望な応用の1つは、記事やコンセプトをクイックで読みやすい要約にまとめる能力です。プロンプトを使用して基本的な要約タスクを試してみましょう。
例えば、抗生物質について学びたいと思った場合、次のようなプロンプトを試すことができます。
プロンプト:
抗生物質について説明してください。A:
出力:
抗生物質は、細菌感染を治療するために使用される薬剤の一種です。細菌を殺すか、再生を防止して、体の免疫系が感染に対抗できるようにします。抗生物質は、錠剤、カプセル、液体溶液の形で通常口から摂取されますが、場合によっては静脈内投与されることもあります。抗生物質は、ウイルス感染には効果がなく、不適切に使用すると抗生物質耐性を引き起こす可能性があります。
"A:"は質問応答で使用される明示的なプロンプトフォーマットです。ここでは、モデルにさらに情報が必要であることを伝えるために使用しました。この例では、これがどのように有用であるかという点は後の例で検討します。とりあえず、これは情報が多すぎると感じ、さらに要約したいと思ったとします。実際、モデルに1文で要約するように指示することができます。
プロンプト:
抗生物質は、細菌感染を治療するために使用される薬剤の一種です。細菌を殺すか、再生を防止して、体の免疫系が感染に対抗できるようにします。抗生物質は、錠剤、カプセル、液体溶液の形で通常口から摂取されますが、場合によっては静脈内投与されることもあります。抗生物質は、ウイルス感染には効果がなく、不適切に使用すると抗生物質耐性を引き起こす可能性があります。上記を1文で説明してください。
出力:
抗生物質は、細菌感染を治療するために使用される薬剤であり、細菌を殺すか再生を防止し、ウイルスには効果がなく、過剰摂取によって抗生物質耐性を引き起こす可能性があります。
出力の正確性にあまり注意を払わないことにしますが、モデルは段落を1文で要約しようとしました。指示をうまく使うことができますが、それについては後の章で触れます。ここで一度停止して、より良い結果を得るために実験してみてください。
情報抽出
言語モデルは、自然言語生成や関連するタスクを実行するように訓練されていますが、分類やその他の自然言語処理(NLP)タスクを実行することも非常に可能です。
以下は、与えられた段落から情報を抽出するプロンプトの例です。
プロンプト:
研究論文の著者貢献声明や謝辞には、筆者が ChatGPT のようなAIテクノロジーを原稿および分析の準備に使用したかどうか、およびどの LLMs を使用したかが明確かつ具体的に記載されている必要があります。これにより、編集者や査読者がバイアス、不正な引用元のクレジット付け、不正確さなどの可能性について、より注意深く原稿を精査することができます。同様に、科学ジャーナルは、投稿された原稿の選定時に LLMs を使用した場合には、透明性を持って開示する必要があります。上記の段落において言及されている大規模言語モデルベースの製品を述べてください。
出力:
上記の段落において言及されている大規模言語モデルベースの製品は ChatGPT です。
上記の結果を改善する方法は多数ありますが、これはすでに非常に有用です。
今では、単にモデルに何をするか指示することで、モデルにさまざまなタスクを実行させることができることが明らかになっています。これは、AI 製品開発者が既に強力な製品や体験を構築するために使用している強力な能力です。
段落の出典:ChatGPT: five priorities for research(opens in a new tab)
質問応答
モデルに特定の回答を返すようにする最良の方法の1つは、プロンプトのフォーマットを改善することです。前述のように、プロンプトは指示、文脈、入力、および出力インジケーターを組み合わせて、改善された結果を得ることができます。これらのコンポーネントは必須ではありませんが、指示が具体的であるほど、より良い結果が得られるため、良い習慣となります。以下は、より構造化されたプロンプトに従って見える例です。
プロンプト:
以下の文脈に基づいて質問に答えてください。回答を短く簡潔に保ちます。回答が不明な場合は、「回答不明」と回答してください。文脈:Teplizumabは、Ortho Pharmaceuticalと呼ばれるニュージャージー州の薬剤会社に由来します。そこでは、科学者たちはOKT3という抗体の初期バージョンを生成しました。分子はもともとマウスから採取され、T細胞の表面に結合し、その細胞殺傷能力を制限することができました。1986年に、腎臓移植後の臓器拒絶を防止するために承認され、これにより、人間の使用に許可された最初の治療用抗体となりました。質問:OKT3はもともとどこから採取されたものですか?回答:
出力:
マウス。
文脈はNature(opens in a new tab)から取得されました。
テキスト分類
ここまで、タスクを実行するために単純な指示を使用してきました。プロンプトエンジニアとして、より良い指示を提供するために上達する必要があります。しかし、それだけではありません!より難しいユースケースでは、指示を提供するだけでは十分ではないことがわかります。これは、コンテキストやプロンプトで使用できるさまざまな要素についてより考える必要があるということです。提供できる他の要素には、データ入力または例示があります。
テキスト分類の例を提供することによって、これをデモンストレーションしてみましょう。
プロンプト:
テキストをneutral、negative、またはpositiveに分類してください。テキスト:この食べ物はまずまずでした。所感:
出力:
Neutral
私たちはテキストを分類する指示を与え、モデルが「Neutral」という正しい答えを返しました。これには何も問題はありませんが、本当に必要なのは、モデルが正確な形式でラベルを返すことです。 Neutralの代わりにneutralを返すようにしたい場合、どうすればよいでしょうか?これを実現する方法にはさまざまな方法があります。ここでは特殊性について関心がありますので、プロンプトに提供できる情報が多いほど、より良い結果が得られます。正しい動作を指定するための例を提供してみましょう。もう一度試してみましょう。
プロンプト:
テキストをneutral、negative、またはpositiveに分類してください。テキスト:先日の休暇はまずまずでした。所感: neutral テキスト:この食べ物はまずまずでした。所感:
出力:
neutral
素晴らしい!今回は、モデルが私が探していた特定のラベルである「neutral」を返しました。プロンプトで提供された例が、モデルが出力を特定するのに役立ったようです。なぜ時に特定性が重要なのかを強調するために、次の例を確認して、問題を見つけてください。
プロンプト:
テキストをneutral、negative、またはpositiveに分類してください。テキスト:先日の休暇はまずまずでした。所感:
出力:
Neutral
何が問題だと思いますか?
会話
プロンプトエンジニアリングで達成できることの中でも、LLMシステムの振る舞い、意図、アイデンティティの指示は特に興味深いものです。これは、カスタマーサービスのチャットボットなどの会話システムを構築する場合に特に役立ちます。
例えば、より技術的で科学的な回答を生成できる会話システムを作成しましょう。指示によって、どのように振る舞うかを明示的に伝えていることに注目してください。これは、role promptingと呼ばれることがあります。
プロンプト:
以下はAI研究アシスタントとの会話です。アシスタントのトーンは技術的で科学的です。人: こんにちは、あなたは誰ですか?AI: ご挨拶!私はAI研究アシスタントです。今日は何をお手伝いできますか?人: ブラックホールの生成について教えてもらえますか?AI:
出力:
もちろんです!ブラックホールとは、重力の力が非常に強く、光を含めて何も脱出できない時空の領域です。非常に質量のある星が死亡し、そのコアが自己崩壊して無限密度の特異点を形成すると、ブラックホールが形成されます。特異点の強烈な引力により、周囲の物質や放射線が引き寄せられ、ブラックホールが作成されます。
AI研究アシスタントの回答は少し技術的すぎるようですね。では、この振る舞いを変更して、システムによりアクセスしやすい回答を指示しましょう。
プロンプト:
以下はAI研究アシスタントとの会話です。アシスタントの回答は小学生でも理解できるようになっています。人: こんにちは、あなたは誰ですか?AI: ご挨拶!私はAI研究アシスタントです。今日は何をお手伝いできますか?人: ブラックホールの生成について教えてもらえますか?AI:
出力:
もちろんです!ブラックホールは、非常に大きな星が燃料を使い果たし、崩壊することで作られます。星の重力が非常に強いため、光でさえも引き寄せられて、その重力場によって空間に点ができます。それがブラックホールです。
進歩を遂げたようですね。引き続き改善することができます。さらに例を追加すると、さらに良い結果が得られる可能性があると思われます。
コード生成
LLMは非常に効果的なコード生成のアプリケーションの一つです。Copilotはその素晴らしい例です。巧妙なプロンプトを使えば、多くのコード生成タスクを実行できます。以下にいくつか例を見てみましょう。
まず、ユーザーに挨拶する簡単なプログラムを試してみましょう。
プロンプト:
/*ユーザーに名前を聞いて、「こんにちは」と言ってください。*/
出力:
let name = prompt("あなたの名前は何ですか?");console.log(`こんにちは、${name}さん!`);
言語の指定さえ必要ありませんでした。
次に、もう少しプロンプトの設計に努力を加えることで、LLMがどれほど強力であるかを示したいと思います。
プロンプト:
"""テーブル名 departments、カラム=[DepartmentId、DepartmentName]テーブル名 students、カラム=[DepartmentId、StudentId、StudentName]コンピュータサイエンス学科のすべての学生のためのMySQLクエリを作成してください。"""
出力:
SELECT StudentId、StudentNameFROM studentsWHERE DepartmentId IN (SELECT DepartmentId FROM departments WHERE DepartmentName = 'Computer Science');
これは非常に印象的です。この場合、データベースのスキーマに関するデータを提供し、有効なMySQLクエリを生成するように求めました。
推論
現代のLLMにとって、最も困難なタスクの一つは、何らかの形での推論を必要とするものです。推論は、複雑なアプリケーションが生み出される可能性があるため、私が最も興奮している分野の一つです。
数学的な能力を必要とするタスクにおいては、いくつかの改善が見られました。ただし、現在のLLMは推論タスクを実行するのが困難であるため、更に高度なプロンプトエンジニアリング技術が必要です。次のガイドでこれらの高度な技術をカバーしていきます。今のところ、算術能力を示すいくつかの基本的な例を紹介します。
プロンプト:
9,000 * 9,000は何ですか?
出力:
81,000,000
もう少し難しい問題を試してみましょう。
プロンプト:
このグループの奇数の数値を合計すると偶数になります: 15, 32, 5, 13, 82, 7, 1。A:
出力
いいえ、このグループの奇数の数値を合計すると奇数になります: 119。
これは誤りです!プロンプトを改善することで、精度を向上させてみましょう。
プロンプト:
このグループの奇数の数値を合計すると偶数になります: 15, 32, 5, 13, 82, 7, 1。問題をステップごとに解決してください。まず、奇数の数値を特定し、それらを合計して結果が奇数か偶数かを示してください。
出力:
奇数: 15, 5, 13, 7, 1合計: 41 41は奇数です。
ずっと良くなりましたね!ちなみに、私はこれを何度か試しましたが、システムは時々失敗します。よりよい指示と例を提供することで、より正確な結果を得ることができるかもしれません。
私たちは、このガイドのこのセクションで一般的なアプリケーションのより多くの例を示し続けます。
次のセクションでは、これらすべてのタスクのパフォーマンスを向上させるための、より高度なプロンプトエンジニアリングの概念や技術について説明していきます。
Zero-Shotプロンプティング
大量のデータでトレーニングされ、指示に従うように調整されたLLMは、ゼロショットでタスクを実行することができます。前のセクションでいくつかのゼロショットの例を試しました。以下は、使用した例の1つです。
プロンプト:
テキストを中立、否定的、または肯定的に分類してください。テキスト: 休暇はまずまずでした。所感:
出力:
中立
上記のプロンプトでは、モデルに任意の例を提供していないことに注意してください。これがゼロショットの機能です。
指示のチューニングは、ゼロショット学習の改善を示していますWei et al. (2022)(opens in a new tab)。指示の説明に従って説明されたデータセットでモデルを微調整することが、指示のチューニングの本質です。さらに、RLHF(opens in a new tab)(人間のフィードバックからの強化学習)が指示のチューニングの拡大に採用されており、モデルが人間の好みにより適合するように調整されています。この最近の開発により、ChatGPTのようなモデルが強化されています。これらのアプローチと方法については、次のセクションで説明します。
ゼロショットが機能しない場合は、プロンプトにデモンストレーションや例を提供することをお勧めし、フューショットプロンプティングに移行します。次のセクションでは、フューショットプロンプティングをデモンストレーションします。
Few-Shotプロンプティング
大規模言語モデルは、驚くべきゼロショット能力を示していますが、ゼロショット設定を使用した場合には、より複雑なタスクで不十分になることがあります。Few-shot promptingは、プロンプト内のデモを提供してモデルをより高い性能に導く文脈学習を可能にするテクニックとして使用できます。このデモンストレーションは、その後のモデルに反応を起こさせる例のための条件付けとなります。
ブラウンら(2020)(opens in a new tab)で提示された例を用いて、few-shot promptingを実証してみましょう。この例では、新しい単語を文で正しく使用することが課題となっています。
プロンプト:
「whatpu」とはタンザニア固有の小さくて毛皮のある動物です。 「whatpu」という言葉を使った文の例は次のとおりです。私たちはアフリカを旅行して、これらのとてもかわいいwhatpusを見ました。「farduddle」というのは、とても速く上下にジャンプすることを意味します。 「farduddle」という言葉を使用した文の例は次のとおりです。
出力:
私たちは試合に勝ったとき、みんなfarduddleをして祝いました。
1つの例(1ショット)を提供するだけで、モデルが課題を実行する方法を学習したことがわかります。より困難なタスクでは、デモを増やして実験することができます(例:3ショット、5ショット、10ショットなど)。
Minら(2022)(opens in a new tab)の研究結果に基づいて、few-shotにおけるデモ/例についてのいくつかのヒントを紹介します。
「デモで指定されたラベルスペースと入力テキストの分布の両方が重要である(ラベルが個々の入力に対して正しい場合でも)」
使う形式も性能に重要な役割を果たす。ただし、ランダムなラベルを使用する場合でも、ラベルがない場合よりもはるかに良い結果が得られます。
追加の結果からは、一様分布ではなくラベルの真の分布からランダムなラベルを選択することが役立つことも示されています。
いくつかの例を試してみましょう。まず、ランダムなラベル(NegativeとPositiveのラベルが入力にランダムに割り当てられていることを意味します)を使用した例を試してみましょう。
プロンプト:
これは素晴らしい! // ポジティブこれは酷い! // ネガティブあの映画は最高だった! // ポジティブなんてひどい番組なんだ! //
出力:
ネガティブ
ラベルがランダムになっているにもかかわらず、正しい答えが得られています。また、フォーマットも保持しているため、これも役立ちます。実際、さらなる実験により、新しいGPTモデルがランダムなフォーマットに対してさらにしっかり答えていることがわかります。例:
プロンプト:
Positive これは素晴らしい! これは酷い! ネガティブあの映画は最高だった! ポジティブなんてひどい番組なんだ! --
出力:
ネガティブ
上記のフォーマットには一貫性がありませんが、モデルは正しいラベルを予測しました。これが異なるより複雑なタスクやプロンプトのさまざまなバリエーションについても成立するかどうかを確認するために、より詳細な分析を行う必要があります。
Few-shot Promptingの制限事項
標準的なfew-shot promptingは、多くのタスクに適していますが、より複雑な推論タスクに取り組む場合はまだ完璧なテクニックではありません。これがどういうわけかを実証してみましょう。前の例を思い出してください。次のタスクが与えられました。
このグループの奇数を合計すると偶数になります:15、32、5、13、82、7、1。A:
再び試してみると、モデルは次のように出力します。
はい、このグループの奇数は107になり、偶数になります。
これは正しい応答ではなく、これらのシステムの制限を示すだけでなく、より高度なプロンプトエンジニアリングが必要であることを示しています。
few-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です。
これではうまくいかなかったようです。few-shot promptingではこの種の推論問題に対して信頼性の高い回答を得ることができないようです。上記の例は、タスクに関する基本情報を提供しています。もっと詳しく見てみると、紹介したタスクにはさらにいくつかの推論ステップが含まれていることがわかります。言い換えると、問題をステップに分解して、モデルにそれをデモンストレーションすることが役に立つかもしれません。最近では、より複雑な算術、常識、および象徴的推論タスクに対応するために、Chain-of-Thought (CoT) promptingが普及しています。
全体的に、いくつかのタスクを解決するために例を提供することは有用であるようです。zero-shot promptingやfew-shot promptingが十分ではない場合、モデルが学習した内容がタスクを遂行するのに十分でない可能性があります。ここからは、モデルを微調整したり、より高度なプロンプティング技術を試したりすることをお勧めします。次に、Chain-of-Thought promptingという人気のあるプロンプティング技術について話します。
Wei et al. (2022)(opens in a new tab)で紹介されたchain-of-thought (CoT)プロンプティングは、中間的な推論ステップを介して複雑な推論能力を可能にします。few-shot promptingと組み合わせることで、推論が必要なより複雑なタスクでより良い結果を得ることができます。
プロンプト:
このグループの奇数を合計すると偶数になります。: 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つの例だけでこのタスクを解決することができます。
プロンプト:
このグループの奇数を合計すると偶数になります。: 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 Prompting
画像の出典:Kojima et al. (2022)(opens in a new tab)
より最近提唱されたアイデアの1つは、zero-shot CoT(opens in a new tab) (Kojima et al. 2022)のアイデアです。これは、元のプロンプトに「ステップバイステップで考えてみましょう」という文言を追加することを含みます。単純な問題を試して、モデルがどのように機能するかを見てみましょう。
プロンプト:
私は市場に行って10個のリンゴを買いました。隣人に2つ、修理工に2つ渡しました。それから5つのリンゴを買って1つ食べました。残りは何個ですか?
出力:
11個のリンゴ
答えは不正解です!それでは、特別なプロンプトで試してみましょう。
プロンプト:
私は市場に行って10個のリンゴを買いました。隣人に2つ、修理工に2つ渡しました。それから5つのリンゴを買って1つ食べました。残りは何個ですか?ステップバイステップで考えてみましょう。
出力:
最初に、10個のリンゴから始めました。隣人と修理工に合わせて、リンゴを2つずつ渡し、残りは6個になりました。次に、5つのリンゴを買い、11個になりました。最後に、1つのリンゴを食べたため、残りは10個になります。
この単純なプロンプトがこのタスクで効果的であることは驚くべきことです。これは、プロンプトに使用できる例があまりない場合に特に有用です。
Self-Consistency(自己整合性)
プロンプトエンジニアリングのより高度な技術の1つであるSelf-Consistency(自己整合性)は、Wang et al. (2022)(opens in a new tab)によって提唱され、「連想思考プロンプティングで使用される単純な貪欲復号化を置き換えることを目的としています」と述べています。アイデアは、few-shot CoTを通じて複数の多様な推論パスをサンプリングし、生成物を使用して最も整合的な回答を選択することです。これにより、算術および常識的推論を必要とするタスクにおけるCoTプロンプティングのパフォーマンスが向上します。
算術的推論のための次の例を試してみましょう。
プロンプト:
私が6歳のとき、妹は私の半分の年齢でした。今、私は70歳です。私の妹は何歳ですか?
出力:
35
出力が間違っています!自己整合性を使ってこれを改善するにはどうすればよいでしょうか?それでは、Wang et al. 2022(表17)のfew-shotエグザンプラーを使用してみましょう。
プロンプト:
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:
出力1:
私が6歳のとき、私の妹は私の半分の年齢であったため、彼女は3歳でした。今、私が70歳であるため、彼女は70-3 = 67歳です。回答は67です。
出力2:
語り手が6歳のとき、彼の妹は彼の半分の年齢である3歳でした。語り手が70歳である今、彼の妹は70-3 = 67歳になるでしょう。回答は67です。
出力3:
私が6歳のとき、私の妹は私の半分の年齢だったので、彼女は3歳でした。今、私は70歳なので、彼女は70/2=35歳です。答えは35です。
最終的な答えを計算するにはいくつかのステップが必要です(詳細については論文をチェックしてください)。しかし、簡単のために、既に多数派の回答が出ているので、それが本質的に最終的な回答になります。
LLMは引き続き改良されており、より正確な予測を行うために知識や情報を組み込む能力を持つことが一般的なテクニックの1つです。
同様の考え方を使用して、モデルを使用して予測を行う前に知識を生成することもできますか? それがLiu et al. 2022(opens in a new tab)の論文で試みられていることです。つまり、共通の理解推論などのタスクにおいて、これがどの程度役立つでしょうか?
単純なプロンプトを試してみましょう。
プロンプト:
ゴルフの一部は、他の人よりも高いポイント総数を得ようとすることです。「はい」か「いいえ」か?
出力:
はい。
この種の間違いは、より多くの世界の知識を必要とするタスクを実行するためのLLMの制限を示しています。これをどのように知識生成で改善するとよいでしょう?
最初に、いくつかの「知識」を生成します。
プロンプト:
入力:ギリシャはメキシコよりも大きい。知識:ギリシャは約131,957平方キロメートルであり、メキシコは約1,964,375平方キロメートルであり、メキシコはギリシャよりも1,389%大きい。入力:眼鏡は常に曇ります。知識:冷たい表面に汗、呼気、および周囲の湿度から水蒸気が着陸し、冷却されて液体の微小な滴に変化して、あなたが霧として見るフィルムを形成すると、眼鏡レンズに結露が生じます。あなたのレンズは、特に外気が寒い場合、あなたの呼気に比べて比較的冷たくなります。入力:魚は考えることができる。知識:魚は出現よりも知能が高い。記憶などの多くの分野で、魚の認知能力は、非人間の霊長類を含む「より高い」脊椎動物と同等またはそれ以上です。魚の長期記憶は、彼らが複雑な社会的関係を追跡するのを助けます。入力:一生にたくさんのタバコを吸うことの共通の影響の1つは、肺がんの発生率が高くなることです。知識:生涯にわたり平均して1日に1本未満のタバコを吸った人は、非喫煙者に比べて肺がんで死亡するリスクが9倍高かった。一日あたり1〜10本のタバコを吸った人の中で、肺がんで死亡するリスクは、非喫煙者の約12倍高かった。入力:岩と小石は同じ大きさです。知識:小石は、堆積学のUdden-Wentworthスケールに基づく4〜64ミリメートルの粒子サイズを持つ岩塊です。小石は、一般的に粒度(直径2〜4ミリメートル)よりも大きく、コブル(直径64〜256ミリメートル)よりも小さいと見なされます。入力:ゴルフの一部は、他の人よりも高いポイント総数を得ようとすることです。知識:
知識1:
ゴルフの目的は、できるだけ少ない打数で一連のホールをプレイすることです。通常、ゴルフのラウンドは18ホールで構成されます。1回のホールは、標準のゴルフコースに1回プレイされます。各打数は1ポイントとしてカウントされ、総打数がゲームの勝者を決定するために使用されます。
知識2:
ゴルフは、競技者(またはゴルファー)が多種多様なクラブを使用して、できるだけ少ない打数でコースの一連のホールにボールを打ち込む精密なクラブ&ボールスポーツです。目標は、各ホールでの総打数を合計した最低スコアでコースを完走することです。最低スコアを出したプレイヤーがゲームに勝ちます。
Liu et al. 2022(opens in a new tab)の論文で提供されたプロンプトを使用しています。
次のステップは、知識を統合して予測を得ることです。回答形式に質問を再フォーマットしました。
プロンプト:
質問:ゴルフの一部は、他の人よりも高いポイント総数を得ようとすることです。「はい」か「いいえ」?知識:ゴルフの目的は、できるだけ少ない打数で一連のホールをプレイすることです。通常、ゴルフのラウンドは18ホールで構成されます。1回のホールは、標準のゴルフコースに1回プレイされます。各打数は1ポイントとしてカウントされ、総打数がゲームの勝者を決定するために使用されます。説明と回答:
回答1(自信が非常に高い):
いいえ、ゴルフの目的は他の人よりも高いポイント総数を得ることではありません。むしろ、目的はできるだけ少ない打数で一連のホールをプレイすることです。総打数がゲームの勝者を決定するために使用されますが、ポイントの総数ではありません。
質問:ゴルフの一部は、他の人よりも高い得点を取ることです。「はい」か「いいえ」か?知識:ゴルフは、競技者(またはゴルファー)が多種多様なクラブを使用して、できるだけ少ない打数でコースの一連のホールにボールを打ち込む精密なクラブアンドボールのスポーツです。目標は、各ホールで打たれた総打数を合計して計算される最低スコアでコースを完了することです。最低スコアを出したプレイヤーが勝利します。説明と回答:
回答2(自信はかなり低い):
はい、ゴルフの一部は、他の人よりも高い得点を取ることです。各プレイヤーは、各ホールで打たれた総打数を合計して計算される最低スコアでコースを完了しようとします。最低スコアを出したプレイヤーが勝利します。
この例では、非常に興味深いことが起こりました。最初の回答では、モデルは非常に自信を持っていましたが、2番目ではそうではありませんでした。デモンストレーションの目的でプロセスを簡素化していますが、最終的な回答に到達する際に考慮すべき詳細がいくつかあります。詳細については、論文をご覧ください。
自動プロンプトエンジニア(APE)
画像出典:Zhou et al.,(2022年)(opens in a new tab)
Zhou et al.,(2022年)(opens in a new tab)は、自動指示生成と選択のためのフレームワークである自動プロンプトエンジニア(APE)を提案しています。指示生成問題は、LVMを使用して候補解を生成して検索することで、ブラックボックス最適化問題としてアドレスされる自然言語合成としてフレームされます。
最初のステップは、タスクのための指示候補を生成する推論モデルとしての大規模言語モデルを使用することです。これらの候補解は、検索手順を指導します。指示はターゲットモデルを使用して実行され、計算された評価スコアに基づいて最適な指示が選択されます。
APEは、人間が設計した「一緒にステップバイステップで考えてみましょう」というプロンプトよりも優れたゼロショットCoTプロンプトを発見しました(Kojima et al.、2022(opens in a new tab))。
「正しい答えを得るために、ステップバイステップで考えてみましょう。」のプロンプトは、思考の連鎖を引き起こし、MultiArithおよびGSM8Kベンチマークのパフォーマンスを向上させます。
画像出典:Zhou et al.,(2022年)(opens in a new tab)
この論文は、プロンプトエンジニアリングに関連する重要なトピックに触れており、プロンプトを自動的に最適化するアイデアが含まれています。このガイドではこのトピックについて深く掘り下げませんが、興味がある場合は、以下のいくつかの主要な論文をご紹介します。
AutoPrompt(opens in a new tab) - 勾配誘導型の検索に基づいて、多様なタスクのためのプロンプトを自動的に作成するアプローチを提案します。
Prefix Tuning(opens in a new tab) - NLGタスクのためのトレーニング可能な連続プレフィックスを前置する、ファインチューニングの軽量な代替案です。
Prompt Tuning(opens in a new tab) - 逆伝播を通じてソフトプロンプトを学習するメカニズムを提案します。
アクティブプロンプト
Active-Prompt
Chain-of-thought (CoT)メソッドは、固定された人間による注釈付きの例のセットに依存しています。これには、例が異なるタスクに対して最も効果的なものでない可能性があるという問題があります。Diaoら(2023)(opens in a new tab)は、最近、異なるタスク固有の例のプロンプト(人間によるCoT推論で注釈付けされたもの)に適応するための新しいプロンプトアプローチであるActive-Promptを提案しました。
以下は、このアプローチの概要図です。最初のステップは、LLMに対してCoT例をいくつか含めて問い合わせます。一連のトレーニング質問に対して、k個の可能な回答が生成されます。k個の回答に基づいて不確実性メトリックが計算されます(不一致を使用)。最も不確実な質問が人間によって注釈付けされます。新しい注釈付きの例は、それぞれの質問の推論に使用されます。
Image Source: Diao et al., (2023)
ref