# Few-Shot Prompting

Большие языковые модели продемонстрировали впечатляющие возможности zero-shot промптинга, однако они все еще ограничены в более сложных задачах при использовании zero-shot настроек. Few-shot промптинг может использоваться в качестве техники для обеспечения контекстного обучения, когда мы предоставляем демонстрации в запросе, чтобы направить модель на более высокую производительность. Демонстрации служат в качестве контекста для последующих примеров, в которых мы хотим, чтобы модель генерировала ответ.

Согласно исследованию [Touvron et al. 2023](https://arxiv.org/pdf/2302.13971.pdf), few-shot свойства впервые появились, когда модели были масштабированы до достаточного размера [(Kaplan et al., 2020)](https://arxiv.org/abs/2001.08361).

Давайте продемонстрируем few-shot на примере, представленном в [Brown et al. 2020](https://arxiv.org/abs/2005.14165). В данном примере задача состоит в правильном использовании нового слова в предложении.

*Запрос:*
```
A "whatpu" is a small, furry animal native to Tanzania. An example of a sentence that uses
the word whatpu is:
We were traveling in Africa and we saw these very cute whatpus.
To do a "farduddle" means to jump up and down really fast. An example of a sentence that uses
the word farduddle is:
```

*Результат:*
```
When we won the game, we all started to farduddle in celebration.
```

Мы можем наблюдать, что модель каким-то образом научилась выполнять задачу, предоставив ей всего один пример (так называемый 1-shot). Для более сложных задач мы можем экспериментировать с увеличением количества демонстраций (например, 3-shot, 5-shot, 10-shot и т. д.).

Следуя результатам исследования [Min et al. (2022)](https://arxiv.org/abs/2202.12837), вот несколько дополнительных советов о демонстрациях/примерах при использовании few-shot промптинга:

- "пространство меток и распределение входного текста, заданного демонстрациями, оба являются важными (независимо от того, являются ли метки правильными для отдельных входов)"
- формат, который вы используете, также играет ключевую роль в производительности. Даже если вы используете случайные метки, это гораздо лучше, чем отсутствие меток вообще.
- дополнительные результаты показывают, что выбор случайных меток из реального распределения меток (вместо равномерного распределения) также помогает.

Давайте попробуем несколько примеров. Давайте сначала попробуем пример со случайными метками (то есть метки "Negative" и "Positive" случайным образом присваиваются входным данным):

*Запрос:*
```
This is awesome! // Negative
This is bad! // Positive
Wow that movie was rad! // Positive
What a horrible show! //
```

*Результат:*
```
Negative
```

Мы все равно получаем правильный ответ, даже если метки были случайно выбраны. Обратите внимание, что мы также сохраняем формат, что также полезно. Фактически, с дальнейшими экспериментами, кажется, что новые модели GPT, с которыми мы экспериментируем, становятся более устойчивыми даже к случайным форматам. Например:

*Запрос:*
```
Positive This is awesome! 
This is bad! Negative
Wow that movie was rad!
Positive
What a horrible show! --
```

*Результат:*
```
Negative
```

В данном случае нет последовательности формата, но модель все равно предсказала правильную метку. Однако нам нужно провести более подробный анализ, чтобы убедиться, что это справедливо для различных и более сложных задач, включая различные вариации запросов.

### Ограничения few-shot промптинга

Стандартный few-shot промптинг хорошо работает для многих задач, но это все еще несовершенная техника, особенно при работе с более сложными задачами рассуждения. Давайте продемонстрируем, почему это так. Вы помните предыдущий пример, в котором мы предложили следующую задачу:

```
The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. 

A: 
```

Если мы повторим этот пример, модель выводит следующее:

```
Yes, the odd numbers in this group add up to 107, which is an even number.
```

Это неправильный ответ, что подчеркивает ограничения таких систем и необходимость более продвинутой техники формулировки запросов.

Давайте попробуем добавить несколько примеров, чтобы посмотреть, улучшит ли few-shot промптингрезультаты.

*Запрос:*
```
The odd numbers in this group add up to an even number: 4, 8, 9, 15, 12, 2, 1.
A: The answer is False.

The odd numbers in this group add up to an even number: 17,  10, 19, 4, 8, 12, 24.
A: The answer is True.

The odd numbers in this group add up to an even number: 16,  11, 14, 4, 8, 13, 24.
A: The answer is True.

The odd numbers in this group add up to an even number: 17,  9, 10, 12, 13, 4, 2.
A: The answer is False.

The odd numbers in this group add up to an even number: 15, 32, 5, 13, 82, 7, 1. 
A: 
```

*Результат:*
```
The answer is True.
```

Это не сработало. Кажется, что few-shot промптинга недостаточно для получения надежных ответов на этот тип задач рассуждения. Приведенный выше пример предоставляет базовую информацию о задаче. Если взглянуть поближе, то задача, которую мы представили, включает несколько более сложных шагов рассуждения. Другими словами, возможно, будет полезно разбить проблему на шаги и продемонстрировать их модели. Недавно [CoT prompting](https://arxiv.org/abs/2201.11903) стал популярным для решения более сложных задач арифметики, здравого смысла и символического рассуждения

В целом, предоставление примеров полезно для решения некоторых задач. Когда zero-shot и few-shot промптингов недостаточны, это может означать, что то, что было изучено моделью, недостаточно для успешного выполнения задачи. В таком случае рекомендуется начать думать о настройке модели или экспериментах с более продвинутыми техниками формулировки запросов. Далее мы расскажем о одной из популярных техник формулировки запросов, называемой цепочкой мыслей (chain-of-thought prompting), которая получила большую популярность.