Обучение базовой языковой модели не заканчивается на загрузке в нее гигабайтов текста. Чтобы нейросеть отвечала полезно, безопасно и в нужном тоне, ее нужно адаптировать под ожидания человека. DPO (Direct Preference Optimization, или прямая оптимизация предпочтений) – это алгоритм, который позволяет “выровнять” поведение модели напрямую, без создания сложных промежуточных систем оценки.
| Что разберем | Что это даст |
| Как работает DPO на практике | Поймете, подходит ли этот метод для дообучения вашей модели |
| Как правильно собрать датасет | Сможете подготовить данные так, чтобы модель действительно стала лучше |
| Типичные ошибки разметки | Не потратите время на обучение, которое только испортит нейросеть |
Суть метода DPO простыми словами
Обычно после базового обучения модель умеет генерировать текст, но не понимает, какой ответ хороший, а какой – плохой. Чтобы это исправить, раньше использовали метод RLHF (обучение с подкреплением на основе отзывов людей). Для RLHF нужно было создать отдельную нейросеть-оценщика, которая ставила бы баллы основной модели.
Метод DPO убирает лишнее звено. Вы просто показываете модели промпт (запрос) и два варианта ответа: один хороший, второй плохой. Алгоритм математически настраивает веса нейросети так, чтобы она увеличивала вероятность генерации хорошего ответа и снижала вероятность генерации плохого.
Формула применения: Запрос + Предпочтительный ответ (Chosen) + Отклоненный ответ (Rejected).
Какой метод выбрать: SFT, DPO или RLHF
Выбор алгоритма зависит от того, на каком этапе находится ваша модель и какую задачу вы решаете. DPO не заменяет другие подходы, а применяется на конкретном этапе.
Supervised Fine-Tuning (SFT)
Когда использовать: Когда модель вообще не умеет отвечать в нужном формате или не знает специфики вашей задачи.
Пример: Вы хотите, чтобы модель писала SQL-запросы. Вы собираете тысячи пар “Вопрос – Правильный SQL-код”. Модель учится синтаксису и структуре.
Ограничение: SFT учит модель “как отвечать”, но не учит “как отвечать лучше”.
Direct Preference Optimization (DPO)
Когда использовать: Когда модель уже прошла SFT (умеет решать задачу), но вы хотите откорректировать ее стиль, убрать галлюцинации, сделать ответы более вежливыми или безопасными.
Пример: Модель техподдержки отвечает правильно, но слишком сухо и канцелярски. Вы собираете пары, где хороший ответ – эмпатичный, а плохой – бюрократичный. DPO корректирует тон.
Ограничение: DPO не вложит в модель новые фактические знания, если их там не было.
RLHF
Когда использовать: Когда вы обучаете фундаментальную модель уровня GPT-4 или YandexGPT и у вас есть ресурсы на содержание команды разметчиков из сотен человек и вычислительные мощности для обучения нескольких моделей одновременно.
Пример: Создание универсального чат-бота для миллионов пользователей с десятками критериев безопасности.
Ограничение: Слишком дорого и сложно для 99% прикладных бизнес-задач.
Как собрать датасет для DPO
Для запуска DPO вам потребуется набор данных в формате JSONL, где каждая строка содержит три элемента: prompt, chosen и rejected.
Пример структуры данных для обучения бота службы доставки:
| Элемент | Содержание | Почему это работает |
| Prompt | Курьер опоздал на два часа, где моя пицца?! | Реальный пользовательский запрос с негативной эмоцией. |
| Chosen | Простите за эту ситуацию. Давайте я прямо сейчас свяжусь с курьером и узнаю, где он, а вам оформлю промокод на следующий заказ. | Ответ решает проблему и снижает градус конфликта (целевое поведение). |
| Rejected | Согласно правилам сервиса, задержка доставки возможна из-за погодных условий. Ожидайте. | Ответ формально верный, но токсичный для клиента (поведение, от которого нужно отучить). |
Частые ошибки при подготовке DPO-датасета
Качество DPO напрямую зависит от разницы между хорошим и плохим ответом. Если собрать данные неправильно, модель научится не тому, что вы задумывали.
Ошибка 1: Разная длина ответов
В чем проблема: Разметчики часто пишут подробный хороший ответ (Chosen) и короткий плохой (Rejected). Алгоритм находит самую простую закономерность и решает: “Хороший ответ – это длинный ответ”.
К чему приводит: Модель начинает лить воду, выдавая огромные тексты на простые вопросы, вроде “Как сбросить пароль?”.
Как избежать: Требуйте от разметчиков, чтобы длины Chosen и Rejected были примерно одинаковыми. Плохой ответ должен быть плохим по смыслу или тону, а не по количеству символов.
Ошибка 2: Использование DPO для внедрения фактов
В чем проблема: Попытка научить модель новым знаниям (например, актуальным тарифам компании) через механизм предпочтений.
К чему приводит: Модель не запоминает факты стабильно и начинает галлюцинировать, придумывая цены или условия, похожие на правду.
Как избежать: Если нужно добавить знания – используйте RAG (поиск по базе знаний) или дообучайте модель через SFT. DPO используйте только для полировки формата, стиля и безопасности.
Ошибка 3: Одинаковое начало в обоих вариантах
В чем проблема: И хороший, и плохой ответы начинаются с одной и той же шаблонной фразы (например, “Спасибо за ваш вопрос…”).
К чему приводит: На этапе обучения алгоритму сложнее вычислить градиент, так как первые токены идентичны. Модель медленнее учится различать качество ответов.
Как избежать: Диверсифицируйте структуру ответов. Плохой ответ должен отличаться от хорошего с самых первых слов.
Ошибка 4: Слишком очевидные “плохие” ответы
В чем проблема: В качестве Rejected используется откровенный бред или набор случайных слов.
К чему приводит: Модель не учится тонким различиям. Она легко понимает, что осмысленный текст лучше бессмысленного, но в реальной работе продолжит выдавать посредственные ответы.
Как избежать: Плохой ответ (Rejected) должен быть правдоподобным. Это должен быть ответ, который логически возможен, но не устраивает вас по стилю, точности формулировок или уровню эмпатии.
Ограничения метода
Не используйте DPO, если:
- Ваша базовая модель еще не прошла SFT. DPO не учит разговаривать, оно учит выбирать лучшее из того, что модель уже умеет. Накатывать DPO на сырую базовую модель (Base) бессмысленно.
- У вас нет четких критериев качества. Если два эксперта в вашей команде не могут договориться, какой из двух ответов лучше, алгоритм тоже не сможет. Данные для DPO требуют однозначности.
- Задача требует строгой бинарной логики. Если в задаче есть только один абсолютно верный ответ (например, математическое вычисление), DPO избыточен. Достаточно SFT.
Коротко о главном
- DPO – это способ отучить модель от нежелательных ответов и приучить к желаемым без создания отдельной нейросети-оценщика.
- Метод применяется только после того, как модель прошла базовое дообучение (SFT) и уже умеет генерировать релевантный текст.
- Для работы нужен датасет из троек: запрос, хороший вариант, плохой вариант.
- Следите за тем, чтобы плохие и хорошие варианты были одинаковой длины, иначе модель просто научится писать длинные тексты.
- DPO правит стиль, тон, безопасность и формат, но не подходит для загрузки в модель новых фактов.