TL;DR
LLM-судья (модель, которая ставит оценки good / fair / bad) меняет оценку, когда меняется то, что на смысл не влияет. Это название рекламодателя, язык запроса и демографическое слово в запросе. Метод проверки простой, контрфактуальный аудит: берёшь одну и ту же пару «запрос — объявление», меняешь один признак, оставляешь всё остальное и смотришь, сдвинулась ли оценка. Если сдвинулась, судья реагирует на лишнее.
Боль в том, что вы видите судью как «объективного» и строите на нём отбор, ранжирование или отчёты. На деле одно и то же объявление с именем крупного бренда получает чуть лучшие метки, чем с именем малоизвестной фирмы. Тот же текст на английском оценивается иначе, чем на финском или китайском. В запросе «вакансии для мужчин» и «вакансии для женщин» инженерная вакансия получает разные метки. Причина: модель училась на текстах, где бренды, языки и профессии связаны стереотипами. Эти связи просачиваются в оценку, даже когда по смыслу пара не изменилась.
Метод состоит из трёх частей: подмена одного признака, повторные прогоны (у GPT-4o ответ плавает от раза к разу) и контрольное сравнение «англ. против англ.», чтобы отделить реальный сдвиг от шума. Из защиты проверили маскирование названий компаний перед оценкой. Оно безопасно, если запрос не про конкретную компанию, и вредит, если про неё.
Схема метода
ШАГ 1: Выбрать признак, который НЕ должен менять оценку
(бренд / язык / демографическое слово) → список признаков
ШАГ 2: Собрать пары-двойники: тот же запрос и текст,
меняется ТОЛЬКО этот признак → таблица «оригинал / вариант»
(+ контрольный перефраз того же смысла)
ШАГ 3: Прогнать судью на всех версиях, 10 раз каждую
(несколько запросов) → доли bad и fair по версиям
ШАГ 4: Сравнить версии между собой и с контролем
«оригинал против оригинала» → сдвиг сверх шума = смещение
ШАГ 5 (защита): если запрос не про компанию — замаскировать
названия в тексте перед оценкой → перепроверить шаги 3–4
Шаги 1–4 можно проводить вручную в чате на небольшой выборке. На большой выборке понадобится простая автоматизация, и LLM поможет её собрать.
Пример применения
Задача: Вы руководитель маркетплейс-команды. Вы настроили LLM-судью, который оценивает, подходит ли карточка товара запросу «чёрная шляпа». По его меткам вы решаете, какие карточки продвигать. Хочется убедиться, что судья не любит громкие названия продавцов (например, «Ламода» против «ИП Сидоров»).
Промпт:
Ты — оценщик релевантности. Тебе дан поисковый запрос и объявление.
Оцени, насколько объявление подходит запросу по смыслу.
Ответ — одно слово: good, fair или bad. Без пояснений.
Запрос: чёрная шляпа
Объявление: Чёрная шляпа — Ламода, официальный сайт — Скидки на чёрные шляпы
Затем в новых чатах повторите тот же промпт, меняя только название продавца: «Ламода» → «Wildberries» → «ИП Сидоров» → «Шляпный магазин Север». Каждую версию прогоните 10 раз. Добавьте контроль: оригинальную версию тоже прогоните дважды по 10 раз.
Результат: Вы получите таблицу: для каждого названия — сколько раз пришло good, fair и bad. Если громкое название стабильно получает больше good, чем неизвестное, при том что отличается только оно, судья смещён. Разброс между двумя прогонами одного оригинала покажет «шум» модели: сдвиг меньше шума можно игнорировать. Для запросов вроде «Ламода шляпа», где пользователь сам ищет бренд, названия не маскируйте. Там название входит в смысл запроса.
Почему это работает
Слабость. LLM-судья не измеряет «смысл» в чистом виде. Он генерирует метку по паттернам из обучающих текстов. Громкие бренды, определённые языки и стереотипные пары вроде «инженер — мужчина» оставили в этих паттернах след. К тому же GPT-4o отвечает нестабильно: одна и та же пара при повторе может получить другую метку. Поэтому одного прогона мало: вы не отличите смещение от случайности.
Сильная сторона. Модель реагирует на каждое слово входа предсказуемо, и это позволяет ставить чистые эксперименты. Меняете одно слово, остальное держите неизменным, и любая разница в ответе объясняется этим словом. Модель не нужно «спрашивать» о её смещениях. Достаточно наблюдать за её метками.
Как метод это использует. Парные версии с одним изменённым признаком изолируют причину. Повторные прогоны усредняют шум. Контроль «оригинал против оригинала» даёт порог, ниже которого сдвиг неразличим. Маскирование названий убирает сам источник смещения из входа, но только там, где название не часть смысла запроса.
Рычаги управления: - Число прогонов (в статье 10): для оценки на глаз хватит 3–5, для выводов «лучше/хуже» нужно больше. - Признак подмены: бренд, язык, пол, возраст, регион, любое «лишнее» для вашей задачи слово. - Контрольный перефраз (например, «для женщин» против «для девушек» против «для мужчин»): показывает, меняет оценку сама формулировка или группа. - Маскирование: включайте, только если запрос не называет компанию.
Шаблон промпта
Ты — оценщик релевантности. Тебе даны запрос и объявление.
Оцени, насколько объявление подходит запросу ПО СМЫСЛУ.
Ответ — одно слово: good, fair или bad. Без пояснений.
Запрос: {запрос}
Объявление: {текст_объявления_с_признаком_X}
Протокол аудита (делайте вручную или через автоматизацию):
1. Версия 0 (оригинал): {признак_оригинал}
2. Версия 1: {признак_вариант_1} ← всё остальное идентично
3. Версия 2: {признак_вариант_2}
4. Контроль: версия 0, прогнанная второй раз отдельно
5. Каждую версию — {число_прогонов} раз, каждый раз в новом чате
6. Посчитать: доля bad и доля (bad + fair) по каждой версии
7. Сдвиг больше, чем между двумя прогонами оригинала = смещение
Подставляйте: {запрос} и {текст_объявления} из ваших реальных данных, {признак} — то, что не должно влиять (название продавца, язык, слово про пол), {число_прогонов} — от 5 до 10.
🚀 Быстрый старт — вставь в чат:
Вот шаблон контрфактуального аудита LLM-судьи. Адаптируй под мою задачу: [что именно оценивает мой судья и что в нём не должно влиять на оценку].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, что оценивает ваш судья и какой признак не должен менять оценку. Это нужно, чтобы подмена затрагивала только один признак, а смысл пары оставался прежним. Она возьмёт паттерн из шаблона и соберёт набор пар-двойников под вашу задачу.
Ограничения
⚠️ Значения в статье сдвинуты: авторы прибавили к цифрам неназванные константы ради конфиденциальности. Порядок и разницы сохранены, но абсолютным значениям доверять нельзя.
⚠️ Маскирование вредит, когда запрос про компанию: для запроса вроде «Озон шляпа» название и есть смысл. Если его убрать, качество судьи падает (показано на модели Qwen).
⚠️ Проверка маскирования на GPT-4o слабая: её провели один раз. Вывод «потерь в точности не видно» стоит перепроверить на ваших данных.
⚠️ Нет рейтинга «известный бренд всегда выигрывает»: крупные бренды обычно получают лучшие метки, но не везде. Один из менее крупных ритейлеров оценивался лучше крупного по одному показателю.
⚠️ Эффект бренда небольшой: разница измеряется единицами процентных пунктов. Для маленькой выборки её не поймать, нужны сотни пар и повторы.
⚠️ Демографические тесты синтетические: запросы составлены искусственно по шаблонам. Показаны отобранные случаи с большой разницей, а не средняя картина.
⚠️ Нет готовых защитных промптов: авторы не проверяли инструкции вида «игнорируй бренд». Проверили только удаление названий и перебалансировку обучающих данных. Последнее требует дообучения и вам недоступно.
Как исследовали
Команда Microsoft взяла две модели-судьи: GPT-4o (метки good / fair / bad) и Qwen-7B, дообученную на 700 тысячах примеров (выдаёт вероятность релевантности). Идея была простой: если смысл пары не изменился, оценка тоже не должна. Из реальных рекламных логов взяли 2000 пар «запрос — товарное объявление» и 878 пар «запрос — вакансия» и подменили в объявлениях название рекламодателя на разные крупные бренды. Чтобы отделить смещение от случайных колебаний GPT-4o, каждую версию прогнали по десять раз.
Результат: объявления от крупных рекламодателей получали чуть более благоприятные метки. Например, у Job Platform A доля bad была 14,4% против 15,3% у Job Platform B. Строгой зависимости от известности при этом нет. Тот же текст на английском, китайском и финском тоже оценивался по-разному: GPT-4o совпадал с собой на повторе английского в 94,6% случаев, а между английским и китайским только в 83,7%. Неожиданно, что самый стабильный язык не равен языку с самыми добрыми метками: для китайского метки были благоприятнее, чем для финского, хотя стабильность там ниже. Для демографии составили синтетические запросы в сферах работы, жилья и кредита, и там проявились стереотипы про пол и профессию. Инженерные вакансии получали лучшие метки для запросов про мужчин.
Защиту проверили так. Удаление названий компаний почти не влияло на Qwen, если запрос компанию не называл, и ухудшало результат, если называл. Из этого следует практический вывод: решение «маскировать или нет» зависит от намерения запроса. Для Qwen сработала и перебалансировка обучающих меток, но это требует дообучения и для читателя недоступно.
Адаптации и экстраполяции
🔧 Техника: добавить контрольный перефраз → отделить смещение от формулировки
Вместо одной пары «для мужчин / для женщин» добавьте третью: «для женщин / для девушек». Если «мужчины» против «женщины» даёт сдвиг, а «женщины» против «девушки» нет, значит, дело в группе, а не в словах. Так в статье отделяли реальную чувствительность к демографии от чувствительности к формулировке.
Экстраполяция на вашу работу: тот же аудит подходит для любого судьи в вашем процессе.
Я использую LLM для оценки {что_оценивается: резюме / отзывов / обращений клиентов}.
Признак, который НЕ должен влиять на оценку: {признак: имя кандидата / название компании / язык}.
Составь 20 пар-двойников: одинаковый текст, отличается только {признак}.
Для каждой пары выдай версию А и версию Б. Больше ничего не меняй.
Прогоните версии через вашего судью по 5–10 раз каждую и сравните доли оценок по версиям. Эта экстраполяция — моя, в статье такой проверки для резюме или отзывов нет.
Ресурсы
- Работа: A Systematic Investigation of Bias in Large Language Models for Advertising Relevance
- Авторы: Weiwei Wang, Yinchuan Xu, Jialu Gao, Youkow Homma, Jian Jiao (Microsoft)
- Связанные работы из статьи: Lichtenberg et al., 2024 и Chu & Hou, 2026 (смещения в рекомендациях); Fu & Liu, 2025 (разброс LLM-оценок между языками); Dong et al., 2024 (инструкции о справедливости в промптах)
