Aivaro
  • Оглавление
  • Вопросы
  • Практика
  • Вики
  • Материалы сообщества
  • Тесты
  • Поиск
✈Telegram @ai_varo
RUEN中文
…
Оглавление/Вопросы/#964

Как вы генерируете синтетический датасет для 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.92Embedding 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.

Шаги:

  1. Подготовить seed‑пул из 20 примеров в формате JSON:
{"instruction": "Переведи текст на русский", "input": "Hello, world!", "output": "Привет, мир!"}
  1. Загрузить модель и токенизатор.
  2. Сгенерировать инструкции: для каждой итерации брать 6 случайных seed, формировать промпт ("Given examples... generate a new instruction") и получать ответ с temperature=0.8.
  3. Для каждой новой инструкции сгенерировать input и output (аналогично).
  4. Фильтрация:
    • Удалить дубликаты по эмбеддингам (cosine > 0.93).
    • Удалить пары, где output короче 10 символов.
  5. Сохранить датасет в datasets.Dataset и оценить его качество визуально (20 случайных примеров).

Ожидаемый результат: Полученный датасет можно использовать для instruction tuning небольшой модели (например, DistilGPT2). Метрика — улучшение точности на тестовом наборе (например, 5 ручных инструкций по суммаризации).


Связь с другими вопросами

ВопросТема
259PEFT

Навигация

  • Предыдущий: 963
  • Следующий: 965
  • Индекс: 00. Индекс разборов