Fine-tuning и веса · Fine-tuning and weights · урок 5 · 14 мин

Язык и стиль: continued pretraining, DPO и ORPO

Language and style: continued pretraining, DPO, ORPO

ТемыFine-tuningОбучение моделей

Зачем

После урока ты объяснишь, чем заказ «научи модель казахскому» отличается от заказа «научи модель говорить в тоне нашего банка», и для каждого назовёшь метод, объём данных и цену. На собеседовании это вопрос «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 учит «вот это лучше того» и полезен, когда хороший и плохой ответ отличаются тонко: оба по делу, но один снисходительный.

Откуда пары: два ответа модели на один запрос, человек выбирает лучший; или исправленный оператором ответ (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 плохо?
У новых tokens нет обученных embeddings и строк lm_head, модель их не понимает. Им нужны начальные значения, например FVT, и обучение на большом корпусе. Без CPT модель становится хуже, чем без расширения, и вдобавок теряет совместимость по tokens с оригиналом.
2Что такое replay и зачем он в CPT?
Replay — подмешивание данных старого распределения, например английского текста и кода, к тексту нового языка. Он защищает от catastrophic forgetting. В рецепте ISSAI английская половина смеси 50/50 названа «retention replay».
3Чем ORPO отличается от DPO по устройству и памяти?
DPO нужна reference model, относительно которой раздвигаются вероятности chosen и rejected. ORPO обходится без неё и добавляет штраф через odds ratio прямо к SFT loss, так что SFT и preference идут за один проход. Поэтому ORPO экономит память и этап.

Interview questions · US / UK

1How would you adapt an open model like Qwen to Kazakh if its Kazakh is weak?
Strong answer: Measure baseline and tokenizer fertility first; continued pretraining on billions of Kazakh tokens with English replay and LR re-warming; vocabulary extension only with CPT and a sensible init like FVT; restore chat with SFT or a chat vector; evaluate per language and check general-ability regression.
2DPO vs ORPO vs RLHF with PPO — what does each need, and why did teams move away from PPO?
Strong answer: PPO needs a reward model and online generation, complex and unstable; DPO needs prompt/chosen/rejected triples and a frozen reference model with beta, a simple classification loss; ORPO uses the same pairs, no reference model, folded into SFT in one pass; all need written labelling rules.
3Scenario: the business wants the assistant to sound like the bank's best agents. What's your plan?
Strong answer: Style is behaviour; start with a system prompt and examples and measure; then SFT on a few hundred to low thousands of reviewed replies with volatile numbers replaced by tool calls; DPO or ORPO on agent-corrected vs original replies for subtle tone; ship only if it beats the prompt baseline with no safety regression.

Ключевые фразы · Say it aloud

Материалы