Как вы генерируете синтетический датасет для instruction tuning (Self-Instruct, Evol-Instruct)?
Краткий тезис
Для instruction tuning необходимо большое количество пар «инструкция – ответ». Синтетическая генерация позволяет получить такой датасет без ручной разметки. Два популярных подхода — Self-Instruct и Evol-Instruct — используют саму LLM для создания примеров, а затем применяют фильтрацию и температурный семплинг для повышения качества и разнообразия.
2. Evol-Instruct: эволюция инструкций (сложнее, разнообразнее)
Evol-Instruct (Xu et al., 2023) — эволюционный подход, который усложняет и диверсифицирует инструкции. Используется, например, для создания датасета WizardLM.
Основные операции эволюции:
- Глубокая эволюция (deep evolution):
Добавляет условия, ограничения, увеличивает длину или глубину рассуждения. Пример промпта: «Rewrite the instruction to make it harder and require multi‑step reasoning». - Эволюция в ширь (breadth evolution):
Меняет домен, стиль или генерирует полностью новую инструкцию на основе старой, чтобы увеличить разнообразие. - In‑Domain эволюция:
Для той же темы добавляет требования к формату ответа (например, «ответь в виде JSON»).
На каждом шаге модель (обычно GPT‑4) получает исходную инструкцию и описывает операцию. Результат проверяется критериями:
- Ответ на новую инструкцию не должен быть пустым.
- Новая инструкция не должна быть слишком похожа на исходную (по embedding similarity < 0.9).
- Новая инструкция должна быть семантически осмысленной.
Evol-Instruct даёт сложные, многошаговые задачи, которые лучше калибруют рассуждение модели при дообучении. Однако он требует использования мощной teacher-модели и больше вычислительных ресурсов.
3. Фильтрация: удаление дубликатов, low-quality
Оба метода порождают много шума. Типичный пайплайн очистки:
| Тип фильтра | Метод | Инструмент / метрика |
|---|---|---|
| Дубликаты (exact match) | Сравнение строк (hash) | hashlib, set |
| Дубликаты (near‑duplicate) | Косинусное сходство эмбеддингов > 0.92 | Embedding model (например, all‑MiniLM‑L6‑v2) |
| Low‑quality | Длина ответа < 5 токенов или отношение длины ответа/инструкции < 0.1 | Пороги, настраиваются вручную |
| Несоответствие формату | Проверка наличия обязательных полей (instruction, output) | Регулярные выражения |
| Нецензурная лексика | Список стоп‑слов | profanity‑check |
| «Я LLM» | Отсеивание ответов, содержащих фразы «Как ИИ...» или «Я модель...» | Ручной паттерн |
Дополнительно можно применить reward model или LLM‑as‑judge: модель оценивает качество пары (instruction, response) по шкале 1–5, и порог отсечения устанавливается на 3 или 4.
4. Семпл с разными температурами
Чтобы увеличить разнообразие генераций (например, для одной инструкции получить несколько вариантов ответов), используют температурный семплинг с разными значениями temperature.
- Низкая температура (0.1–0.3): даёт более детерминированные, «правильные» ответы. Полезна для базовых инструкций.
- Высокая температура (0.8–1.5): создаёт более креативные и неожиданные варианты, улучшает покрытие редких путей рассуждения.
- Top‑p (nucleus sampling) часто комбинируется с температурой, например
top_p=0.95.
На практике для каждой инструкции генерируется несколько ответов (например, 3 с temp=0.2, 2 с temp=0.7, 1 с temp=1.2). Затем лучший ответ выбирается с помощью ручного или автоматического judge (LLM, reward model). Этот подход даёт высокую вариативность, не требуя множества разных инструкций.
Пет-проект для закрепления
Задача: Создать синтетический датасет из 500 пар (instruction, response) для дообучения маленькой LLM (например, DistilGPT2) с помощью Self‑Instruct.
Инструменты:
- Языковая модель: Hugging Face Transformers + Phi‑3 mini (4B) из‑за низкого порога входа.
- Библиотеки:
transformers,datasets,sentence‑transformersдля дедупликации. - Код на Python.
Шаги:
{"instruction": "Переведи текст на русский", "input": "Hello, world!", "output": "Привет, мир!"}
- Загрузить модель и токенизатор.
- Сгенерировать инструкции: для каждой итерации брать 6 случайных seed, формировать промпт (
"Given examples... generate a new instruction") и получать ответ сtemperature=0.8. - Для каждой новой инструкции сгенерировать input и output (аналогично).
- Фильтрация:
- Удалить дубликаты по эмбеддингам (cosine > 0.93).
- Удалить пары, где output короче 10 символов.
- Сохранить датасет в
datasets.Datasetи оценить его качество визуально (20 случайных примеров).
Ожидаемый результат: Полученный датасет можно использовать для instruction tuning небольшой модели (например, DistilGPT2). Метрика — улучшение точности на тестовом наборе (например, 5 ручных инструкций по суммаризации).
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 259 | PEFT |
Навигация
- Предыдущий: 963
- Следующий: 965
- Индекс: 00. Индекс разборов