1.1 定義と概要
Few-shot promptingは、大規模言語モデル(LLM)に対して、タスクの実行方法を示す少数の入力-出力例(デモンストレーション)をプロンプト内に含めることで、明示的な再学習なしに新しいタスクを遂行させる技術である。プロンプトの末尾に評価対象の入力を配置し、モデルが与えられた例のパターンを模倣して出力を生成する。例の数は通常2つから数十個程度であり、zero-shot prompting(例示なし)と比較して、特に複雑な推論や特殊なフォーマットが要求されるタスクで顕著な性能向上を示す。この手法は2020年代初頭に大規模言語モデルの発展とともに広く普及し、現在では多くのアプリケーションで基本的なプロンプト設計手法として使用されている。
1.2 Zero-shot・One-shot・Few-shotの関係
Zero-shot promptingは、プロンプトに例を含めず、タスクの説明のみでモデルに出力を求める手法である。One-shot promptingは1つの例のみを提供し、Few-shot promptingは複数の例(通常2~10個程度)を提供する。一般に、例の数が増えるほどモデルのタスク理解度が向上し、出力の一貫性と正確性が高まる。ただし、例の数が多すぎるとプロンプトの長さが増加し、トークン消費やモデルの注意散漫につながるため、最適な例数はタスクやモデルサイズに依存する。Zero-shotが最も簡単でコストが低い一方、Few-shotはより高いパフォーマンスを期待できる中間的なアプローチとして位置づけられる。
1.3 コンテキスト内学習のメカニズム
コンテキスト内学習(in-context learning)は、モデルがプロンプト内の例からタスクのパターンを抽出し、パラメータを更新せずに即座に適応する現象である。このメカニズムは、モデルが事前学習中に膨大なテキストから「類似例に従って出力を生成する」というメタ学習能力を獲得したことに起因する。具体的には、プロンプト内の例がモデルの注意機構を通じて「適切な出力形式」や「入力と出力の対応関係」を暗示し、評価対象の入力に対しても同様の変換を適用する。研究により、例の中のラベルやフォーマットだけでなく、例間の連続性も学習に寄与することが示されている。モデルパラメータが変更されないため、推論コストが低く、新しいタスクに即座に対応できる利点がある。
2.1 効果的な例の選択基準
Few-shot promptingの性能は、選択する例の質に大きく依存する。適切な例は、タスクの本質を代表し、モデルが容易に一般化できるパターンを示すものでなければならない。例の選択に際しては、以下の基準が重要となる。
2.1.1 ラベルバランスと多様性
分類タスクなどでは、各クラスからほぼ同数の例を選ぶことでラベルバランスを保つ。偏った例セットはモデルに誤った事前確率を与え、特定のクラスへの過剰適合を引き起こす。また、入力の多様性(文体、長さ、トピックのバリエーション)を確保することで、モデルが幅広い入力に対応できるようになる。例えば感情分析では、肯定的・否定的・中立の各感情を均等に含め、さらに簡潔な文と複雑な文を混在させると汎化性能が向上する。
2.1.2 入力-出力フォーマットの一貫性
すべての例において、入力の構造と出力の形式を統一する必要がある。例えば、質問応答タスクでは「質問: ...\n回答: ...」というテンプレートを全例で厳守する。フォーマットが不統一だとモデルがパターンを認識できず、出力のフォーマット崩れが生じやすくなる。また、出力に改行や特殊記号が必要な場合は、例でもそれを明示的に示す。一貫性を高めるため、プロンプトテンプレートを事前に定義し、自動生成することが推奨される。
2.2 例の順序と配置の影響
プロンプト内での例の並び順は、モデルの出力に影響を与える。一般に、最新の例(評価対象に近い例)ほど強い影響力を持つことが知られている。そのため、重要なパターンや代表的な例をプロンプトの末尾に配置すると効果的である。また、類似した入力を持つ例を連続して配置すると、そのパターンが強調される一方、多様な例を均等に分散させることで全体的なバランスが取れる。実験的には、ランダムな順序よりも、類似度や難易度に基づいてソートした順序の方が性能が安定する傾向がある。配置を固定する場合は、複数の順序を試して最も良いものを採用する。
2.3 例数の最適化(k-shotのk値設定)
k-shotにおけるkの値は、タスクの複雑さやモデルの能力に応じて調整する。簡単なタスク(基本的なテキスト分類など)では2~4個の例で十分な場合が多いが、複雑な推論や特殊なフォーマット(コード生成、数学問題)では6~10個程度が必要となる。ただし、kを増やしすぎると、プロンプトが長くなりトークン消費が増加するだけでなく、モデルが不要なノイズに影響されるリスクも高まる。また、モデルが大規模であるほど多くの例を活用できるが、小規模モデルでは限られた例数で頭打ちになる。実践的には、少数の例(2, 4, 8)を試しながら性能を評価し、最も良いk値を選択するグリッドサーチが有効である。
3.1 テキスト分類と感情分析
Few-shot promptingは、テキスト分類タスクで広く利用される。例えば、映画レビューの感情分析では、肯定的なレビューと否定的なレビューの例をそれぞれ2~3個与えることで、未見のレビューに対する正確な分類が可能になる。ラベルバランスを保ち、各例に「ポジティブ」または「ネガティブ」というラベルを明示することで、モデルは新たな入力に対しても同様のラベルを出力する。ニュース記事のカテゴリ分類(政治、経済、スポーツなど)や、カスタマーレビューの評判分析にも応用される。従来のファインチューニングに比べ、ラベル付きデータが少なくても即座に導入できる利点がある。
3.2 機械翻訳と多言語タスク
機械翻訳において、少数の対訳例を与えることで、モデルが翻訳スタイルやドメインに適応できる。例えば、医療文書の翻訳では、医療用語を含む原文とその訳文のペアを数個提示することで、専門的な翻訳品質が向上する。また、低リソース言語への翻訳では、zero-shotよりもfew-shotの方が大幅に精度が高い。さらに、複数の言語対を混在させることで、多言語間の翻訳を同時に学習させることも可能である。プロンプト内の例は「英語: ...\n日本語: ...」のようにフォーマットを統一し、末尾に目的の言語対を配置する。
3.3 コード生成と数理推論
コード生成タスクでは、入力(自然言語の要求)と出力(コード)の例を数個与えることで、特定のプログラミング言語やライブラリに合わせたコードを生成できる。例えば、Pythonのリスト操作を例示することで、同様の操作を別のデータに対して適用する。数理推論では、問題文と解答手順を示す例を用いることで、モデルが複数ステップの計算を正確に実行できるようになる。Chain-of-Thoughtと組み合わせるとさらに効果的であり、例の中に「ステップ1: ... ステップ2: ... 答え: ...」という形式を含めることが多い。
3.4 医療・法律などの専門分野への適応
医療分野では、症例報告の要約や診断支援、薬剤情報の抽出などにfew-shot promptingが利用される。例えば、患者の症状記述から疾患名を予測するタスクでは、過去の症例と診断結果のペアを例として与える。法律分野では、契約書の条項解釈や判例の分類に応用される。専門用語や特有のフォーマットが存在するため、例にはそれらを反映させることが重要である。また、ドメイン特化の事前学習モデルと組み合わせることで、より高い精度が得られる。ただし、専門知識の誤解釈によるリスクを避けるため、出力の検証は必須である。
4.1 例に対する過敏性とバイアス
Few-shot promptingは、選択した例に強く依存するため、例が偏っているとモデルの出力も偏る。例えば、特定の属性(性別、年齢、地域)に関する例のみを与えると、その属性に過剰に適合した応答を生成する。また、例の順序が変わると出力が変わる不安定性も確認されている。さらに、モデルが例の表面的なパターン(ラベルの分布など)に引きずられ、真のタスク理解が損なわれる場合がある。この問題を軽減するには、多様でバランスの取れた例セットを構築し、複数の順序でテストすることが推奨される。
4.2 長いプロンプトによるトークン消費
Few-shot promptingでは、プロンプト内に多数の例を含めるため、トークン消費量が増加する。特に、例が長文である場合やk値を大きくした場合、モデルのコンテキストウィンドウを圧迫する可能性がある。コンテキストウィンドウを超えると、古い例が切り捨てられ、学習効果が低下する。また、APIベースのモデルではトークン数に応じた課金が発生するため、コスト面でも制約となる。この課題に対しては、例を短く要約する、類似例のみを動的に選択するなどの対策が取られる。
4.3 複雑な多段階推論への非対応
Few-shot promptingは、単純な変換や分類タスクには有効だが、複雑な多段階推論(数学の証明問題、因果推論、長期計画など)では性能が頭打ちになる。例から推論の手順を完全に学習することが難しく、特に中間ステップで誤った推論が生じやすい。また、複数の例が互いに矛盾する場合、モデルは混乱する。この限界を克服するため、Chain-of-Thought(思考連鎖)や自己無撞着性(self-consistency)などの手法が併用されることが多い。
5.1 動的 few-shot 選択(例: K-NNベース)
従来の固定例セットに代わり、評価対象の入力に応じて例を動的に選択する手法が提案されている。代表的なものとして、K-Nearest Neighbors(K-NN)を用いて、埋め込み空間で類似した事例をプロンプトに追加する方法がある。これにより、入力に特化した例が提供され、汎化性能が向上する。また、データベースから例を取得する方法や、モデル自身に最適な例を生成させる手法も研究されている。動的選択は、大規模な例プールを保持する必要があるが、少数の静的例よりも高い精度を達成できる場合が多い。
5.2 Chain-of-Thoughtとの融合
Chain-of-Thought (CoT) は、Few-shot promptingの例に中間的な推論ステップを含める手法である。これにより、モデルが複雑な問題を段階的に解決できるようになり、特に算数・数学問題や常識推論タスクで大きな性能向上が見られた。典型的なCoT few-shotでは、各例に「思考: ... 答え: ...」という形式を採用する。さらに、複数の推論経路を生成し、多数決で最終答えを決める自己無撞着性(self-consistency)も広く用いられている。CoTの導入により、few-shot promptingの適用範囲が飛躍的に拡大した。
5.3 ラベルなし few-shot と自己生成例
ラベルなしのfew-shot promptingは、ラベル付き例が入手困難な状況で有用である。モデル自身がラベルなしデータに対して擬似ラベルを生成し、それを例として利用する手法が提案されている。また、モデルに「あなた自身で例を作成しなさい」と指示することで、タスクに適した例を自己生成させる方法もある。これにより、人間のアノテーションコストを削減しつつ、few-shotの効果を得ることが可能になる。ただし、生成された例の品質を保証するため、フィルタリングや検証の仕組みが必要である。