Fine-tuning и веса · Fine-tuning and weights · урок 5 · 14 мин
Язык и стиль: continued pretraining, DPO и ORPO
Language and style: continued pretraining, DPO, ORPO
Зачем
После урока ты объяснишь, чем заказ «научи модель казахскому» отличается от заказа «научи модель говорить в тоне нашего банка», и для каждого назовёшь метод, объём данных и цену. На собеседовании это вопрос «how would you adapt an open model to a new language?» и вопрос про DPO против RLHF.
Язык — это знание, стиль — это поведение
Язык — словарь, морфология, реалии. Если базовая модель путает казахские падежи и вставляет русские слова, это пробел в знании, и SFT на паре тысяч диалогов его не закроет: нужен continued pretraining (CPT, продолжение предобучения на сыром тексте языка) на миллиардах tokens. Стиль — тон, длина, структура ответа, запреты. Это поведение: хватает prompt, затем SFT (supervised fine-tuning, обучение на парах «запрос → эталон») на сотнях – низких тысячах пар, а тонкую настройку «так лучше, так хуже» даёт preference tuning (обучение на парах ответов).
Перед любым решением — замер. Прогони базовую instruct-модель (версию, уже обученную быть ассистентом) с хорошим prompt на наборе вопросов на целевом языке. Ответы грамотны, не хватает тона — CPT не нужен. Для русского, которого в открытых корпусах много, так часто и выходит, но решает замер, а не ожидание.
Шаг 1: tokenizer fertility
Tokenizer fertility (плодовитость tokenizer) — среднее число tokens на слово. Tokenizer, обученный в основном на английском, режет казахское слово на много мелких кусков. Статья «Language Model Tokenizers Introduce Unfairness Between Languages» нашла, что один и тот же текст в разных языках даёт число tokens с разницей «up to 15 times»; это бьёт по цене, задержке и объёму текста, который помещается в context.
Условный пример. 1 000 английских слов — 1 300 tokens (1,3 на слово). 1 000 казахских слов — 3 100 tokens (3,1 на слово). Значит, казахский ответ той же длины в 2,4 раза дороже и медленнее, а в context на 32 000 tokens помещается в 2,4 раза меньше казахских документов. Меряешь на своих 10 000 словах, а не на чужой таблице.
Лечение — vocabulary extension (расширение словаря новыми tokens). Но строкам embedding (числового вектора token) и выходного слоя lm_head для новых tokens нужны начальные значения и обучение, поэтому расширять словарь имеет смысл только вместе с CPT. Цена: модель больше не совместима по tokens с оригиналом, и готовые adapters и малые модели для speculative decoding (ускорения генерации с помощью малой модели-черновика) к ней не подходят.
Шаг 2: CPT с replay
Главный риск CPT — catastrophic forgetting (катастрофическое забывание): модель становится лучше в казахском и хуже в английском, математике, коде. Статья «Simple and Scalable Strategies to Continually Pre-train LLMs» показывает, что комбинации «LR re-warming, LR re-decaying, and replay of previous data» достаточно, чтобы сравняться с полным переобучением на всех данных, в том числе при сдвиге с английского на немецкий. Replay — подмешивание данных старого распределения; re-warming и re-decaying — снова поднять, а потом плавно опустить скорость обучения.
Публичный пример — issai/Qwen3.5-35B-A3B-Base-Kazakh (карточка открыта 10.10.2026):
- около 15,9 млрд tokens, смесь 50/50 казахский и английский; казахская половина — дедуплицированный корпус из FineWeb-2, CulturaX, FinePDFs, FineWiki; английская — «retention replay» из FineWeb-Edu, Nemotron-CC и Stack-Edu (код); культурные казахские наборы повторены 3 раза;
- словарь 248 320 → 264 192 tokens, плюс 16 000 в основном кириллических казахских tokens; новые строки инициализированы методом FVT (Fast Vocabulary Transfer): среднее embeddings тех старых кусков, на которые слово резалось раньше;
- 1 эпоха, длина последовательности 16 384, скорость обучения 1e-5 с косинусным спадом до 1e-6, 2 % warmup (разогрев);
- полное обучение всех параметров, не LoRA, на двух узлах по 8 H100.
Логика выбора понятна: сдвиг большой, данных миллиарды tokens, а статья «LoRA Learns Less and Forgets Less» показала, что на continued pretraining LoRA заметно уступает полному обучению в целевом домене.
Шаг 3: вернуть ассистента и измерить цену
CPT на сыром тексте портит умение вести диалог. Обычный путь — SFT на инструкциях на целевом языке. ISSAI пошла другим путём: chat vector. Разность весов «официальная instruct минус официальная base» прибавили к CPT-модели: θ_merged = θ_cpt + (θ_inst − θ_base). Статья Chat Vector утверждает, что так модель получает диалог на новом языке «without the need for further training». Деталь, которая отличает инженера: строки special tokens (<|im_start|>, <|im_end|>, <think>) закрепили на значениях официальной модели, потому что сырой chat vector их сбивает и модель «loop and never terminate». Карточка пишет: «No additional post-training (SFT, RLHF, or RLVR) is used.»
Карточка сама показывает компромисс на benchmarks (стандартных наборах тестов): KazMMLU 82,6 → 84,0, KazCulture 60,3 → 68,7, а английский MMLU 91,2 → 89,3, GPQA-Diamond 86,9 → 82,3, GSM8K на казахском 92,7 → 89,3. Цену не прячут — её меряют и решают, приемлема ли она для задачи. Ассистенту, который считает комиссии, просадку в математике закрывают tools.
Стиль: SFT, потом DPO или ORPO
SFT учит «делай вот так». Preference tuning учит «вот это лучше того» и полезен, когда хороший и плохой ответ отличаются тонко: оба по делу, но один снисходительный.
- RLHF с PPO (reinforcement learning from human feedback, старая схема) — сначала обучить reward model (модель-оценщик), потом RL с генерацией во время обучения. Авторы DPO называют это «a complex and often unstable procedure».
- DPO (direct preference optimization) решает ту же задачу «with only a simple classification loss». Данные — тройки
prompt,chosen,rejected. Обучение раздвигает вероятности хорошего и плохого ответа относительно reference model (замороженной копии стартовой модели); параметрbeta(в TRL v1.15.0 по умолчанию 0.1) держит модель рядом с reference: чем больше beta, тем меньше отход. Документация TRL отмечает, что на практике это чаще достигается снижением вероятности плохого ответа, а не ростом хорошего. Следи заrewards/marginsиrewards/accuraciesв журнале. - ORPO (odds ratio preference optimization) берёт те же пары, но без reference model и без отдельного этапа: штраф через odds ratio (отношение шансов) добавляется к обычному SFT loss. SFT и preference за один проход, меньше памяти. В TRL v1.15.0 он лежит в
trl.experimental.orpo.
Откуда пары: два ответа модели на один запрос, человек выбирает лучший; или исправленный оператором ответ (chosen) против исходного (rejected). Без письменных правил выбора пары противоречат друг другу, и модель учит шум.
{"prompt": [{"role": "user", "content": "Почему мне отказали в кредите?"}],
"chosen": [{"role": "assistant", "content": "Понимаю, это неприятно. Причины отказа банк сообщает в письме..."}],
"rejected": [{"role": "assistant", "content": "Вам же написали, читайте внимательнее."}]}
Схема
Термины · Key terms
- continued pretraining (CPT)
- продолжение предобучения на сыром тексте языка или домена
- catastrophic forgetting
- потеря старых умений при обучении новому
- replay
- подмешивание старых данных при CPT против забывания
- tokenizer fertility
- среднее число tokens на слово
- vocabulary extension
- добавление новых tokens в словарь модели
- chat vector
- разность весов instruct и base, прибавляемая к другой модели
- preference tuning
- обучение на парах «лучший ответ / худший ответ»
- DPO (direct preference optimization)
- preference tuning относительно reference model, без reward model
- reference model
- замороженная копия стартовой модели, якорь для DPO
- ORPO (odds ratio preference optimization)
- SFT и preference в один проход без reference model
- RLHF with PPO
- старая схема: reward model, затем обучение с подкреплением
Сделай сам
Наговори голосовую заметку на 2 минуты: план для заказа «ассистент колл-центра должен отвечать по-казахски, вежливо и коротко». Назови шаги в порядке выполнения, что меряешь на каждом и при каком результате переходишь к следующему. Отдельно скажи, где здесь задача языка, а где задача стиля.
Обсуди с тьютором: перескажи план и спроси, при каких результатах замера ты бы пропустил CPT совсем; попроси тьютора сыграть интервьюера, который давит: «just fine-tune it on our Kazakh chat logs».
Проверь себя · ответ под вопросом
1Почему расширять словарь без continued pretraining плохо?
lm_head, модель их не понимает. Им нужны начальные значения, например FVT, и обучение на большом корпусе. Без CPT модель становится хуже, чем без расширения, и вдобавок теряет совместимость по tokens с оригиналом.2Что такое replay и зачем он в CPT?
3Чем ORPO отличается от DPO по устройству и памяти?
Interview questions · US / UK
1How would you adapt an open model like Qwen to Kazakh if its Kazakh is weak?
2DPO vs ORPO vs RLHF with PPO — what does each need, and why did teams move away from PPO?
3Scenario: the business wants the assistant to sound like the bank's best agents. What's your plan?
Ключевые фразы · Say it aloud
- Language is knowledge; style is behaviour.Язык — это знание, стиль — поведение.
- Measure tokenizer fertility before extending the vocabulary.Сначала измерь tokens на слово, потом расширяй словарь.
- Continued pretraining with replay, so the model doesn't forget English.CPT с подмешиванием старых данных, чтобы модель не забыла английский.
- You don't hide the regression, you measure it.Регрессию не прячут, её измеряют.
- DPO pushes chosen above rejected relative to a frozen reference.DPO поднимает chosen над rejected относительно замороженной копии.
- ORPO folds the preference signal into SFT in a single pass.ORPO встраивает предпочтения в SFT за один проход.
Материалы
- issai/Qwen3.5-35B-A3B-Base-Kazakh — model card — рецепт CPT: смесь данных, словарь, FVT, гиперпараметры (8 мин)
- issai/Qwen3.5-35B-A3B-Kazakh — model card — chat vector, закрепление special tokens, таблица оценок (6 мин)
- Simple and Scalable Strategies to Continually Pre-train LLMs (arXiv 2403.08763) — abstract: re-warming, re-decaying, replay (3 мин)
- TRL — DPO Trainer — формат пар, формула loss,
beta, журнал rewards (10 мин) - TRL — ORPO Trainer — abstract ORPO и
trl.experimental.orpo(5 мин)