Руководство по In-Context Learning
Введение
In-context learning (ICL) – это эффективный способ получить более качественные и предсказуемые результаты от больших языковых моделей (LLM). Суть в том, чтобы показать модели, что вы хотите, вместо того чтобы просто сказать. Это более достижимо и в некоторых случаях проще.
Использовать ICL довольно легко: не нужно менять параметры модели, быть инженером машинного обучения, и легко тестировать (особенно с инструментами вроде PromptHub).
В этой статье мы подробно рассмотрим ICL, его отличия от few-shot prompting, и разберемся, действительно ли модели "обучаются" в контексте. Также мы поделимся шаблонами для автоматической генерации качественных примеров ICL.
Материал основан на исследованиях из статей "Обзор In-context Learning" и "Auto-ICL: In-Context Learning без участия человека".
Что такое In-Context Learning?
In-context learning (ICL) – это метод, при котором LLM выполняют задачи, опираясь на несколько примеров, включенных прямо в запрос (промпт), то есть в "контекст".
В отличие от тонкой настройки модели, ICL использует только примеры для понимания задачи. Показывая, что требуется от модели, вместо простого описания, ICL позволяет решать задачи более гибко, без изменения внутренних параметров модели.
Рекомендуется дополнять инструкции демонстрационными примерами.
Zero-shot vs One-shot vs Few-shot обучение
In-context learning часто реализуется через one-shot или few-shot обучение.
Определи тональность отзыва: Продукт работает отлично!
Определи тональность: Продукт работает отлично! // Позитивный.
Новый отзыв: Продукт не подходит для наших задач. //
Определи тональность: Продукт работает отлично! // Позитивный.
Продукт не подходит // Негативный.
Продукт так себе // Нейтральный.
Новый отзыв: Продукт не соответствует требованиям. //
Разница между In-Context Learning и Few-Shot Prompting
In-context learning – это общая способность модели адаптироваться к контексту без изменения внутренних параметров. Few-shot prompting – это конкретная техника в рамках ICL, где предоставляется несколько примеров для управления поведением модели.
То есть, ICL – это про адаптивность модели, а few-shot – это метод использования этой адаптивности с помощью примеров.
Как работает In-Context Learning
Модель анализирует ввод, используя механизмы внимания. Она выявляет паттерны в контексте (тональность, стиль, структура) и применяет их при генерации ответа.
ICL не меняет параметры модели. Примеры помогают модели адаптировать ответы в реальном времени, используя паттерны и контекст примеров.
Это скорее распознавание паттернов и уточнение инструкций, чем "обучение" в классическом смысле.
Модель распознает структуру и стиль желаемого вывода, и применяет их к новым данным, как бы "обучаясь на лету".
Благодаря хорошему распознаванию паттернов, ICL подходит почти для любой задачи.
Проблемы и ограничения In-Context Learning
- Затраты: Использование примеров увеличивает количество токенов в запросе, что может повысить стоимость и задержку.
- Масштабируемость: Есть лимит на количество токенов в запросе, а также эффективность добавления примеров со временем снижается. Слишком много примеров может даже навредить. Рекомендуется начинать с 8 или менее.
- Чувствительность к примерам: Качество, порядок и разнообразие примеров сильно влияют на результат.
- Неясность процесса "обучения": Механизм "обучения" модели на примерах не до конца ясен.
Оптимизация промптов для In-Context Learning
- Качественные примеры: Примеры должны соответствовать задаче.
- Разнообразные примеры: Примеры должны охватывать разные аспекты задачи.
- Форматирование: Примеры должны быть последовательны в формате.
- Порядок: Есть мнение, что лучше располагать примеры от простого к сложному, или наиболее релевантные – ближе к запросу, поскольку модель может отдавать им приоритет.
- Избегание кластеризации: Примеры должны быть в случайном порядке, чтобы не смещать результат.
- Распределение меток: Используйте сбалансированное распределение меток в примерах.
- Не переборщить с количеством: Слишком много примеров снижает эффективность. Начните с 8 или менее.
Автоматическая генерация примеров для In-Context Learning
Чтобы не делать все вручную, можно использовать LLM для автоматической генерации примеров. Например, фреймворк Auto-ICL работает так:
- Генерация контекстной информации: Модель генерирует релевантные примеры по задаче.
- Объединение контекста с запросом: Модель добавляет сгенерированные примеры к исходному запросу.
Auto-ICL показал результаты лучше, чем другие методы, например, few-shot prompting и автоматическая генерация промптов (APE).
Промпт для 1 шага:
Based on the following question/task, generate a few input-output demonstrations that will serve as examples for the model to learn from. Ensure that:
1. Each demonstration includes both an input and a corresponding output.
2. The examples cover different aspects of the task (e.g., positive, negative, and neutral).
3. Maintain a consistent format for clarity and pattern recognition.
4. Order examples from simple to complex or place the most relevant examples closer to the query.
5. Ensure balanced distribution (avoid over-representing one type).
6. Limit the examples to a maximum of 8.
Here is the task: {{ запрос }}Промпт для 2 шага:
The following input-output demonstrations were generated to guide the model in solving the task:
Demonstrations:
{{ получившиеся примеры }}
Now, based on these demonstrations, solve the following question:
{{ запрос }}
A: Let's solve this step by step.Является ли In-Context Learning настоящим "обучением"?
Это спорный вопрос. В отличие от традиционного обучения, ICL основан на распознавании паттернов и адаптации к контексту, не меняя параметры модели.
Критики утверждают, что это не обучение, а динамическое сопоставление с образцами.
Сторонники ICL считают, что это имитация человеческого обучения, адаптируясь к новым задачам на лету.
In-context learning – это отличный способ улучшить качество промптов. Он прост в использовании, не требует технических навыков и легко тестируется. Автоматизация генерации примеров через Auto-ICL может еще больше упростить процесс.