Обучение нейросети на своих данных: как превратить LLM из генератора текста в чат-бота
Автор серии статей на Хабре показал по шагам, как взять уже обученную языковую модель и научить её отвечать на вопросы вместо бессвязного продолжения текста, причём весь пайплайн воспроизводится локально на русскоязычных данных.

Без этапа SFT-дообучения (supervised fine-tuning, обучение на размеченных парах «вопрос-ответ») любая языковая модель остаётся генератором продолжений: она предскажет следующее слово, но не ответит на прямой вопрос. Этот цикл показывает, как пройти путь от «болванки» до чат-бота целиком на своей машине.
Владимир, автор цикла на Хабре, опубликовал четвёртую часть руководства по созданию небольшой decoder-only LLM (языковая модель, которая генерирует текст слово за словом) с нуля. В предыдущих частях он собрал модель «LinguaLaboratoriumMechanicus», обучил её на корпусе текстов по вселенной Warhammer 40K и получил базовую модель, умеющую продолжать текст. Четвёртая часть целиком посвящена SFT-дообучению, после которого модель ведёт диалог, а не просто дописывает фразы.
Зачем нужно SFT-дообучение?
После предварительного обучения (pre-train) модель предсказывает следующий токен (минимальную единицу текста, слово или его часть). Если задать ей вопрос «Кто такой Император?», она не ответит, а продолжит фразу так, будто это начало реплики в книге. Результат грамматически верный, но бесполезный.
Pre-train даёт модели язык, стиль и знания корпуса. SFT учит формату поведения: на входе вопрос, на выходе ответ. Механизм тот же (cross-entropy на следующий токен), но loss (функция потерь, по которой модель корректирует себя) считается только на токенах ответа, а не на всём тексте.
Что понадобится
- Базовая модель после pre-train. В цикле это «LinguaLaboratoriumMechanicus», но подойдёт любая decoder-only модель с открытыми весами (открытые веса, значит, вы можете скачать параметры модели и работать с ними локально).
- Датасет «вопрос-ответ». JSON-файлы с парами реплик в формате
messagesс ролямиuserиassistant. Автор собирал данные на тематических форумах, из статей и частично сгенерировал синтетику при помощи другой нейросети. - Python, PyTorch, библиотека Hugging Face Transformers. Всё бесплатно и работает локально.
- GPU с достаточной памятью для выбранного размера модели. Конкретные требования автор приводит в предыдущих частях цикла.
- Время: сборка данных, по словам автора, заняла больше всего сил, обучение идёт быстрее.
Пошаговая инструкция
- Подготовьте датасет. Соберите пары «вопрос-ответ» в JSON. Каждый элемент списка содержит массив
messagesс ролямиuserиassistant:
[
{
"messages": [
{"role": "user", "content": "Ваш вопрос"},
{"role": "assistant", "content": "Ожидаемый ответ модели"}
]
}
]
- Расширьте токенизатор. Базовый токенизатор не знает специальных токенов ролей. Добавьте
<|user|>и<|assistant|>как отдельные единицы словаря:
from transformers import AutoTokenizer
from pathlib import Path
def extend_tokenizer(base_path, out_path):
tokenizer = AutoTokenizer.from_pretrained(Path(base_path))
tokenizer.add_tokens(
['<|user|>', '<|assistant|>'],
special_tokens=True
)
Path(out_path).mkdir(parents=True, exist_ok=True)
tokenizer.save_pretrained(out_path)
return len(tokenizer)
Словарь вырастет на два токена. Это значит, что embedding-слой и выходной слой модели тоже нужно расширить.
-
Соберите QA-датасет с маской потерь. В отличие от pre-train, где loss считается по всем токенам, на этапе SFT модель видит весь диалог (иначе не поймёт контекст), но учится предсказывать только токены ответа ассистента. На позициях вопроса в таргете ставится значение
-100, которое PyTorch игнорирует при подсчёте потерь. -
Сформируйте чат-формат. Каждая реплика начинается с токена роли, затем перевод строки и текст:
<|user|>
Какие цвета доминируют в геральдике Кровавых Ангелов?
<|assistant|>
Доминирующим цветом их брони является вермильоново-красный...
- Запустите нейросети обучение. Используйте стандартный цикл PyTorch с
cross_entropyи параметромignore_index=-100. Модель обновляет веса только по тем позициям, где стоит реальный ответ.
До SFT-дообучения модель на вопрос «Какие цвета доминируют в геральдике Кровавых Ангелов?» выдавала продолжение вроде: «...спросила она. Как он может не быть Богом?» После дообучения модель ответила по существу: «Доминирующим цветом их брони является вермильоново-красный, а отдельные украшения и детали сияют золотом.» Формат реплик чётко разделён токенами ролей, модель не путает, где вопрос, а где ответ.
- Считать loss по всему тексту, включая вопрос. Без маски
-100модель учится «повторять вопрос», а не отвечать на него. Это самая распространённая ошибка при переходе от pre-train к SFT. - Мало данных или однообразные пары. Автор признаётся, что сбор данных оказался тяжелее самого обучения, он несколько раз хотел бросить. Если пар мало, модель переобучится и будет цитировать ответы дословно, а не обобщать.
- Забыть расширить embedding-слой. После добавления новых токенов размер словаря меняется. Если не обновить слои модели, вы получите ошибку размерности или модель будет игнорировать новые токены.
- Путать форматы датасетов. Instruct-датасет (следование инструкциям: перевод, исправление грамматики) и диалоговый датасет (многоходовые беседы) решают разные задачи. Автор выбрал упрощённый чат: один вопрос, один ответ. Для первого опыта это разумный выбор.
Что делать с этим прямо сейчас?
-
Авторам Дзена и копирайтерам. Нейросети обучение на собственных текстах позволяет получить модель, которая пишет в вашем стиле и на вашу тему. Пайплайн из статьи воспроизводится на русском языке. Если вы ведёте нишевый канал, попробуйте собрать 200-300 пар «вопрос-ответ» по своей теме и дообучить небольшую открытую модель. Результат не заменит вас, но может ускорить черновики.
-
Разработчикам и техническим специалистам. Весь код опубликован на Хабре, включая расширение токенизатора и класс
ChatQADataset. Цикл собран под локальное воспроизведение без облачных сервисов. -
Предпринимателям. SFT-дообучение не требует гигантских бюджетов: вы работаете с небольшой моделью на своём железе. Для внутреннего чат-бота по продукту или базе знаний компании это рабочий путь. Из доступных в РФ альтернатив для тех, кто не готов обучать сами: YandexGPT позволяет дообучение через API, GigaChat пока такой возможности широко не предоставляет.
Статья Владимира ценна не столько кодом, сколько тем, что весь цикл написан на русском материале с русскоязычным корпусом. Большинство туториалов по дообучению используют английские данные, и читатель из РФ спотыкается на первом же шаге: где взять данные на русском? Здесь ответ дан: форумы, статьи, синтетика из лорных материалов. По моему опыту, качество SFT-дообучения на 80% определяется качеством пар, а не количеством эпох. Двести хороших пар «вопрос-ответ» дадут результат лучше, чем две тысячи шаблонных. Честная оговорка: маленькая модель не станет GPT-4. Она будет хорошо отвечать в узкой теме и плохо за её пределами. Для нишевого бота это плюс, для универсального помощника это ограничение.
Пишите с нейросетями быстрее
Попробуйте генератор контента dzen.guru, который уже дообучен под задачи авторов Дзена
Попробовать бесплатноГлавный вывод из этого цикла прост: дообучить языковую модель на своих данных может один человек, без облака и без бюджета на GPU-кластер. Сложнее всего не код, а сбор качественных пар «вопрос-ответ», и именно на этом этапе стоит потратить основное время.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Bad CaRMa: нейросеть «квартет» показала на 31 млрд записей, почему не повторит крах Vision
Компания-разработчик обобщённой модели данных «квартет» 10 июня опубликовала технический разбор под названием Bad CaRMa, в котором показала, почему их…

ИИ-боты обрушили thenumbers.com: 90% трафика оказалось нечеловеческим
Теперь дам тело новости строго по фактам из оригинала, с учётом всех требований системного промпта. Российские аналитики кино, журналисты и продюсеры, которые…

ИИ-безопасность против исследователей: модели блокируют легальный поиск уязвимостей
Российские киберзащитники и исследователи уязвимостей всё чаще сталкиваются с парадоксом: нейросети, которые должны помогать находить бреши в коде,…
Комментарии