Загрузка урока...
Запомните аксиому: Качество данных важнее архитектуры модели.
Существует гипотеза LIMA (Less Is More for Alignment): для качественного SFT достаточно всего 1000–2000 идеальных примеров. Если вы зальете 50 000 примеров «мусорного» качества, модель деградирует.
Сегодня мы готовим «учебник» для нашей нейросети.
Современные модели (Llama 3, Mistral) ожидают данные в формате чата.
Стандартный формат (Alpaca-style JSONL):
JSON
{"instruction": "Классифицируй обращение.", "input": "Где мой заказ?", "output": "Категория: Статус доставки"}
{"instruction": "Напиши python код.", "input": "Сумма двух чисел", "output": "def sum(a, b): return a + b"}
Формат ChatML (предпочтительный для диалоговых систем):
Этот формат учит модель понимать роли (System, User, Assistant) и специальные токены (EOS - End of Sentence).
JSON
{
"messages": [
{"role": "system", "content": "Ты — саркастичный бот техподдержки."},
{"role": "user", "content": "У меня не работает интернет."},
{"role": "assistant", "content": "А вы пробовали заплатить за него? Или перезагрузить роутер, как все смертные?"}
]
}
Ручная разметка 1000 диалогов — это долго. В индустрии мы используем Data Distillation. Мы просим умную модель (GPT-4/Claude 3.5) сгенерировать примеры для обучения маленькой модели.
Алгоритм:
Пишем 10-20 идеальных примеров вручную (Golden Set).
Пишем скрипт, который скармливает эти примеры GPT-4 и просит: «Сгенерируй еще 50 похожих, но с другими товарами/ситуациями».
Валидируем глазами выборочно.
Допустим, наша задача — научить модель извлекать сущности (NER) из накладных в JSON.
Python-скрипт генератора (заготовка):
Python
import json
from openai import OpenAI # Или клиент Qubu, если используете локальную модель
client = OpenAI(api_key="sk-...")
system_prompt = """
Ты генератор данных для Fine-tuning.
Создай пару: Текст накладной (user) -> JSON с полями 'item', 'price', 'qty' (assistant).
Используй разные товары и форматы записи.
"""
data = []
for _ in range(10): # Генерируем 10 примеров
completion = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "system", "content": system_prompt}]
)
# Парсим ответ и добавляем в список
# (В реальности тут нужен парсинг структуры, которую выдаст GPT)
pass
# Сохраняем в JSONL
with open("train_dataset.jsonl", "w", encoding="utf-8") as f:
for entry in data:
f.write(json.dump(entry, ensure_ascii=False) + "\n")
Никогда не обучайте на 100% данных. Оставьте 10% для теста.
Train: На этом модель учится.
Test (Val): На этом мы проверяем loss (ошибку) во время обучения. Если loss на Train падает, а на Test растет — поздравляю, у вас Overfitting (переобучение), модель просто зазубрила примеры.
Создайте файл dataset.jsonl.
Подготовьте минимум 5 примеров в формате ChatML для задачи: «Бот, который отвечает на отзывы клиентов в стиле "Одесский юмор"».
Один пример должен быть System Prompt + User (Негативный отзыв) + Assistant (Смешной, но вежливый ответ).
Загрузите этот файл в раздел Qubu Datasets (или сохраните локально), он понадобится нам в Уроке 4 для запуска обучения.
LIMA: 1000 качественных примеров лучше, чем 100 000 грязных.
Синтетика: Используйте GPT-4 для генерации "мяса" датасета, но проверяйте "кости" (структуру) вручную.
Формат: Строго соблюдайте JSONL структуру, которую требует ваша библиотека обучения (обычно это ChatML или Alpaca). Ошибка в одной запятой сломает многочасовое обучение.
В этом материале нет файлов для просмотра.