プロンプト設計戦略

プロンプト設計により、機械学習(ML)制御モデルの出力を初めて利用するユーザーでも、オーバーヘッドを最小限に抑えられます。プロンプトを慎重に作成することで、目的の結果を生成するようにモデルを調整できます。プロンプト設計は、特定のユースケースに合わせて言語モデルを適応させることをテストする効率的な方法です。

言語モデル、特に大規模言語モデル(LLM)は、単語間のパターンと関係を学習するために、膨大なテキストデータでトレーニングされています。テキスト(プロンプト)を受け取った言語モデルは、高度なオートコンプリート ツールのように、次に来ると思われるものを予測できます。したがって、プロンプトを設計する際は、モデルによる次の予測に影響を与える可能性のあるさまざまな要因を考慮してください。

プロンプトの設計に正しい方法や間違った方法はありませんが、モデルのレスポンスに影響を与えるために使用できる一般的な戦略があります。このセクションでは、一般的なプロンプト設計戦略について紹介します。

明確な指示を出す

モデルに指示を与えるということは、何をすべきかをモデルに伝えるということです。この戦略によって、モデルの動作を効果的にカスタマイズできます。指示は明確かつ簡潔にしてください。

次のプロンプトは、テキスト ブロックを示し、モデルにそれを要約するように指示します。

モデルは簡潔なサマリーを提示しましたが、より理解しやすい方法でサマリーが記述されることを必要とする場合も考えられます。たとえば、次のプロンプトには、小学 5 年生が理解できる程度にシンプルな要約を書くよう求める指示が含まれています。

小学 5 年生が理解できるように要約を書くように指示することで、理解しやすいレスポンスになりました。

概要

  • モデルに、動作をカスタマイズするよう求める指示を与えます。
  • 各手順を明確かつ簡潔なものにします。

例を含める

プロンプトに、モデルに対して望ましい動作を示す例を含めることができます。モデルは、これらの例からパターンと関係を特定し、それらを適用してレスポンスを作成することを試みます。いくつかの例を含むプロンプトは少数ショット プロンプトと呼ばれ、例を示さないプロンプトはゼロショット プロンプトと呼ばれます。 少数ショット プロンプトは、モデルのレスポンスのフォーマット、フレーズ、範囲、一般的なパターンの設定を規制するために頻繁に使用されます。

ゼロショット プロンプトと少数ショット プロンプト

次のゼロショット プロンプトでは、モデルに最良の説明を選択するよう求めます。

ユースケースでモデルが簡潔なレスポンスを生成する必要がある場合は、簡潔なレスポンスを優先する例をプロンプトに含めることができます。

次のプロンプトでは、短い説明を優先する例を 2 つ示します。レスポンスでは、前の例のような長い説明(説明 1)ではなく、短い説明(説明 2)を選択するように例がモデルをガイドしたことがわかります。

最適なサンプル数を求める

最も望ましい結果が得られるように、プロンプトに表示するサンプルの数をテストできます。PaLM のようなモデルでは、多くの場合、いくつかの例を使用してパターンを検出できますが、望ましい結果につながる例の数をテストすることが必要な場合があります。BERT などの単純なモデルでは、さらに多くの例が必要になる場合があります。同時に、過剰に多くの例を追加すると、モデルが例に対するレスポンスを過学習し始める可能性があります。

例を使用してアンチパターンではなくパターンを示す

例を使用して、従うべきパターンをモデルに示すほうが、回避すべきアンチパターンを例で示すよりも効果的です。

ネガティブ パターン:

ポジティブ パターン:

概要

  • プロンプトにプロンプト - レスポンスの例を含めると、モデルが応答方法を学習するのを支援できます。
  • 回避するべきパターンの例ではなく、従うべきパターンの例をモデルに示します。
  • 表示するプロンプトの数を試してみましょう。モデルによっては、例が過小であるとモデルの動作を変更する際に効果がありません。サンプルが過多の状態は、モデルが過学習する原因となります。

モデルに部分的な入力を任せる

生成言語モデルは、高度なオートコンプリート ツールのように機能します。部分的なコンテンツを提供すると、モデルは残りのコンテンツ、またはコンテンツの継続として認識したコンテンツをレスポンスとして提供できます。その場合、例やコンテキストを含めると、モデルはそれらの例やコンテキストを考慮できます。

次の例は、指示とエンティティ入力を含むプロンプトを示しています。

モデルはプロンプトに従って動作しましたが、指示を自然言語で記述することは困難な場合があります。この場合、例とレスポンス接頭辞を指定して、モデルに完成させることができます。

「waffles」は有効なフィールドとしてコンテキストにリストされていないため、出力から除外されています。

レスポンスの書式設定をモデルに指示する

完了戦略は、レスポンスの書式設定にも活用できます。次の例では、小論文の概要を作成するようにモデルに指示しています。

プロンプトではアウトラインの形式は指定されておらず、モデルによって形式が選択されています。モデルが特定の形式でアウトラインを返すようにするには、アウトラインの始点を表すテキストを追加し、開始したパターンに基づいてモデルを完成させます。

概要

  • モデルに部分的な入力を与えると、モデルはプロンプトの利用可能な例やコンテキストに基づいて、入力を補完します。
  • モデルに入力を完成するよう求めるほうが、自然言語でタスクを記述するよりも簡単な場合があります。
  • プロンプトに部分的回答を追加すると、モデルが目的のパターンや形式に従うように誘導できます。

コンテキスト情報を追加する

モデルに必要な情報がすべて与えられていると仮定するのではなく、モデルが問題を解決するために必要な情報をプロンプトの手順と情報に含めることができます。

次の例では、モデルにルーターのトラブルシューティング ガイダンスを提供するよう求めています。

レスポンスは一般的なトラブルシューティング情報のように見えますが、ルーターや LED インジケーター ライトのステータスに固有のものではありません。

特定のルーターに関するレスポンスをカスタマイズするには、ルーターのトラブルシューティング ガイドを、レスポンスの提供時に参照するコンテキストとしてプロンプトに追加します。

概要

  • レスポンスの生成時にモデルが使用するように設定するプロンプトに情報(コンテキスト)を追加します。
  • 何をすべきかについてモデルに指示を与えます。

接頭辞を追加する

接頭辞は、プロンプト コンテンツに追加する単語またはフレーズであり、接頭辞を付加する場所に応じてさまざまな目的で使用できます。

  • 入力接頭辞: モデルへの入力の意味的に重要な部分である入力シグナルに接頭辞を追加します。たとえば、接頭辞「English:」と「French:」は 2 つの異なる言語を識別可能にします。
  • 出力接頭辞: 出力はモデルによって生成されますが、プロンプトで出力に接頭辞を追加できます。出力接頭辞は、レスポンスとして期待される内容に関する情報をモデルに与えます。たとえば、出力接頭辞「JSON:」は、出力を JSON 形式にする必要があることをモデルに伝えます。
  • 接頭辞の例: 少数ショット プロンプトでは、例に接頭辞を追加すると、モデルが出力の生成時に使用できるラベルが提供されます。これにより、出力内容の解析が容易になります。

次の例では、「Text:」が入力接頭辞であり、「The answer is:」が出力接頭辞です。

さまざまなパラメータ値を試す

モデルに送信する呼び出しの一つ一つに、モデルがどのようにレスポンスを生成するかを制御するパラメータ値が含まれています。このモデルは、パラメータ値によって異なる結果を生成できます。さまざまなパラメータ値を試して、タスクに最適な値を取得します。使用可能なパラメータはモデルによって異なる場合があります。最も一般的なパラメータは次のとおりです。

  • 最大出力トークン
  • 温度
  • トップ K
  • トップ P

最大出力トークン

レスポンスで生成できるトークンの最大数。1 トークンは約 4 文字です。100 トークンは約 60~80 語に相当します。

レスポンスを短くしたい場合は小さい値を、長くしたい場合は大きい値を指定します。

温度

温度は、レスポンス生成時のサンプリングに使用されます。レスポンスの生成は、topPtopK が適用された場合に行われます。温度は、トークン選択のランダム性の度合いを制御します。温度は低いほど、確定的で自由度や創造性を抑えたレスポンスが求められるプロンプトに適しています。一方、温度が高いと、より多様で創造的な結果を導くことができます。温度 0 は確定的であり、最も高い確率のレスポンスが常に選択されることを表します。

ほとんどのユースケースでは、温度 0.2 から始めてみることをおすすめします。モデルが返すレスポンスが一般的すぎたり、短すぎたり、フォールバック レスポンスが返ってきたりする場合は、温度を高くしてみてください。

トップ K

トップ K は、モデルが出力用にトークンを選択する方法を変更します。トップ K が 1 の場合、次に選択されるトークンは、モデルの語彙内のすべてのトークンで最も確率の高いものであることになります(グリーディ デコードとも呼ばれます)。トップ K が 3 の場合は、最も確率が高い上位 3 つのトークンから次のトークン選択されることになります(温度を使用します)。

トークン選択のそれぞれのステップで、最も高い確率を持つトップ K のトークンがサンプリングされます。その後、トークンはトップ P に基づいてさらにフィルタリングされ、最終的なトークンは温度サンプリングを用いて選択されます。

ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。トップ K のデフォルト値は 40 です。

トップ P

トップ P は、モデルが出力用にトークンを選択する方法を変更します。トークンは、確率の合計がトップ P 値に等しくなるまで、確率の高いもの(トップ K を参照)から低いものへと選択されます。たとえば、トークン A、B、C の確率が 0.3、0.2、0.1 であり、トップ P 値が 0.5 であるとします。この場合、モデルは温度を使用して A または B を次のトークンとして選択し、C は候補から除外します。

ランダムなレスポンスを減らしたい場合は小さい値を、ランダムなレスポンスを増やしたい場合は大きい値を指定します。トップ P のデフォルト値は 0.95 です。

プロンプトの反復処理に関する戦略

プロンプト設計は反復プロセスであり、多くの場合は、望ましいレスポンスを一貫して得られるようになるまでに何度か反復が必要になります。このセクションでは、プロンプトを反復処理する際に試すことができるいくつかのガイダンスについて説明します。

別の言い回しを使用する

プロンプトで異なる単語やフレーズを使用すると、すべて同じ意味であっても、多くの場合、モデルの応答は異なります。プロンプトから期待される結果が得られない場合は、言い換えてみてください。

似たタスクに切り替える

モデルに対してタスクの指示に従わせることができない場合は、同じ結果が得られる同様のタスクの指示を出してみてください。

このプロンプトは、事前定義されたカテゴリを使用して書籍を分類するようモデルに指示します。

レスポンスは正解ですが、モデルがオプションの境界内に収まっていません。また、完全な文ではなく、いずれかのオプションのみを使用して応答するようにモデル化する必要があります。この場合は、指示を多肢選択式の質問として言い換えて、モデルにオプションの選択を求めることができます。

プロンプトのコンテンツの順序を変更する

プロンプト内のコンテンツの順序がレスポンスに影響する場合があります。コンテンツの順序を変更して、レスポンスにどう影響するかを確認してみます。

Version 1:
[examples]
[context]
[input]

Version 2:
[input]
[examples]
[context]

Version 3:
[examples]
[input]
[context]

フォールバック レスポンス

フォールバック レスポンスは、プロンプトまたはレスポンスのいずれかが安全フィルタをトリガーした場合に、モデルが返すレスポンスです。フォールバック レスポンスの例としては、「私は言語モデルにすぎないため、それについては対応できません」が挙げられます。

モデルがフォールバック レスポンスを返す場合は、温度を上げてみてください。

非推奨事項

  • 事実に基づく情報の生成についてモデルに頼ることは回避してください。
  • 数学や論理の問題では慎重に使用してください。

次のステップ

  • プロンプト設計について理解を深めたところで、Google AI Studio を使用して独自のプロンプトを作成してみましょう。
  • マルチモーダル プロンプトの詳細を確認する。マルチモーダル コンセプトの概要をご覧ください。