中文翻译暂不可用,显示俄语原文。
Как вы генерируете синтетический датасет для instruction tuning? Self-instruct, Evol-Instruct?
Краткий тезис
Синтетические датасеты для instruction tuning создаются с помощью LLM, которая генерирует пары «инструкция → ответ» по заданному шаблону. Self-instruct — базовый метод: LLM сама придумывает инструкции, классифицирует их и генерирует ответы. Evol-Instruct (WizardLM) улучшает качество за счёт мутации инструкций — усложнения, конкретизации и ветвления. Оба метода требуют тщательной фильтрации (LLM-as-judge, правила, дедупликация) для удаления шума и небезопасного контента.
1. Термин: Instruction tuning (дообучение по инструкциям)
Instruction tuning — это этап дообучения LLM на парах «инструкция → ответ», чтобы модель научилась следовать разнообразным командам. В отличие от pre-training (обучение на сыром тексте), instruction tuning формирует способность понимать намерение пользователя и давать полезный ответ.
Зачем нужен dataset|синтетический датасет
- evaluation|Ручная разметка дорога и медленна (нужны тысячи примеров).
- LLM (например, GPT-4) уже умеют генерировать качественные инструкции и ответы.
- Синтетические данные позволяют быстро создавать датасеты для новых доменов или задач.
Проблема LLM может генерировать однотипные или неверные примеры, поэтому нужны методы, повышающие разнообразие и качество.
2. Self-instruct: базовый метод
Self-instruct (Wang et al., 2022) — первый популярный подход к автоматической генерации instruction-tuning данных. Процесс состоит из нескольких шагов:
- Seed-примеры — небольшой набор (например, 175) вручную написанных инструкций с ответами, покрывающих разные типы задач (классификация, генерация, извлечение и т.д.).
- Генерация инструкций — LLM получает seed-примеры и промпт «Придумай новую инструкцию, похожую на эти». Генерируется N новых инструкций.
- Классификация по типу — каждая инструкция относится к одному из типов (например, «да/нет», «список», «текст»). Это нужно для выбора правильного формата ответа.
- Генерация ответов — для каждой инструкции LLM генерирует ответ, используя промпт, специфичный для типа (например, «Ответь одним словом»).
- Фильтрация — удаляются дубликаты, слишком короткие/длинные инструкции, инструкции с нецензурной лексикой, а также те, где ответ не соответствует типу.
- Итерация — новые качественные пары добавляются в пул seed, и процесс повторяется (обычно 3–5 итераций).
Результат датасет из тысяч пар. Self-instruct лёгок в реализации, но страдает от низкого разнообразия и «зацикливания» на популярных темах.
3. Evol-Instruct: мутация инструкций
Evol-Instruct (WizardLM, Xu et al., 2023) — улучшение Self-instruct, где инструкции не генерируются с нуля, а мутируют из существующих. Основные типы мутаций:
- Усложнение (deepening) — добавление ограничений, условий, требований к формату.
Пример: «Напиши эссе» → «Напиши эссе объёмом 500 слов, используя не менее 3 научных источников, в формате APA». - Конкретизация (concretizing) — замена абстрактных терминов на конкретные.
Пример: «Объясни концепцию» → «Объясни концепцию квантовой запутанности на примере двух фотонов». - Ветвление (branching) — создание под-инструкций, которые расширяют исходную.
Пример: «Переведи текст» → «Переведи текст на французский, затем напиши краткое содержание на русском».
Процесс
- Берётся исходная инструкция (из seed или предыдущей итерации).
- LLM получает промпт с описанием мутации и генерирует новую инструкцию.
- Новая инструкция проверяется на качество (LLM-as-judge) — не стала ли она бессмысленной или слишком сложной.
- Для каждой новой инструкции генерируется ответ (обычно той же LLM или более сильной моделью).
- Итерации повторяются 5–10 раз, на каждом шаге отбираются лучшие мутации.
Преимущества Evol-Instruct
- Высокое разнообразие инструкций.
- Естественное усложнение задач, что улучшает способность модели справляться с трудными запросами.
- Лучшее покрытие редких типов инструкций.
Недостатки риск генерации невыполнимых инструкций (например, «напиши роман из 1000 страниц за 1 минуту»), требуется тщательная фильтрация.
4. Фильтрация качества: LLM-as-judge и правила
Даже лучшие методы генерации дают шум. Фильтрация — ключевой этап.
Методы фильтрации
| Метод | Описание | Пример |
|---|---|---|
| LLM-as-judge | LLM оценивает качество пары по шкале (1–10) или даёт бинарную оценку (ok/not ok). Отбрасываются пары с оценкой <7. | Промпт: «Оцени, насколько инструкция чёткая, а ответ полный. Поставь оценку 1–10». |
| Правила (rule-based) | Удаление по длине (инструкция <3 слов или >200 слов), по наличию запрещённых слов, по дубликатам (cosine similarity >0.9). | if len(instruction.split()) < 3: skip |
| Дедупликация | Удаление семантически похожих инструкций (например, с помощью эмбеддингов и кластеризации). | Использовать sentence-transformers для вычисления косинусного сходства. |
| Проверка выполнимости | LLM отвечает на вопрос «Можно ли выполнить эту инструкцию?» (для Evol-Instruct). | Промпт: «Является ли эта инструкция реалистичной и выполнимой? Ответь да/нет». |
Рекомендация комбинировать LLM-as-judge (для тонкой оценки) с правилами (для быстрого отсева). Использовать более сильную модель (GPT-4, Claude) в качестве judge, если бюджет позволяет.
5. Сравнение Self-instruct и Evol-Instruct
| Характеристика | Self-instruct | Evol-Instruct |
|---|---|---|
| Источник инструкций | Генерация с нуля на основе seed | Мутация существующих инструкций |
| Разнообразие | Среднее (зацикливание на популярных темах) | Высокое (мутации создают редкие комбинации) |
| Сложность инструкций | Однородная, часто простые | Прогрессивно усложняются |
| Количество итераций | 3–5 | 5–10 |
| Риск шума | Умеренный (несоответствие ответа типу) | Высокий (невыполнимые инструкции) |
| Вычислительные затраты | Низкие (одна генерация на пару) | Высокие (много мутаций и проверок) |
| Известные датасеты | Alpaca (52k), Dolly (15k) | WizardLM (70k), Evol-Instruct-70k |
Когда что использовать
- Self-instruct — для быстрого прототипирования, когда нужно получить датасет за несколько часов.
- Evol-Instruct — для production-систем, где требуется высокое качество и разнообразие (например, для обучения агентов).
6. Дополнительные методы генерации
Помимо двух основных, существуют другие подходы:
- Backtranslation — для задач генерации (например, суммаризация): берём готовый ответ, просим LLM придумать к нему инструкцию. Полезно, когда есть корпус ответов, но нет инструкций.
- Unnatural Instructions (Google, 2022) — генерация инструкций с помощью шаблонов и подстановки сущностей (entities). Даёт высокое разнообразие, но требует ручного проектирования шаблонов.
- Orca-style (progressive learning) — Microsoft Orca (2023) использует «прогрессивное обучение»: сначала генерируются простые инструкции, затем модель дообучается на них, и на следующем шаге более сложные инструкции генерируются уже улучшенной моделью. Это повышает качество итеративно.
- Self-QA — для RAG: на основе документа генерируются вопрос-ответные пары, которые затем используются для instruction tuning retrieval-агента.
7. Практические рекомендации
- Выбор базовой LLM для генерации используйте самую сильную доступную модель (GPT-4, Claude 3 Opus, Llama 3 70B). Качество генерации напрямую влияет на качество датасета.
- Seed-примеры тщательно подбирайте 100–200 примеров, покрывающих все типы задач, которые нужны в вашем сценарии. Плохой seed → плохой датасет.
- Количество итераций для Self-instruct 3–5 итераций достаточно; для Evol-Instruct 5–10. Больше итераций увеличивает разнообразие, но растёт риск шума.
- Баланс разнообразия после генерации проверьте распределение инструкций по темам (например, с помощью кластеризации эмбеддингов). Если есть перекос — добавьте seed-примеров из недостающих категорий.
- Фильтрация не жалейте времени на фильтрацию. Лучше иметь 10k качественных пар, чем 50k с шумом.
- Оценка датасета после генерации проведите human evaluation на 100–200 случайных парах. Если >10% пар признаны некачественными — улучшайте фильтрацию или меняйте промпты.
8. Инструменты и библиотеки
- datasets (Hugging Face) — для хранения и загрузки датасетов.
- trl (Transformer Reinforcement Learning) — содержит утилиты для instruction tuning (SFTTrainer).
- Axolotl — фреймворк для fine-tuning, поддерживает синтетические датасеты.
- LLaMA-Factory — удобный интерфейс для генерации и обучения.
- OpenAI API / vLLM — для генерации данных с использованием GPT-4 или open-source моделей.
- Sentence-Transformers — для дедупликации по эмбеддингам.
Пример кода для генерации одной инструкции через Self-instruct (упрощённо):
import openai
def generate_instruction(seed_examples: list[str]) -> str:
prompt = f"""Придумай новую инструкцию, похожую на эти примеры.
Примеры:
{chr(10).join(seed_examples[:5])}
Новая инструкция:"""
response = openai.ChatCompletion.create(
model="gpt-4",
messages=[{"role": "user", "content": prompt}],
temperature=0.8,
max_tokens=100
)
return response.choices[0].message.content.strip()
9. Проблемы и ограничения
- Переобучение на шум если фильтрация слабая, модель выучит неверные паттерны (например, отвечать «Я не знаю» на сложные вопросы).
- Bias (смещение): LLM-генератор может воспроизводить свои собственные предубеждения (гендерные, культурные). Нужно проверять датасет на fairness.
- Safety (безопасность): синтетические инструкции могут содержать вредные запросы (например, «как взломать систему»). Используйте фильтрацию по ключевым словам и LLM-as-judge для безопасности.
- Вычислительные затраты генерация 50k пар через GPT-4 может стоить сотни долларов. Для экономии используйте open-source модели (Mistral, Llama) с vLLM.
Пет-проект для закрепления
Задача Создать синтетический датасет для instruction tuning агента, который отвечает на вопросы по документации Python.
Инструменты Python, OpenAI API (или vLLM с Mistral-7B), Hugging Face datasets, sentence-transformers.
Шаги:
- Соберите 50 seed-примеров: вопросы по Python (например, «Как открыть файл?», «Что такое декоратор?») с ответами из официальной документации.
- Реализуйте Self-instruct: сгенерируйте 500 новых инструкций с помощью GPT-4 (или Mistral-7B). Используйте промпт с seed-примерами.
- Примените Evol-Instruct: возьмите 100 лучших инструкций из шага 2, для каждой сгенерируйте 3 мутации (усложнение, конкретизация, ветвление). Получите ~300 новых инструкций.
- Фильтрация:
- Удалите дубликаты (cosine similarity >0.85).
- Используйте LLM-as-judge (та же модель) для оценки качества (отбросьте <7).
- Проверьте на безопасность (удалите инструкции с нецензурной лексикой).
- Соберите финальный датасет (цель: 500–1000 пар).
- Обучите небольшую модель (например, Llama-3-8B) с помощью SFTTrainer из библиотеки trl.
- Оцените: сравните ответы обученной модели с базовой на 50 тестовых вопросах (human evaluation).
Ожидаемый результат Рабочий пайплайн генерации синтетических данных, датасет в формате Hugging Face, обученная модель, которая даёт более точные ответы по Python, чем базовая.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 672 | Проектирование RAG-системы (синтетические данные для retrieval) |
| 675 | Оценка качества retrieval (метрики для датасета) |
| 680 | Fine-tuning для RAG (instruction tuning как часть пайплайна) |
| 682 | Архитектура AI-агентов (instruction tuning для агентов) |
| 684 | Оценка агентных систем (качество датасета влияет на оценку) |
Навигация
- Предыдущий: 680
- Следующий: 682
- Индекс: 00. Индекс разборов