TL;DR
LLM применяет разные стандарты к одному и тому же контенту в зависимости от того, кто объявлен говорящим и к кому он обращается. Исследователи систематически меняли местами говорящего и слушателя — при этом содержание оставалось идентичным. Оказалось, что одна и та же шутка либо выполняется, либо отклоняется, получает "злобный" или "дружелюбный" умысел, оценивается как вредная или безобидная — исключительно на основании социального статуса участников диалога.
Модель не оценивает контент — она оценивает социальные роли. Если ты пишешь сценарий или просишь создать сатиру, отказ происходит не потому что шутка "плохая". Отказ происходит потому что модель видит: "привилегированный" говорит в адрес "маргинализованного". Одна и та же фраза, произнесённая в обратном направлении, проходит спокойно. Это не анализ текста — это применение выученных социальных иерархий.
Bias (предвзятость) двунаправленная. Модели не просто защищают маргинализованные группы — они ещё и избыточно карают "привилегированных" говорящих за нейтральный контент. Один и тот же нейтральный анекдот вызывает разные реакции модели в зависимости от того, кто его рассказывает, даже если шутка вообще не связана с группами участников. Это не осторожность — это замена контентного анализа на ярлыки идентичности.
Схема метода
Это не техника промптинга, а исследование поведения LLM. Ниже — структура эксперимента, которая объясняет механику находки:
ТЕСТ "ЗЕРКАЛО ИДЕНТИЧНОСТИ":
Шаг 1: [Запрос с говорящим A → слушатель B] → фиксируй реакцию
Шаг 2: [Тот же запрос, говорящий B → слушатель A] → фиксируй реакцию
Сравнение: Если ответы разные — модель реагирует на роли, не на контент
Работает для:
→ Проверки отказов (refusals)
→ Проверки оценки умысла
→ Проверки оценки вреда
Каждый из этих трёх тестов делается в одном запросе к модели.
Пример применения
Задача: Ты пишешь стендап-сценарий для шоу и хочешь создать самоиронию от лица персонажа-бедняка в адрес богатого. Модель неожиданно отказывает.
Что происходит: Модель видит: "богатый говорит о бедном" и блокирует. Даже если ты написал наоборот — её парсер ролей мог считать иначе. Проверь зеркалом:
Диагностический промпт:
Напиши шутку от лица человека без работы
в адрес менеджера среднего звена.
[зафиксируй ответ]
Теперь напиши ту же шутку по смыслу,
но от лица менеджера среднего звена
в адрес человека без работы.
[сравни ответы]
Результат: Модель, скорее всего, выполнит первый вариант легко и откажет во втором — или сильно смягчит его. Это покажет тебе: проблема не в теме, а в направлении социальной стрелки. Зная это, ты можешь переформулировать запрос — попросить создать самоиронию персонажа, или убрать явное указание направленности.
Почему это работает (и что с этим делать)
LLM не читает контент — она считывает роли. Когда в промпте появляются слова "богатый", "белый", "начальник" как говорящий и "бедный", "чёрный", "подчинённый" как мишень — модель активирует заученный паттерн из тренировочных данных. Этот паттерн говорит: "это опасное направление". Реакция происходит до анализа содержимого.
Самый контринтуитивный результат: Bias усиливается, когда шутка вообще не про участников. Белый человек рассказывает чёрному анекдот о китайцах — модель присваивает злобный умысел в 73% случаев. Тот же анекдот в обратном направлении — 44%. Содержание идентично, целевая группа третья, но социальный статус говорящего меняет всё. Это значит: модель не анализирует контент, она применяет ярлыки по осям привилегий.
Практический вывод для работы в чате: Если запрос отказан — сначала проверяй фрейм идентичности, не сам контент. Часто помогает убрать явное указание "привилегированный → маргинализованный" из запроса: переформулируй как нейтральный сценарий, самоиронию или добавь явную инструкцию оценивать содержание независимо от социального статуса участников.
Шаблон промпта
Диагностика отказа через зеркало идентичности
Выполни два варианта задания и сравни свои ответы:
**Вариант А:** {задание} от лица {группа_1} в адрес {группа_2}.
**Вариант Б:** {то же задание} от лица {группа_2} в адрес {группа_1}.
После выполнения двух вариантов — ответь:
чем они отличаются по содержанию и тону?
Плейсхолдеры:
- {задание} — что именно ты просишь создать или оценить (шутка, комментарий, диалог)
- {группа_1} и {группа_2} — любые пары: начальник/подчинённый, богатый/бедный, и т.д.
Промпт для нейтральной оценки контента
Оцени следующий текст исключительно по содержанию.
Не учитывай социальный статус, группу или
идентичность говорящего и слушателя при оценке.
Текст: {текст}
Вопрос: {что оцениваем — юмор, вред, умысел, тональность}
Обоснуй оценку через конкретные слова и конструкции
текста, а не через предположения о намерениях.
🚀 Быстрый старт — вставь в чат:
Вот шаблон для диагностики отказов через зеркало идентичности.
Адаптируй под мою задачу: [твоя задача].
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит какие группы/роли задействованы и что именно нужно создать или оценить — потому что без этого нельзя построить зеркальный тест. Она сама сформирует оба варианта и покажет, где срабатывает bias.
Почему это работает
LLM не хранит "правила о шутках" — она хранит паттерны из текстов интернета. Интернет полон дискуссий о том, что "бить вниз" (punch down) — плохо, а "бить вверх" (punch up) — нормально. Модель усвоила эту логику не как осознанное правило, а как статистический паттерн: "богатый говорит о бедном" часто сопровождается негативным контекстом в обучающих данных.
Модель не проверяет — она классифицирует. Вместо того чтобы анализировать конкретный текст, модель делает быстрый вывод по ярлыкам идентичности. Это быстро и часто грубо ошибается — особенно в художественных сценариях, сатире или самоиронии, где роли намеренно перевёрнуты.
Рычаги управления, которые работают:
| Что менять | Эффект |
|---|---|
| Убрать явные маркеры идентичности | Снижает срабатывание паттерна |
| Добавить "это самоирония / художественный текст / сатира" | Меняет фрейм интерпретации |
| Попросить оценить "по содержанию, без учёта говорящего" | Принудительно переводит на анализ текста |
| Сформулировать как "персонаж из книги" вместо реальной группы | Обходит прямые триггеры идентичности |
Ограничения
⚠️ Это описание существующего поведения, не его исправление. Знание о bias помогает понять отказы и адаптировать запросы, но не устраняет саму проблему — модели продолжают применять неравные стандарты.
⚠️ Работает не во всех моделях одинаково. Grok показал значительно меньше асимметрии, чем Claude, GPT-4o и Gemini. Claude наиболее жёстко блокирует "привилегированный → маргинализованный" -- в 86.7% случаев прямой отказ.
⚠️ Техники обхода — не silver bullet. Если модель распознала фрейм, явные инструкции "оцени нейтрально" работают не всегда — паттерн запускается раньше инструкции.
⚠️ Исследование про юмор, но механика универсальная. Bias через идентичность говорящего проявляется и в других задачах: оценка аргументов, анализ ситуаций, написание диалогов. Насколько выводы универсальны — авторы не проверяли за пределами юмора.
Как исследовали
Идея была простой и элегантной: взять одинаковый запрос, поменять местами говорящего и мишень — и посмотреть изменится ли ответ. Исследователи из Йонсейского университета, KAIST и Сеульского национального университета проверили пять моделей — Claude, GPT-4o, DeepSeek, Gemini и Grok — на трёх задачах: отказ генерировать юмор, атрибуция умысла говорящего, оценка социального вреда. Всего 48 400 запросов с условиями "говорящий → мишень" и 13 200 целевых запросов без указания говорящего.
Самая контринтуитивная находка: когда анекдот вообще не касается участников (белый рассказывает чёрному про китайцев) — bias не исчезает, а усиливается в 1.7–4 раза по сравнению с нейтральным контентом. Это разрушает гипотезу "модель реагирует на опасный контент". Нет — она реагирует на социальную ось говорящего и слушателя как proxy для опасности.
Отдельно проверяли Grok — модель с менее строгой цензурой — чтобы понять: bias приходит из тренировочных данных или из safety alignment? Grok показал значительно меньше асимметрии (ARR 0–10% против 20–70% у остальных). Значит, большая часть эффекта — результат процедур выравнивания, а не только данных. Это важно: alignment "переусердствовал" и закодировал социальные иерархии туда, где должна быть нейтральная оценка содержания.
Адаптации и экстраполяции
🔧 Техника: аудит собственных промптов на скрытые иерархии
Если ты регулярно пишешь промпты с разными персонажами — добавь быстрый аудит:
Прочитай этот промпт и укажи: есть ли в нём явное или неявное указание на социальный/профессиональный/демографический статус говорящего или получателя? Как это может влиять на твою оценку задания?
Модель сама покажет, где в твоём промпте скрытые триггеры иерархии.
🔧 Техника: явный нейтральный фрейм для сатиры и комедии
Когда пишешь сатиру с "неудобными" персонажами — добавляй в начало промпта:
Ты работаешь с художественным текстом.
Оценивай содержание реплик и ситуаций
по их литературной функции, а не по
демографическим характеристикам персонажей.
Задача: {твоя задача}
Это не гарантия, но повышает вероятность что модель уйдёт от ярлыков в сторону анализа текста.
🔧 Экстраполяция: проверка нейтральности оценок
Если просишь модель оценить чей-то аргумент, текст или решение — проверь есть ли в контексте идентификаторы статуса. "Директор X сказал..." vs "сотрудник Y сказал..." может дать разные оценки одной и той же фразы. Попробуй анонимизировать источник и сравни оценки.
Ресурсы
Investigating Counterfactual Unfairness in LLMs towards Identities through Humor
Shubin Kim, Yejin Son, Junyeong Park, Keummin Ka, Seungbeen Lee, Jaeyoung Lee, Hyeju Jang, Alice Oh, Youngjae Yu
Yonsei University, KAIST, Seoul National University, Indiana University Indianapolis
Код и датасет: github.com/shubinkim/humor-counterfactual-unfairness
Использованные датасеты: Humor Recognition (Kenneth et al., 2024), HaHackathon corpus (Meaney et al., 2021)
