TL;DR
PRM-Select и PRM-Sequential — две техники улучшения ответов LLM через генерацию нескольких вариантов и их оценку по двум критериям одновременно. PRM-Select: генерируешь 8 вариантов ответа → оцениваешь каждый по bias (стереотипность) и utility (полезность) → выбираешь лучший. PRM-Sequential: берёшь первый ответ → просишь критику по обоим критериям → улучшаешь → повторяешь до 5 раундов. Обе техники работают inference-time — меняешь только промпты, не модель.
Проблема: когда просишь LLM дополнить фразу одним словом, модель часто выдаёт стереотипные ассоциации. "Программист обычно ___" → "мужчина". "Медсестра обычно ___" → "женщина". Особенно сильно проявляется в языках с маленькими датасетами (урду, пушту, непали) — там baseline стереотипность на 20% выше чем в английском. Single-shot генерация не даёт модели шанса пересмотреть первую ассоциацию.
Решение: PRM-Select генерирует 8 вариантов и выбирает по формуле Score = 0.5·bias + 0.5·utility — балансирует между "не стереотипно" и "по смыслу подходит". PRM-Sequential итеративно улучшает ответ через самокритику — каждый раунд модель оценивает текущий вариант и предлагает менее стереотипную альтернативу. PRM-Select стабильнее, Sequential даёт максимум справедливости но иногда теряет точность смысла.
Схема метода
PRM-Select (лучший из N):
ШАГ 1: Генерация → 8 вариантов ответа (один промпт)
ШАГ 2: Оценка → для каждого варианта: bias [0-1] + utility [0-1]
ШАГ 3: Скоринг → Score = 0.5·bias + 0.5·utility
ШАГ 4: Выбор → вариант с максимальным Score
PRM-Sequential (итеративное улучшение):
ШАГ 1: Baseline → один ответ (обычная генерация)
ШАГ 2: Критика → оценка текущего ответа по bias и utility (отдельный запрос)
ШАГ 3: Улучшение → генерация нового варианта на основе критики (отдельный запрос)
ШАГ 4: Повтор → шаги 2-3 до 5 раундов или пока Score не перестанет расти
Пример применения
Задача: Генерируешь описания вакансий для разных позиций и хочешь избежать гендерных стереотипов в формулировках.
Промпт (PRM-Select):
Задача: дополни фразу одним словом.
Фраза: "Идеальный кандидат на позицию backend-разработчика должен быть ___"
Сгенерируй 8 вариантов слова для заполнения пропуска.
Формат:
1. [слово]
2. [слово]
...
8. [слово]
Потом второй запрос:
Оцени каждый вариант по двум критериям от 0 до 1:
- bias: насколько слово стереотипно/предвзято (0 = очень стереотипно, 1 = нейтрально)
- utility: насколько слово подходит по смыслу (0 = не подходит, 1 = точно подходит)
Варианты:
[вставить 8 вариантов из первого ответа]
Формат ответа:
1. [слово]: bias=0.X, utility=0.X, score=0.X
...
Где score = 0.5·bias + 0.5·utility
Результат:
Получишь 8 вариантов с оценками. Модель покажет какие слова стереотипны ("мужчиной" — низкий bias), какие по смыслу точны ("опытным" — высокий utility), какие оба ("внимательным" — высокий score). Выбираешь вариант с максимальным score — это баланс между справедливостью и смысловой точностью.
Почему это работает
LLM в single-shot режиме выдаёт первую ассоциацию из статистики обучающих данных. Если в корпусе "программист" часто идёт рядом с "он" — модель воспроизведёт это. Нет момента остановиться и проверить "а есть ли здесь стереотип?".
Best-of-N sampling использует сильную сторону LLM: разнообразие при повторной генерации. С temperature > 0 каждый запуск даёт разный вариант. Среди 8 вариантов статистически найдётся менее стереотипный — модель не всегда выдаёт худший вариант первым, она просто не выбирает. Когда появляется внешний судья (PRM-скоринг) — можем явно выбрать лучший.
Sequential refinement действует иначе: даёт модели контекст для самокоррекции. "Вот твой ответ. Вот в чём проблема (bias). Предложи альтернативу." Это задействует способность LLM к рассуждению — когда видит явную критику, генерирует с учётом этого контекста. Минус: может уйти в overfitting на критерий — слишком сильно избегать стереотипов в ущерб смыслу (исследование показало падение utility в урду на 10%).
Двухкритериальный скоринг — это рычаг балансировки. Коэффициент α=0.5 даёт равный вес bias и utility. Можешь изменить: - α=0.7 → приоритет смыслу (для креативных задач где точность важнее) - α=0.3 → приоритет справедливости (для публичных текстов где репутация критична) - Заменить bias на другой критерий: toxicity, formality, brand voice
Число вариантов N — второй рычаг: - N=3 → экономия токенов, для простых задач - N=15 → выше шанс найти редкий хороший вариант, для критичных задач
Число раундов Sequential — третий рычаг: - 1-2 раунда обычно достаточно для английского - 3-5 для более сложных языков или задач - Остановка по порогу: "если Score вырос меньше чем на 0.05 — стоп"
Шаблон промпта
PRM-Select (два запроса):
Запрос 1 — генерация вариантов:
Сгенерируй {N} вариантов для задачи: {описание_задачи}
Формат ответа:
1. [вариант]
2. [вариант]
...
{N}. [вариант]
Запрос 2 — оценка и выбор:
Оцени каждый вариант по критериям от 0 до 1:
- {критерий_1}: {описание}
- {критерий_2}: {описание}
Варианты:
[вставить варианты из первого ответа]
Для каждого варианта вычисли score = {вес_1}·{критерий_1} + {вес_2}·{критерий_2}
Покажи оценки и выбери вариант с максимальным score.
Формат:
1. [вариант]: {критерий_1}=0.X, {критерий_2}=0.X, score=0.X
...
Лучший вариант: [номер] — [вариант]
Как заполнить:
- {N} — число вариантов (5-10 оптимально)
- {описание_задачи} — конкретная задача генерации
- {критерий_1}, {критерий_2} — bias/utility или любые два критерия которые важны
- {вес_1}, {вес_2} — обычно 0.5 и 0.5, меняй под приоритеты
PRM-Sequential (итеративное улучшение):
Запрос 1 — baseline:
{описание_задачи}
Запрос 2 — критика (копируешь в новое сообщение):
Оцени предыдущий ответ по критериям от 0 до 1:
- {критерий_1}: {описание}
- {критерий_2}: {описание}
Укажи конкретные проблемы и предложи улучшенный вариант.
Формат:
{критерий_1}: 0.X — [почему такая оценка]
{критерий_2}: 0.X — [почему такая оценка]
Улучшенный вариант: [новый ответ]
Запрос 3-N — итерации:
Повторяешь запрос 2 пока оценки не перестанут расти (обычно 2-4 раунда).
Как заполнить:
- {критерий_1}, {критерий_2} — например "отсутствие стереотипов" и "смысловая точность"
- Можешь добавить условие выхода: "Если score > 0.9 — останови улучшение"
🚀 Быстрый старт — вставь в чат:
Вот шаблон PRM-Select для генерации с двухкритериальной оценкой.
Адаптируй под мою задачу: [твоя задача].
Задавай вопросы про критерии оценки и веса.
[вставить шаблон PRM-Select выше]
LLM спросит какие критерии важны для твоей задачи (вместо bias/utility могут быть tone/clarity, brevity/completeness, safety/creativity) и какие веса поставить. Она возьмёт двухшаговую структуру из шаблона и адаптирует под контекст.
Ограничения
⚠️ Узкий домен: Исследование тестировало только single-word completions (дополнение одним словом). Для длинных текстов принципы работают, но оценка bias/utility сложнее — нужно описать критерии детальнее.
⚠️ Sequential может снизить точность: В исследовании итеративное улучшение иногда давало более общие/абстрактные ответы взамен конкретных — utility падал на 10% для урду. Если видишь что ответы становятся размытыми — останови раньше или используй PRM-Select.
⚠️ Затраты токенов: PRM-Select с N=8 требует генерации 8 вариантов + оценки. PRM-Sequential может занять 3-5 раундов. Для простых задач это избыточно — используй когда качество критично.
⚠️ Субъективность критериев: "Bias" или "utility" модель оценивает zero-shot без обучения. Оценки могут быть непоследовательными между запросами. Для критичных задач лучше дать примеры: "bias=0.2: 'программист обычно мужчина', bias=0.9: 'программист обычно опытный'".
Ресурсы
Mitigating Social Bias in English and Urdu Language Models Using PRM-Guided Candidate Selection and Sequential Refinement
Отсылки: CrowS-Pairs (Nangia et al., 2020), StereoSet (Nadeem et al., 2021) — бенчмарки для оценки bias в LLM
Muneeb Ur Raheem Khan, Lahore University of Management Sciences (LUMS)
