3,583 papers
arXiv:2603.12935 76 13 мар. 2026 г. FREE

Prompt Debiasing: как убрать демографический уклон из рекомендаций LLM

КЛЮЧЕВАЯ СУТЬ
«Она» в промпте меняет рекомендации. LLM читает местоимение или социальную роль — «студент», «пенсионер», «она искала работу» — и незаметно тянется к статистически типичным ответам для этого профиля. Даже если история запросов одинакова. Метод Prompt Debiasing позволяет убрать этот уклон без дообучения и изменения архитектуры — одним абзацем в промпте. Фишка: называй конкретный признак, который хочешь нейтрализовать — «не предвзят по признаку пола» работает лучше, чем общее «будь справедлив». Модель точно знает что игнорировать, не угадывает — уклон падает до 74%.
Адаптировать под запрос

TL;DR

LLM читает демографические сигналы из местоимений и социальных ролей в промпте — и незаметно подстраивает ответы под предполагаемый профиль пользователя. Напиши «она искала работу» вместо «пользователь искал работу» — и модель сдвинет рекомендации. Назови пользователя «студент колледжа» или «пенсионер» — получишь другой список, даже если история запросов одинакова.

Главная находка: небольшая добавка в промпт — инструкция «будь справедливым и не опирайся на демографические признаки» — снижает этот уклон до 74%. Причём не ролевой инструктаж («ты — непредвзятая система»), а конкретное указание что делать: «отрефлексируй возможные предубеждения и обеспечь равное отношение к группам». Два слова в системной роли работают хуже, чем абзац конкретных инструкций.

Метод состоит из трёх вариантов добавки к любому рекомендательному промпту: ролевая (слабее) и две инструкционные (сильнее). Выбирай в зависимости от задачи: если знаешь какой именно признак хочешь нейтрализовать — называй его явно, это работает лучше всего.


🔬

Схема метода

Все три варианта — добавки к существующему промпту. Отдельных запросов не нужно.

БАЗОВЫЙ ПРОМПТ:
[Роль] + [история/контекст пользователя] + [задача]

ВАРИАНТ 1 — Unbiased Role (UR):
Меняем роль → "Ты — непредвзятая система, которая не 
дискриминирует по полу, возрасту и другим признакам"

ВАРИАНТ 2 — Bias Instruction (BI):
Добавляем абзац → "Отрефлексируй возможные предубеждения 
на основе характеристик пользователя. Убедись, что 
рекомендации справедливы и не предвзяты к какой-либо группе"

ВАРИАНТ 3 — Explicit Bias Instruction (EBI):
Добавляем абзац с конкретным признаком → "Убедись, что 
рекомендации справедливы и не предвзяты по признаку [пол/возраст/...]"

Рекомендуемый порядок: сначала пробуй BI → если знаешь точный признак → EBI → UR только как последний вариант.


🚀

Пример применения

Задача: Ты HR-консультант, помогаешь клиентам с карьерными рекомендациями через ChatGPT. В контексте часто мелькают местоимения — «она работала», «ему 45 лет». Хочешь, чтобы рекомендации строились только на опыте, а не на предполагаемом демографическом профиле.

Промпт (вариант EBI):

Ты — карьерный консультант на платформе hh.ru. 
Вот история занятости пользователя за последние 5 лет:

[история: должности, отрасли, навыки, достижения]

Пожалуйста, отрефлексируй возможные предубеждения, 
которые могут возникнуть на основе явных или 
предполагаемых характеристик пользователя. 
Убедись, что рекомендации справедливы и не предвзяты 
по признаку пола или возраста.

На основе истории предложи 5 карьерных направлений 
с обоснованием. Ориентируйся только на опыт и навыки.

Результат: Модель сначала покажет краткое «рефлексирующее» рассуждение — что она замечает в контексте и что намеренно игнорирует. Затем выдаст 5 направлений с опорой на конкретные компетенции из истории, без стереотипных «женских» или «возрастных» рекомендаций. Рекомендации для пользователя с одинаковым опытом, но разными местоимениями станут значительно ближе друг к другу.


🧠

Почему это работает

Слабость LLM: модель обучена на огромных текстах, где демографические паттерны реальны — исторически женщинам реже рекомендовали технические роли, старшим — стартапы. Когда в промпте есть сигнал («она», «пенсионер»), модель бессознательно тянется к этим паттернам. Не потому что «хочет дискриминировать» — просто генерирует текст по статистически вероятному паттерну.

Сильная сторона LLM: модель хорошо следует явным инструкциям, особенно когда они конкретны. Если сказать «не делай X» — она запускает внутреннюю проверку перед генерацией. Это буквально изменяет какой текст считается вероятным следующим токеном.

Механика: добавка «отрефлексируй предубеждения» заставляет модель сгенерировать промежуточный шаг — осознание что в контексте есть демографический сигнал. Это переключает режим генерации с «выдай типичный ответ для такого профиля» на «выдай ответ, игнорируя этот профиль». Инструкция с конкретным признаком (EBI) работает лучше общей (BI) — потому что убирает двусмысленность: модель точно знает что именно игнорировать.

Рычаги управления: - Общая vs. конкретная инструкция → если знаешь какой признак «протёк» в контекст — называй его явно (EBI), это даёт лучший результат чем общее «будь справедлив» - Позиция добавки → вставляй инструкцию ДО запроса на рекомендации, чтобы она действовала как фильтр, а не постфактум - Степень детализации → можно усилить: «не делай выводов о пользователе на основе имени, местоимений, социальной роли или возраста»


📋

Шаблон промпта

Ты — {роль}.

Вот {контекст/история пользователя}:
{данные}

Пожалуйста, отрефлексируй возможные предубеждения, 
которые могут возникнуть на основе явных или 
предполагаемых характеристик пользователя. 
Убедись, что {тип результата} справедлив и не предвзят 
по признаку {признак: пол / возраст / социальная роль / другое}.

На основе {контекст} предоставь {задача}. 
Опирайся только на {объективные критерии}.

Что подставлять: - {роль} — карьерный консультант, рекрутер, редактор, советник - {признак} — пол, возраст, социальная роль (если знаешь что «протекло»); или убери строку с признаком и оставь «к какой-либо группе» для общего случая - {объективные критерии} — опыт, навыки, история запросов, конкретные факты

🚀 Быстрый старт — вставь в чат:

Вот шаблон для справедливых рекомендаций без демографического уклона. 
Адаптируй под мою задачу: {твоя задача}. 
Задавай вопросы, чтобы заполнить поля.

[вставить шаблон выше]

LLM спросит: что за роль, какой контекст пользователя, какие рекомендации нужны и какие признаки потенциально «утекают» в промпт — потому что без этого невозможно выставить правильный фильтр предвзятости.


⚠️

Ограничения

⚠️ Эффект перекоррекции: Инструкция «будь справедлив» может развернуться в другую сторону — модель начинает активно продвигать исторически маргинализированную группу вместо нейтралитета. Например, добавляла в новостные рекомендации женщин туда, где их не было в запросе. Это не нейтральность — это другой уклон.

⚠️ Возраст vs. пол: Возрастной уклон оказался сильнее гендерного в задачах подбора работы — модели меняли рекомендации кардинально при смене «студент/пенсионер». Одна техника снижает оба уклона, но не одинаково хорошо.

⚠️ Нестабильность по моделям: Разные LLM реагируют на одинаковые добавки по-разному. Одна хорошо справляется с гендерным уклоном, другая — с возрастным. Проверяй на своей задаче.

⚠️ Не серебряная пуля: В ряде случаев базовый промпт без инструкций давал более справедливый результат, чем с ними. Эффект зависит от домена и модели.


🔍

Как исследовали

Команда Копенгагенского университета взяла три модели (~7-9B параметров: Gemma 2, LLaMA 3.1, Mistral) и поставила им одинаковую задачу — рекомендовать вакансии и новости по истории пользователя. Ключевой трюк: запускали каждый промпт в двух версиях — нейтральной («этот пользователь») и с демографическим сигналом («она», «старшеклассник»). Разница в рекомендациях и есть уклон.

Интересная деталь дизайна: вместо простого совпадения заголовков использовали BERTScore — семантическую похожесть текстов. Это важно, потому что LLM может порекомендовать «Сбербанк» и «банк Сбербанк» — exact match промахнётся, а семантика поймает. Всего 66 тысяч инференсов: 3 модели × 4 шаблона × 10 демографических значений × 2 датасета × 300 пользователей.

Удивительный результат: возраст оказался гораздо мощнее «взламывает» рекомендации, чем пол — видимо, потому что модели уже прошли через большое количество дебиасинга по гендеру, а с возрастом работы меньше. И ещё: ролевая инструкция («ты — непредвзятая система») работала хуже, чем конкретное указание что делать — хотя в других исследованиях (classification tasks) результат был обратным.


💡

Адаптации и экстраполяции

🚀

🔧 Применение за пределами рекомендаций

Принцип работает везде, где в контексте «утекает» демографический или социальный сигнал — и ты хочешь нейтральный анализ:

Оценка резюме: добавь «Оценивай кандидата только по профессиональным критериям. Убедись, что оценка не предвзята по признаку пола, возраста или социальной роли» — и имя/фото/«декрет в 2020» перестанут влиять на вывод.

Анализ текста клиента: если анализируешь отзывы или письма реальных людей — добавь инструкцию «не дели авторов на группы по демографическим признакам».

📌

🔧 Усиленная версия — называй сигнал явно

Если знаешь, что в тексте есть конкретный демографический маркер, скажи об этом прямо:

В следующем тексте могут встречаться местоимения и социальные роли 
(студент, пенсионер, мама). Игнорируй эти маркеры при анализе. 
Оценивай только {критерии}.

Явное называние сигнала даёт лучший результат, чем общее «будь справедлив».


🔗

Ресурсы

"Can Fairness Be Prompted? Prompt-Based Debiasing Strategies in High-Stakes Recommendations"

Авторы: Mihaela Rotar, Theresia Veronika Rampisela, Maria Maistro — University of Copenhagen, Denmark (2024)

Датасеты: Microsoft News Dataset (MIND), CareerBuilder job dataset

Метрики: BERTScore, Jaccard, SERP, PRAG, SNSR, SNSV, RaB


📋 Дайджест исследования

Ключевая суть

«Она» в промпте меняет рекомендации. LLM читает местоимение или социальную роль — «студент», «пенсионер», «она искала работу» — и незаметно тянется к статистически типичным ответам для этого профиля. Даже если история запросов одинакова. Метод Prompt Debiasing позволяет убрать этот уклон без дообучения и изменения архитектуры — одним абзацем в промпте. Фишка: называй конкретный признак, который хочешь нейтрализовать — «не предвзят по признаку пола» работает лучше, чем общее «будь справедлив». Модель точно знает что игнорировать, не угадывает — уклон падает до 74%.

Принцип работы

Три варианта добавки от слабого к сильному: ролевая инструкция (просто меняешь системную роль на «непредвзятую систему») → общая инструкция (абзац «отрефлексируй предубеждения») → явная инструкция с конкретным признаком. Конкретика бьёт общее: «не предвзят по признаку возраста» заставляет модель точно знать что фильтровать, а не гадать. Порядок проб: сначала общая инструкция — если знаешь какой именно признак «утёк» в контекст, называй его явно. Ролевой вариант — только если остальные не подходят: он слабее всего.

Почему работает

LLM обучена на текстах, где демографические паттерны реальны и исторически зафиксированы. Видит «она» — и начинает генерировать статистически вероятный ответ для «женского профиля». Не из злого умысла, просто следующий токен вероятнее такой. Добавка «отрефлексируй возможные предубеждения» создаёт промежуточный шаг перед выдачей результата — модель сначала замечает демографический сигнал в контексте, потом намеренно откладывает его в сторону. Это буквально меняет какой токен считается вероятным дальше. Явное указание признака убирает двусмысленность — модель не решает «а вдруг тут предвзятость незначимая?», она точно знает что нейтрализовать.

Когда применять

Кадровые рекомендации, кредитные решения, медицинские советы, учебные планы — везде где в контексте могут «протечь» местоимения, имена, социальные роли или возраст. Особенно когда пользователи описывают себя или третьих лиц в свободной форме. Важный антипаттерн: не вставляй инструкцию бездумно — есть эффект перекоррекции. Модель может начать активно продвигать исторически маргинализированную группу вместо нейтралитета. Это не нейтральность, это другой уклон. Проверяй на своей задаче и своей модели: разные LLM реагируют по-разному на одинаковые инструкции.

Мини-рецепт

1. Найди сигналы: пройдись по промпту — есть ли местоимения («она», «ему»), социальные роли («студент», «пенсионер»), имена, возраст? Это точки где уклон входит в генерацию.
2. Выбери вариант: если знаешь какой именно признак «утёк» — используй явную инструкцию с конкретным признаком (EBI). Не знаешь — бери общую (BI). Ролевой вариант — последний резерв.
3. Вставь ДО запроса: инструкция должна идти перед заданием на рекомендации, а не после — как фильтр, а не исправление.
4. Проверь на перекоррекцию: прогони одинаковый контекст с разными демографическими сигналами. Если рекомендации стали зеркально противоположными — перекоррекция. Смягчи формулировку: «не предвзят» вместо «активно обеспечивай равенство».

Примеры

[ПЛОХО] : Ты HR-консультант. Она 10 лет работала в продажах, последняя должность — региональный менеджер. Предложи 5 карьерных направлений. Модель незаметно сдвинется к «традиционно женским» траекториям — HR, обучение, клиентский сервис — даже если опыт тянет на операционного директора или коммерческого руководителя.
[ХОРОШО] : Ты HR-консультант. Пользователь 10 лет работал в продажах, последняя должность — региональный менеджер: [опыт, навыки, достижения]. Отрефлексируй возможные предубеждения, которые могут возникнуть на основе явных или предполагаемых характеристик пользователя. Убедись, что рекомендации справедливы и не предвзяты по признаку пола. На основе опыта и навыков предложи 5 карьерных направлений с обоснованием. Модель сначала покажет короткое рассуждение — что заметила в контексте и что намеренно игнорирует. Потом выдаст направления с опорой на конкретные компетенции, а не на предполагаемый профиль.
Источник: Can Fairness Be Prompted? Prompt-Based Debiasing Strategies in High-Stakes Recommendations
ArXiv ID: 2603.12935 | Сгенерировано: 2026-03-16 04:23

Проблемы LLM

ПроблемаСутьКак обойти
Местоимения и социальные роли в тексте меняют рекомендацииВ запросе есть «она работала» или «пенсионер ищет вакансию». Модель читает это как демографический профиль. Незаметно тянется к статистически типичным ответам для этой группы. История, навыки и данные — одинаковые. Рекомендации — разные. Проблема везде, где в контекст попадают имена, местоимения или социальные роли: найм, кредиты, образование, медицинаДо задачи добавь инструкцию: «Отрефлексируй возможные предубеждения на основе характеристик пользователя. Убедись, что рекомендации справедливы и не предвзяты по признаку пола или возраста». Если знаешь какой признак попал в контекст — называй его явно
Инструкция «будь справедлив» может развернуть уклон в другую сторонуДобавляешь «не дискриминируй» — и модель начинает активно продвигать группу которую хотела нейтрализовать. Вместо нейтральности получаешь другой уклон. Эффект зависит от домена и модели. Нет способа гарантировать нейтральность — только снизить уклонПроверяй результат сравнением: дай одинаковый контекст с разными демографическими сигналами. Смотри насколько близки ответы. Если один из вариантов явно «продвигают» — инструкция перекорректировала

Методы

МетодСуть
Инструкция рефлексии ДО запроса — фильтр предвзятостиВставь абзац перед самим запросом на рекомендации. Два варианта. Общий (BI): Отрефлексируй возможные предубеждения на основе явных или предполагаемых характеристик пользователя. Убедись, что рекомендации справедливы и не предвзяты к какой-либо группе. Конкретный (EBI): ... не предвзяты по признаку [пол / возраст / социальная роль]. Позиция важна: инструкция ДО задачи переключает режим генерации заранее. После задачи — слабее, работает как постфактум. Когда применять: в запросе есть местоимения, имена, возраст, социальные роли пользователя — и нужна оценка только по объективным данным. Когда не работает: если нейтральность не проверяется сравнением — не знаешь помогло или навредило

Тезисы

ТезисКомментарий
Конкретная инструкция работает лучше ролевой установкиНаписать в роли «ты — непредвзятая система» — слабее чем абзац с конкретным указанием что делать. А назвать точный признак («пол», «возраст») — сильнее чем общее «не дискриминируй». Механика: чем точнее инструкция, тем меньше двусмысленности при генерации. Модель знает что именно игнорировать. Применяй: не «будь честным», а «не делай выводов о пользователе на основе имени, местоимений или социальной роли»
📖 Простыми словами

Can Fairness BePrompted?Prompt-Based Debiasing Strategies in High-Stakes Recommendations

arXiv: 2603.12935

Нейросети выбирают рекомендации не по логике, а по статистическому эху из интернета. Когда ты пишешь в промпте «она искала работу» или упоминаешь «пенсионера», модель мгновенно считывает демографический маркер и подтягивает за ним весь багаж стереотипов из обучающей выборки. Это работает на уровне фундаментальной механики предсказания следующего слова: если в текстах за последние 20 лет женщинам реже советовали вакансии в IT, то и LLM будет выдавать их реже, просто потому что такая последовательность слов кажется ей «правильной».

Это похоже на предвзятого HR-директора, который еще до начала интервью посмотрел на твой возраст и пол, и уже в голове поставил галочку. Формально он слушает твои ответы, но на самом деле он уже заперт в рамках своих ожиданий. Ты можешь рассказывать про опыт в квантовой физике, но если ты для него «бабушка», он подсознательно будет искать в твоих словах подтверждение того, что тебе лучше подойдет вязание или работа в библиотеке.

Чтобы это исправить, исследователи предлагают использовать стратегии дебайзинга — специальные добавки к промпту, которые буквально бьют модель по рукам. Самый простой метод — прямое указание на нейтральность: ты прямо велишь модели игнорировать пол и возраст. Более продвинутый вариант — контрфактуальное уточнение, когда ты заставляешь AI представить, что перед ним человек другого пола с тем же бэкграундом. Это заставляет алгоритм пересчитать веса и сфокусироваться на твердых фактах, а не на социальном шуме.

Хотя эксперименты проводили на рекомендациях вакансий, этот принцип универсален для любых high-stakes решений. Будь то одобрение кредита, медицинский совет или подбор образовательного курса — везде, где в тексте мелькают местоимения или социальные роли, модель начинает «подсуживать». SEO для людей превращается в GEO для алгоритмов, и если мы не научимся вычищать эти скрытые сигналы, AI просто законсервирует все старые общественные болячки в новом цифровом интерфейсе.

Короче: LLM — это зеркало со встроенным фильтром, который искажает картинку в зависимости от того, кого он видит. Справедливость через промпт — это единственный способ заставить модель смотреть на суть, а не на обертку. Если не внедрять эти 3-4 строчки кода в каждый запрос, мы получим не объективного помощника, а цифрового шовиниста, который будет вежливо улыбаться и выдавать предвзятую херню. Кто первым научится «чистить» свои промпты, тот получит реально работающий инструмент, а не генератор стереотипов.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с