ゼロショット学習とフューショット学習
この記事では、主なユース ケースを含め、.NET でのプロンプト エンジニアリングのためのゼロショット学習とフューショット学習について説明します。
GPT モデルのパフォーマンスは、プロンプト エンジニアリング (モデルに指示と例を提供して出力を洗練させる方法) によってメリットを得られます。 ゼロショット学習とフューショット学習は、例を提供するときに使用できる手法です。
ゼロショット学習では、プロンプトは含めますが、逐語的な入力候補は含まれません。 キューのみで構成される入力候補を含めることができます。ゼロショット学習は、モデルの既存の知識に完全に依存して応答を生成するため、トークンの作成数が減り、コスト管理に役立ちます。 ただし、ゼロショット学習はモデルの知識に追加されません。
次に示すゼロショット プロンプトの例は、ユーザー入力を評価して、その入力が 4 つの意図のうちどれを表現しているかを決定し、その応答の前に "Intent: "を付けるようにモデルに指示するものです。
prompt = $"""
Instructions: What is the intent of this request?
If you don't know the intent, don't guess; instead respond with "Unknown".
Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown.
User Input: {request}
Intent:
""";
フューショット学習では、プロンプトを逐語的な入力候補と組み合わせて含めます。 ゼロショット学習と比較すると、フューショット学習はより多くのトークンを生成し、モデルの知識を更新させることを意味します。そのため、フューショット学習はより多くのリソースを消費する可能性があります。 ただし、同じ理由から、フューショット学習は、モデルがより関連性の高い応答を生成するのにも役立ちます。
prompt = $"""
Instructions: What is the intent of this request?
If you don't know the intent, don't guess; instead respond with "Unknown".
Choices: SendEmail, SendMessage, CompleteTask, CreateDocument, Unknown.
User Input: Can you send a very quick approval to the marketing team?
Intent: SendMessage
User Input: Can you send the full update to the marketing team?
Intent: SendEmail
User Input: {request}
Intent:
""";
ゼロショット学習のユース ケース
ゼロショット学習は、プロンプトと逐語的な入力候補を組み合わせていないプロンプトを渡す方法ですが、キューと組み合わせることができます。 ゼロショット学習には、主に次の 2 つのユース ケースがあります。
- 微調整された LLM の操作 - モデルの既存の知識に依存しているため、ゼロショット学習は、フューショット学習ほどリソースを集中的に消費しません。また、既に命令データセットで微調整された LLM でも適切に機能します。 ゼロショット学習のみに依存すると、コストを比較的低く抑えることができます。
- パフォーマンス ベースラインの確立 - ゼロショット学習は、実際のユーザーに対するアプリのパフォーマンスをシミュレートするのに役立ちます。 これにより、正確性や精度など、モデルの現在のパフォーマンスのさまざまな側面から評価できます。 この場合、通常はゼロショット学習を使用してパフォーマンス ベースラインを確立し、パフォーマンスを向上させるためにフューショット学習を試します。
フューショット学習のユース ケース
フューショット学習は、応答方法をモデルに示すために、逐語的な入力候補 (フューショット プロンプト) と組み合わせてプロンプトを渡す方法です。 ゼロショット学習とは異なり、フューショット学習はモデルの知識を増やすことができます。 独自のデータセットを使用して、取得拡張生成を実行することで、フューショット プロンプトを自動的に生成することもできます。
フューショット学習には、主に次の 2 つのユース ケースがあります。
- LLM のチューニング - モデルの知識を増やすことができるため、フューショット学習はモデルのパフォーマンスを向上させることができます。 また、モデルはゼロショット学習よりも多くのトークンを作成します。そのため、最終的に非常に高価になったり、実行不可能になる可能性さえあります。 ただし、LLM がまだ微調整されていない場合は、ゼロショット プロンプトで適切なパフォーマンスが得られないので、フューショット学習が必要となります。
- パフォーマンスの問題の修正 - ゼロショット学習に続いて、フューショット学習を使用できます。 この場合、ゼロショット学習を使用してパフォーマンス ベースラインを確立し、その後、使用したゼロショット プロンプトに基づいてフューショット学習を試します。 これにより、モデルの現在の応答を確認した後にモデルの知識を追加できるため、導入するトークンの数を最小限に抑えながら、反復してパフォーマンスを向上させることができます。
注意事項
- 例ベースの学習は、複雑な推論タスクではうまく機能しません。 ただし、指示を追加すると、この問題に対処するのに役立ちます。
- フューショット学習では、長いプロンプトを作成する必要があります。 トークンの数が多いプロンプトでは、計算と待機時間が長くなる可能性があります。 これは通常、コストの増加を意味します。 また、プロンプトの長さには制限もあります。
- 複数の例を使用すると、モデルは「センチメントは、ネガティブなものよりもポジティブなものの方が 2 倍多い」などの誤ったパターンを学習してしまいます。
関連するコンテンツ
.NET