Какие данные нужны для fine-tuning на инструкции (instruction tuning)? Формат: (инструкция, контекст, ответ).
Краткий тезис
Инструктивный фина-тюнинг (Instruction Tuning) требует структурированных наборов данных, где каждый пример однозначно связывает пользовательский запрос, опциональный контекст и эталонный ответ. Наиболее популярные форматы — Alpaca, ShareGPT и многопользовательские (multi-turn) диалоги, каждый из которых по-разному обрабатывает системные промпты и историю беседы. Понимание этих форматов критично для подготовки качественного датасета под конкретную задачу.
---|------------|----------------|
| instruction | Сама инструкция (запрос пользователя) | Да |
| input | Дополнительный контекст (например, текст для анализа) | Нет |
| output | Идеальный ответ модели | Да |
Пример в JSON:
{
"instruction": "Переведи следующий текст на английский.",
"input": "Машинное обучение — это круто.",
"output": "Machine learning is awesome."
}
Если контекст не нужен, поле input оставляют пустым или опускают. При обучении модель учится генерации ответа по паре (instruction + [input]).
Особенности:
- Простота парсинга и токенизации.
- Не подходит для диалогов с историей.
- Часто используется как база для LoRA-дообучения в связке с Transformers.
2. System prompt: задаёт роль
В большинстве современных LLM (LLaMA, ChatGPT) системный промпт (system_prompt) определяет поведение модели. В датасетах для fine-tuning его часто добавляют как отдельное поле.
| Поле | Содержание |
|---|---|
system | Роль (например, «Ты — полезный ассистент», «Ты — эксперт по Python») |
instruction | Основной запрос |
output | Ответ с учетом роли |
Формат Alpaca не имеет встроенного поля system, поэтому его часто добавляют в начало instruction или в context. В современных датасетах (например, Dolly, OpenAssistant) используют расширенную схему:
{
"system": "Ты — профессиональный математик.",
"instruction": "Реши уравнение: 2x + 5 = 13.",
"output": "x = 4"
}
При обучении системный промпт вставляется перед инструкцией, формируя полную входную последовательность. Игнорирование этого поля может привести к тому, что модель не будет следовать заданной роли.
3. Multi-turn: предыдущие сообщения
Для тонкой настройки на диалоговые сценарии (Multi-turn Dialog) датасет должен включать историю беседы. Каждый пример — это массив сообщений с ролями user и assistant.
Пример структуры:
{
"conversations": [
{"role": "user", "content": "Какой сегодня день?"},
{"role": "assistant", "content": "Сегодня среда."},
{"role": "user", "content": "А завтра?"},
{"role": "assistant", "content": "Четверг."}
]
}
Шаблон токенизации: модель видит весь диалог, но loss считается только на токенах ответов последнего сообщения (или всех, в зависимости от стратегии). Разные библиотеки (trl, Axolotl) по-разному настраивают маскирование.
Почему это важно:
- Модель учится учитывать контекст предыдущих реплик.
- Позволяет обрабатывать уточняющие вопросы.
4. ShareGPT формат для диалогов
Формат ShareGPT стал популярным после утечки данных чатов ChatGPT. Он представляет диалог как массив объектов с ключами from и value:
{
"id": "123",
"conversations": [
{"from": "human", "value": "Объясни, что такое квантовые вычисления."},
{"from": "gpt", "value": "Квантовые вычисления используют кубиты..."},
{"from": "human", "value": "Приведи пример."},
{"from": "gpt", "value": "Например, алгоритм Шора..."}
]
}
Отличия от Alpaca:
- Нет явного разделения на instruction/input/output.
- Поддерживает любое количество реплик.
- Часто используется для обучения ассистентов, имитирующих поведение ChatGPT.
Применение в fine-tuning:
- Библиотеки (например, FastChat) автоматически преобразуют ShareGPT в последовательность токенов, оборачивая каждое сообщение в токены-разделители (например,
<|im_start|>user). - Для сохранения контекста длинные диалоги обрезают до максимальной длины окна.
5. Пет-проект для закрепления
Задача: Подготовить датасет из 50 примеров в двух форматах — Alpaca (с полем system) и ShareGPT (для двухшаговых диалогов) — для обучения модели отвечать на вопросы по документации Python.
Инструменты:
Шаги:
- Собрать 50 инструкций по Python (например, «Как открыть файл?», «Что такое декоратор?»).
- Для каждой написать ответ вручную (или сгенерировать через GPT-4).
- Создать файл
dataset_alpaca.jsonс полямиsystem,instruction,input,output. - Создать файл
dataset_sharegpt.jsonс массивом диалогов, где на каждую тему по два обмена (user → gpt → user → gpt). - Проверить, что все примеры имеют корректные роли, а ответы не пустые.
Ожидаемый результат: Два файла JSON, готовые для использования с Axolotl или trl.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 32 | Оценка качества сгенерированных ответов |
| 962 | Определение и цели тонкой настройки |
| 964 | Параметро-эффективная настройка |
Навигация
- Предыдущий: 962
- Следующий: 964
- Индекс: 00. Индекс разборов