# Few-Shotプロンプティング

大規模言語モデルは、驚くべきゼロショット能力を示していますが、ゼロショット設定を使用した場合には、より複雑なタスクで不十分になることがあります。Few-shot promptingは、プロンプト内のデモを提供してモデルをより高い性能に導く文脈学習を可能にするテクニックとして使用できます。このデモンストレーションは、その後のモデルに反応を起こさせる例のための条件付けとなります。

[ブラウンら（2020）](https://arxiv.org/abs/2005.14165)で提示された例を用いて、few-shot promptingを実証してみましょう。この例では、新しい単語を文で正しく使用することが課題となっています。

*プロンプト:*
```
「whatpu」とはタンザニア固有の小さくて毛皮のある動物です。 「whatpu」という言葉を使った文の例は次のとおりです。
私たちはアフリカを旅行して、これらのとてもかわいいwhatpusを見ました。
「farduddle」というのは、とても速く上下にジャンプすることを意味します。 「farduddle」という言葉を使用した文の例は次のとおりです。
```

*出力:*
```
私たちは試合に勝ったとき、みんなfarduddleをして祝いました。
```

1つの例（1ショット）を提供するだけで、モデルが課題を実行する方法を学習したことがわかります。より困難なタスクでは、デモを増やして実験することができます（例：3ショット、5ショット、10ショットなど）。

[Minら（2022）](https://arxiv.org/abs/2202.12837)の研究結果に基づいて、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という人気のあるプロンプティング技術について話します。