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

Какие данные нужны для 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.

Инструменты:

  • Python + pandas
  • JSON файлы
  • Готовая модель для генерации ответов (чтобы не размечать вручную)

Шаги:

  1. Собрать 50 инструкций по Python (например, «Как открыть файл?», «Что такое декоратор?»).
  2. Для каждой написать ответ вручную (или сгенерировать через GPT-4).
  3. Создать файл dataset_alpaca.json с полями system, instruction, input, output.
  4. Создать файл dataset_sharegpt.json с массивом диалогов, где на каждую тему по два обмена (user → gpt → user → gpt).
  5. Проверить, что все примеры имеют корректные роли, а ответы не пустые.

Ожидаемый результат: Два файла JSON, готовые для использования с Axolotl или trl.


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

ВопросТема
32Оценка качества сгенерированных ответов
962Определение и цели тонкой настройки
964Параметро-эффективная настройка

Навигация

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