Создание датасета для LoRA: гайд для генерации историй | AiManual
AiManual Logo Ai / Manual.
14 Янв 2026 Гайд

Как создать датасет для LoRA, который действительно учит модель писать истории

Пошаговое руководство по сбору и подготовке данных для тонкой настройки LLM под творческие задачи. От сбора текстов до структурирования сцен.

Почему ваши LoRA-датасеты не работают

Вы скачали тысячу книг, запустили обучение, а модель вместо вдохновляющих сюжетов выдает бессвязную кашу. Знакомая история? Проблема не в LoRA как технологии, а в том, что вы пытаетесь учить нейросеть на мусоре.

LoRA для творческих задач — это не просто добавить пару строк к промпту. Это научить модель понимать структуру повествования, характер персонажей, динамику сцен. И для этого нужны не просто тексты, а правильно аннотированные тексты.

Типичная ошибка: кидать в датасет целые романы без разметки. Модель не понимает, где начинается диалог, где заканчивается описание, что такое кульминация сцены. Она видит просто поток слов.

Что на самом деле учит модель писать истории

Представьте, что вы учите человека писать сценарии. Вы не дадите ему сто фильмов и скажете «смотри и учись». Вы разберете каждый фильм на составляющие: структура акта, развитие персонажа, диалоги, визуальные описания.

С ИИ та же история. Модель нужно показывать не просто текст, а текст с метаданными. Контекст. Что происходит в этой сцене? Какие эмоции испытывают персонажи? Какой конфликт разрешается?

1 Собираем сырые тексты: что брать, а что оставить

Первая ловушка — объем. «Чем больше, тем лучше» здесь не работает. Десять качественно размеченных глав лучше ста неразмеченных книг.

  • Жанровая чистота: Если хотите научить модель писать детективы, не мешайте их с романтическими комедиями. Модель запутается в стилях.
  • Единство стиля: Возьмите 3-5 авторов с похожим стилем. Не пытайтесь объединить Хемингуэя и Толстого — получится шизофрения в тексте.
  • Качество текста: Проверьте каждую книгу на наличие OCR-ошибок, пропущенных абзацев, битых символов. Одна ошибка может испортить весь датасет.
💡
Начните с малого. Возьмите одну книгу, разберите ее на составляющие, посмотрите, как модель реагирует на обучение. Масштабируйте только когда поймете, что работает.

2 Разметка: превращаем текст в обучающие примеры

Вот где начинается настоящая работа. Каждый фрагмент текста должен стать самостоятельным обучающим примером с контекстом.

Как НЕ делать:

# Плохо: просто режем текст на куски
chunks = [text[i:i+512] for i in range(0, len(text), 512)]

Как делать правильно:

# Хорошо: размечаем по сценам с метаданными
scene_example = {
    "text": "Джон вошел в комнату. Воздух пахнет пылью и старыми книгами...",
    "metadata": {
        "scene_type": "описание_места",
        "characters": ["Джон"],
        "emotional_tone": "меланхоличный",
        "conflict_level": "низкий",
        "pov": "третье_лицо",
        "setting": "старая библиотека"
    },
    "previous_context": "Глава 3: Поиски истины",
    "next_context": "Диалог с библиотекарем"
}

Зачем такие сложности? Потому что модель учится не просто повторять слова, а понимать структуру. Она начинает видеть связь между «эмоциональным тоном» и выбором прилагательных, между «уровнем конфликта» и динамикой диалога.

3 Балансировка датасета: сколько диалогов, сколько описаний?

Откройте любую книгу. Там есть диалоги, описания, внутренние монологи, действия. Если в датасете будут только диалоги, модель не научится описывать пейзажи.

Тип контента Доля в датасете Зачем нужно
Диалоги 30-40% Учит естественным репликам, развитию конфликта через речь
Описания мест 20-25% Учит создавать атмосферу, работать с деталями
Действия персонажей 20-25% Учит динамике сцены, показу через действие
Внутренние монологи 10-15% Учит психологической глубине, развитию персонажа

4 Форматирование: как подать данные модели

Техническая часть, которую многие пропускают. А зря. Формат данных влияет на то, как модель их интерпретирует.

Вот рабочий пример для формата JSONL (каждая строка — отдельный пример):

{
  "instruction": "Напиши сцену в старом замке с напряженной атмосферой",
  "input": "",
  "output": "Тени танцевали на каменных стенах...",
  "metadata": {
    "genre": "готический хоррор",
    "target_length": "200 слов",
    "key_elements": ["замок", "тайна", "надвигающаяся угроза"]
  }
}

Обратите внимание на поле «instruction». Оно должно быть конкретным, но не ограничивающим. «Напиши диалог» — плохо. «Напиши диалог между детективом и подозреваемым, где детектив скрывает свое знание улики» — хорошо.

Практический пайплайн: от текста до обученной LoRA

  1. Сбор исходников: Выберите 5-10 книг в одном жанре. Проверьте качество текста.
  2. Предобработка: Очистите от форматирования, разбейте на главы, уберите редакторские пометки.
  3. Семиантическая сегментация: Разделите текст на сцены, диалоги, описания. Используйте правила (пустые строки между сценами) или модель для классификации.
  4. Аннотирование: Для каждого сегмента добавьте метаданные: тип сцены, персонажи, эмоции, конфликт.
  5. Создание пар инструкция-ответ: Для каждой сцены придумайте инструкцию, которая описывает, что нужно написать.
  6. Балансировка: Проверьте распределение типов контента, добавьте недостающие элементы.
  7. Экспорт: Сохраните в формате, совместимом с вашим инструментом обучения (JSONL для большинства библиотек).

Не пытайтесь автоматизировать все. Аннотирование 20-30 сцен вручную даст вам лучшее понимание структуры, чем тысяча автоматически размеченных.

Ошибки, которые сломают вашу LoRA

  • Смешение стилей: Модель не может одновременно писать как Стивен Кинг и как Джейн Остин. Выберите одно направление.
  • Отсутствие контекста: Просто текст без метаданных — это как учить анатомию по разрозненным костям без схемы скелета.
  • Перекос в сторону одного типа контента: Только диалоги или только описания. Модель станет специалистом по одной части, но беспомощной в других.
  • Слишком длинные примеры: Модель теряет связь между началом и концом. Оптимально 300-800 токенов на пример.
  • Игнорирование жанровых особенностей: Детективу нужны загадки и улики, роману — эмоциональные повороты. Не делайте «универсальный» датасет.

Что делать, когда датасет готов

Собрав датасет, не бросайтесь сразу обучать модель на всех данных. Начните с маленького эксперимента:

# Возьмите 10% данных для быстрого теста
head -n 100 dataset.jsonl > test_dataset.jsonl

# Обучите LoRA на 100 примерах
python train_lora.py --dataset test_dataset.jsonl --epochs 3

# Проверьте результат на разных промптах
python generate.py --model your_lora --prompt "Напиши начало детективной истории"

Если после мини-обучения модель выдает связные, стилистически выдержанные тексты — вы на правильном пути. Если нет — вернитесь к этапу аннотирования и посмотрите, что пошло не так.

Следующий уровень: динамические датасеты

Когда освоите базовое создание датасетов, попробуйте более сложные техники. Например, создание датасетов с поиском похожих паттернов — модель учится не просто повторять, а комбинировать элементы из разных источников.

Или используйте техники из streaming-обучения для работы с огромными объемами текстов без загрузки всего в память.

Главный секрет: лучшие датасеты создаются не скриптами, а людьми, которые понимают нарративную структуру. Потратьте время на анализ текстов, и модель отблагодарит вас качественными историями.

И последнее: не ждите совершенства с первой попытки. Создание датасета для творческих задач — итеративный процесс. Соберите, обучите, протестируйте, поймите, что не работает, исправьте. После 3-4 итераций вы получите инструмент, который действительно умеет писать в вашем стиле.

Когда ваша LoRA начнет генерировать тексты, которые сложно отличить от человеческих, вспомните этот момент — момент, когда вы перестали просто «кормить данные» и начали учить модель понимать историю.