на два токена. Датасет ChatQADataset маскирует loss: он считается только на токенах ответа ассистента (на остальных позициях — -100). При загрузке base-модели словарь эмбеддингов и выходного слоя расширяется до нового размера, новые веса инициализируются средним значением старых. Цикл обучения использует AdamW, cosine scheduler с warmup, gradient clipping и более низкий learning rate (1e-5 против 3e-4 на pre-train). SFT занял 20 минут (15 эпох). К концу обучения loss снизился с 3.7 до 2.1, но качество генерации стало ухудшаться из-за переобучения на маленьком датасете. Сравнение до и после: базовая модель продолжала текст диалогом (например, повторяла «Я не знаю»), а дообученная пыталась ответить на вопрос (например, про Гибельный шторм). Модель усвоила формат ответа, но по фактам лора часто ошибается.