Как подбирать примеры: релевантность и разнообразие
Как подбирать примеры: релевантность и разнообразие
В предыдущем уроке ты узнал, что few-shot prompting работает через паттерн. Но сила few-shot — не в количестве примеров, а в их качестве. Три правильно подобранных примера дадут лучший результат, чем десять случайных. В этом уроке разберём два главных принципа подбора: релевантность и разнообразие.
Принцип 1: Релевантность
Примеры должны быть похожи на тот случай, с которым модель столкнётся в реальной работе. Если ты учишь модель классифицировать жалобы клиентов на доставку, бессмысленно давать примеры жалоб на качество товара — это другая предметная область.
Нерелевантные примеры (вход):
Классифицируй обращения клиентов по категориям: "доставка", "качество",
"возврат".
Пример 1:
Обращение: "Курьер привёз не тот заказ."
Категория: доставка
Пример 2:
Обращение: "Телефон перестал включаться на второй день."
Категория: качество
Теперь классифицируй:
Обращение: "Пицца приехала холодная."
Выход (ошибка модели):
Категория: качество
Модель ошиблась, потому что примеры не покрыли важный нюанс: холодная еда при доставке — это проблема доставки (время в пути), а не качества приготовления. Релевантный пример про доставку еды исправил бы ситуацию.
Исправленный набор примеров (релевантные):
Пример 1:
Обращение: "Курьер опоздал на час, еда остыла."
Категория: доставка
Пример 2:
Обращение: "В пицце не хватает заявленных ингредиентов."
Категория: качество
Пример 3:
Обращение: "Привезли пиццу с грибами, хотя я заказывал без."
Категория: доставка (ошибка сборки заказа)
Теперь модель видит, что проблема с содержимым заказа при доставке — это категория «доставка», а не «качество».
Принцип 2: Разнообразие
Примеры должны покрывать разные варианты внутри одной категории. Если все примеры похожи друг на друга, модель выучит узкий паттерн и не справится с вариациями.
Однообразные примеры (вход):
Извлеки имя и город из обращения.
Пример 1: "Меня зовут Иван, я из Москвы." → Имя: Иван, Город: Москва
Пример 2: "Меня зовут Мария, я из Петербурга." → Имя: Мария, Город: Петербург
Теперь: "Я Олег, живу в Казани."
Выход (вероятная ошибка из-за узкого паттерна):
Имя: Олег, Город: Казани
Модель может не справиться, потому что формулировка «Я Олег, живу в...» отличается от шаблона в примерах «Меня зовут... я из...».
Разнообразные примеры (вход):
Извлеки имя и город из обращения.
Пример 1: "Меня зовут Иван, я из Москвы." → Имя: Иван, Город: Москва
Пример 2: "Анна, Санкт-Петербург" → Имя: Анна, Город: Санкт-Петербург
Пример 3: "Я Олег, проживаю в Казани." → Имя: Олег, Город: Казань
Пример 4: "Город — Новосибирск, имя — Елена." → Имя: Елена, Город: Новосибирск
Теперь: "Из Воронежа пишет вам Сергей."
Выход:
Имя: Сергей, Город: Воронеж
Разнообразие примеров научило модель извлекать суть (имя и город), а не конкретный шаблон фразы.
Сколько примеров нужно
Эмпирическое правило:
- 1 пример — только для простых, линейных паттернов (например, перевод одного конкретного слова).
- 2–3 примера — оптимально для большинства задач. Достаточно для демонстрации паттерна, но не перегружает контекстное окно.
- 4–5 примеров — для сложных задач, где много вариаций или нюансов.
- Больше 5 — редко оправдано. Каждый новый пример съедает контекстное окно и даёт убывающую отдачу.
Выбор примеров: алгоритм
- Определи границы задачи. Что входит в задачу, а что нет? Какие формулировки бывают у пользователей?
- Выдели категории вариаций. Например, для задачи «извлечения имени» вариации: «Меня зовут X», «Я X», «Имя — X», «X, город Y».
- Выбери по одному примеру на категорию. Покрой основные варианты.
- Добавь один краевой случай. Ситуация на границе условия: неоднозначная формулировка, отсутствие данных, нестандартный формат.
Пример: подбор примеров для анализа отзывов
Задача: определить тональность отзыва о фильме.
Шаг 1. Границы: только русскоязычные отзывы о фильмах. Тональности: позитивная, негативная, смешанная.
Шаг 2. Вариации: явно позитивный, явно негативный, смешанный (и понравилось, и нет), саркастичный позитив (формально хвалит, но на самом деле нет), короткий без деталей.
Шаг 3. Примеры:
Пример 1 (явно позитивный):
Отзыв: "Отличный фильм! Смотрел на одном дыхании, игра актёров
потрясающая."
Тональность: позитивная
Пример 2 (явно негативный):
Отзыв: "Скучнейший фильм. Уснул на середине. Деньги на билет —
в помойку."
Тональность: негативная
Пример 3 (смешанный):
Отзыв: "Идея интересная, но реализация подкачала. Первая половина —
огонь, вторая — вода."
Тональность: смешанная
Пример 4 (краевой — сарказм):
Отзыв: "Ну просто шедевр. Особенно понравилось, как актёры
забывали текст."
Тональность: негативная
Пример 4 критически важен — он учит модель распознавать сарказм, когда слова позитивные, а смысл негативный.
Проверь себя
Ты создаёшь промпт для извлечения цены из описания товара. Какие вариации формулировок нужно покрыть примерами?
Пример ответа: «Цена: 1000 руб.», «Стоимость — 999 ₽», «Всего за 500 рублей», «от 1 200 руб./мес.», «Цена без скидки: 2 000, со скидкой: 1 500». Каждая вариация — разный паттерн, модель должна уметь извлекать цену из любого.
Итог
- Примеры должны быть релевантны реальным данным, с которыми будет работать модель.
- Разнообразие примеров учит модель паттерну, а не конкретным формулировкам.
- Оптимально 2–5 примеров: достаточно для демонстрации паттерна, но не перегружает контекст.
- Добавляй краевые случаи — ситуации на границе, где модель может ошибиться.
- Алгоритм подбора: границы задачи → категории вариаций → по примеру на категорию → краевой случай.
Что дальше
Ты знаешь, как подбирать качественные примеры. Но что делать, если двух-трёх примеров не хватает, а задача требует более тонкой настройки? В следующем уроке — multi-shot prompting и когда примеров нужно больше.