Re Reference AI

技術

Few-shotとは

少数事例学習 / Few-shot Learning

プロンプト内にタスクの入力・出力例をいくつか示すことで、追加学習なしにLLMへ望む出力形式を伝える手法

プロンプトエンジニアリング入力設計

ひとことで言うと

質問の中にお手本となる例をいくつか示すことで、AIに望む答え方を伝える方法。

概要

Few-shot(少数事例学習)とは、LLMに与えるプロンプトの中に、タスクの入力と望ましい出力の組を数個(通常2〜数十個程度)例として含めることで、モデルの重みを更新することなくタスクの形式やパターンを伝える手法。 1つも例を示さない指示のみのZero-shotに対し、Few-shotは具体例を示すことで出力フォーマットや期待する粒度をモデルへ明示できる点が異なる。 分類タスクの入出力例を示す、期待するJSON構造のサンプルを示す、といった用途で広く使われる。

背景

LLMに新しいタスクをファインチューニング(追加学習)なしで実行させたい場面で、指示文だけでは出力の形式や粒度が意図通りにならないことがあった。 Few-shotは、プロンプト内へ具体的な入出力例を示すことで、モデルが学習済みの知識から該当パターンを推論時に呼び出せるよう使われる。

歴史

2020年: BrownらがGPT-3の論文「Language Models are Few-Shot Learners」において、大規模言語モデルファインチューニングなしにプロンプト内の少数の例から新しいタスクを実行できることを示し、Few-shotという呼称が広く定着した。

ワークフロー

タスクの入力と望ましい出力の組を数個用意 → プロンプトの冒頭または指示部分にこれらの例を含める → 実際に解かせたい入力を末尾に続けて渡す → モデルが例のパターンに沿って出力を生成。

コード例

Few-shotプロンプトの例

prompt = """
以下の例にならって、文章の感情を「positive」か「negative」で分類してください。

文章: 最高の一日だった
感情: positive

文章: 最悪な結果になった
感情: negative

文章: 今日は普通の日だったが、少し嬉しいこともあった
感情:"""

利点

  • モデルの重みを更新するファインチューニングと異なり、プロンプトを書き換えるだけですぐに試せる
  • 出力の形式や粒度を具体例で示せるため、指示文だけでは伝わりにくいニュアンスを伝えやすい
  • タスクごとに専用モデルを用意せず、同じモデルへ渡す例を変えるだけで多様なタスクへ対応できる

欠点

  • 例を含めるためプロンプトが長くなり、入力トークン数の増加によるコスト・レイテンシの増加を招く
  • 示す例の選び方や順序によって出力は偏ることがあり、例の質が結果を左右する
  • モデルやタスクによっては、例を示さないZero-shotと比べて必ずしも性能が向上するとは限らない

比較

  • Chain-of-ThoughtFew-shotが入出力例を示すのに対し、Chain-of-ThoughtのFew-shot版は例の中に推論過程も含めて示す点が異なる
  • ファインチューニングFew-shotがプロンプト内の例のみで挙動を調整するのに対し、ファインチューニングはモデルの重み自体を追加学習で更新する
  • プロンプトエンジニアリングFew-shotは、プロンプトエンジニアリングにおける代表的な手法の1つ

関連用語

プロンプトエンジニアリングChain-of-ThoughtファインチューニングコンテキストウィンドウZero-shotSelf-ConsistencyIn-Context Learning

よくある質問

Few-shotで示す例の数はいくつが最適?

タスクの複雑さやプロンプトの長さ制約によって異なり、一般的には2〜数十個程度が使われる。 例を増やすほどコストも増えるため、必要最小限の例で望む出力が得られるかを検証しながら調整することが多い。

Zero-shotとFew-shotはどちらを使うべき?

モデルが既にタスクの形式を理解できる場合はZero-shotで十分なことも多く、出力の形式や粒度を細かく制御したい場合にFew-shotが有効とされる。 どちらが優れているかはモデルやタスクによって異なるため、実際に比較検証することが望ましい。

参考文献

関連Zenn記事