3,583 papers
arXiv:2605.03052 74 4 мая 2026 г. FREE

Почему LLM игнорирует «не»: скрытая механика отрицания в промптах

КЛЮЧЕВАЯ СУТЬ
Написал 'без канцелярита' — оно снова проскочило. Внутри модели в этот момент шла борьба двух механизмов — и статистика из обучения победила правильный сигнал. Это знание позволяет переформулировать запреты так, чтобы они реально работали — заменить отрицания позитивными якорями. Вместо 'не пиши X' — 'вместо X используй Y': поздние слои цепляются за прямой паттерн и перестают тянуть запрещённое.
Адаптировать под запрос

TL;DR

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

Парадокс в том, что понимание есть, но результат неправильный. Если измерить вероятности внутри модели, она реагирует на «не» верно. По точности финальных ответов — угадывает как монетка (~50%). Разрыв объясняется поздними слоями, которые «голосуют» за статистически частые паттерны из обучения — и перекрывают правильный сигнал.

Исследование вскрывает механику: в ранних слоях «не» прикрепляется к понятию Y. В средних слоях строится новый «негативный вектор» — буквально «не газ» кодируется как «твёрдое или жидкое» (конструктивный механизм). Параллельно ослабляется сигнал самого Y (подавляющий механизм). Но оба перекрываются поздними «ярлычными» слоями, обученными на ко-встречаемости: текстов где рядом с «не» и «газ» стоит «жидкость» в обучающих данных просто меньше, чем текстов где «газ» идёт с «газом».


🧠

Схема механизма

РАННИЕ СЛОИ:   «не» прикрепляется к Y
                → модель знает что отрицается

СРЕДНИЕ СЛОИ:  строится вектор «не-Y» (конструктивный механизм)
                + ослабляется сигнал Y (подавляющий механизм)

ПОЗДНИЕ СЛОИ:  срезка включает статистические паттерны из обучения
                → игнорирует «не-Y», продвигает то что часто встречалось рядом

ФИНАЛ:         выдаётся не то что правильно, а то что статистически вероятно

Всё происходит внутри одного прохода модели. Пользователь не видит борьбы — только сломанный запрет.


🚀

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

Задача: Пишешь промпт для описания умной колонки на Wildberries. Хочешь живой текст — просишь «без канцелярита, не используй слова "качество" и "инновационный"».

Что происходит без учёта механики:

Промпт: «Напиши описание умной колонки.
         Без канцелярита. Не используй
         слова "качество" и "инновационный".»

Результат: «Устройство инновационного качества,
            обеспечивающее...»

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

Как переформулировать, зная механику:

Напиши описание умной колонки Яндекс Станция
для карточки на Wildberries.

Стиль: как будто объясняешь другу в Telegram
почему купил — живо, конкретно, слегка с иронией.

Слова которые хочу видеть: звук, утро, голос,
удобно, слышит.

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

Если хочется написать «инновационный» —
замени на то что реально умеет делать колонка.

Результат: Вместо запрета на плохое — даёшь модели позитивные якоря: конкретные слова, жанр, метод замены. Поздние слои цепляются за новые паттерны вместо штампов. Текст получается живее, и «качество» не просочится.


🧠

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

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

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

Рычаги управления в промпте: - Замени запрет на альтернативу — вместо «не X» пиши «вместо X используй Y» - Дай якорные слова — конкретные слова, которые хочешь видеть, создают новые статистические якоря - Опиши жанр, тон, аудиторию — это сильнее чем список запретов - Если «не» неизбежно — продублируй ограничение другой формулировкой + добавь метод замены - Дай пример правильного — один пример перевешивает три запрета


📋

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

Напиши {тип контента} для {аудитория или платформа}.

Стиль: {как это звучит — жанр, тон, с чем можно сравнить}

Слова и идеи которые хочу видеть: {якорные слова}

Если хочется написать {нежелательное слово или фраза} —
замени на {конкретная альтернатива или тип замены}.

{задача или исходный материал}

Что подставлять: - {тип контента} — описание, письмо, пост, инструкция, оффер - {аудитория или платформа} — Telegram-канал про стартапы, карточка на Ozon, письмо HR, питч инвестору - {как это звучит} — дружеский чат, интервью с основателем, разбор кейса, сторис - {якорные слова} — 3–5 конкретных слов которые задают вектор - {нежелательное} + {альтернатива} — переводишь запрет в инструкцию замены


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

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

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

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


⚠️

Ограничения

⚠️ Не гарантия: Замена запретов на позитивное — помогает, но не устраняет проблему полностью. Сильные статистические паттерны из обучения всё равно могут «просачиваться».

⚠️ Специфические запреты: Если важно исключить конкретную фразу (юридическую формулировку, фирменный стиль конкурента) — нужна проверка выводов и несколько итераций, одним промптом не обойтись.

⚠️ Задачи на факты: Исследование про вопросно-ответные задачи типа «животное которое не X — это...». Для генерации длинных текстов закономерности похожие, но не идентичные.

⚠️ Это фундаментальная проблема: Исследователи показали что проблема вшита на этапе предобучения. Простым промптингом полностью не решается — только смягчается.


🔍

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

Команда из USC взяла 648 пар промптов вида «животное, которое не является амфибией — это...» и «животное, которое является амфибией — это...». Для каждого вопроса известен правильный ответ с отрицанием и без. Проверяли шесть открытых моделей — Llama 3.1, Mistral, Qwen 2.5 и 3, Gemma-2, OLMo-2.

Самая неожиданная находка: точность на вопросах с «не» около 50% — то есть модели угадывают как монетка. Но при этом вероятности внутри модели корректно меняются при добавлении «не» — значит, понимание есть, только до ответа не доходит.

Дальше был красивый эксперимент: исследователи физически «отключили» поздние слои моделей методом Attention Sinking — принудительно направили внимание голов на первый токен вместо контента. Точность на «не» прыгнула с 50% до 68% — без изменения промпта, просто убрав помехи из поздних слоёв. Это прямое доказательство что поздние слои мешают, а не помогают.

Ещё проверили историю обучения OLMo2 по чекпоинтам. Нашли: в самом начале обучения точность на отрицания резко падает, затем немного восстанавливается. Именно в первые шаги обучения формируются «срезочные» паттерны — ко-встречаемость слов оказывается сильнее логики отрицания. Это объясняет почему проблема системная, а не случайная.


💡

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

💡 Адаптация: обратная связь и критика

Классическая боль: «напиши конструктивную критику, НЕ грубую, НЕ уклончивую». Модель выдаёт либо мягкую кашу, либо что-то резкое. Применяем принцип:

Дай обратную связь по тексту {автор}.

Стиль: как хороший редактор при личном разговоре —
уважительно, по делу, с конкретными предложениями.

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

Текст: {текст}

🔧 Техника: тройное дублирование ограничения

Если запрет критичен и без «не» не обойтись — напиши его тремя разными формулировками:

Ограничение 1: без технического жаргона
Ограничение 2: пиши как для человека далёкого от IT
Ограничение 3: если хочется написать технический термин —
                замени объяснением простыми словами

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


🔧 Техника: один конкретный пример вместо запрета

Исследование показывает что модель хорошо реагирует на прямые паттерны. Один пример правильного текста в промпте часто работает лучше трёх запретов:

Пример нужного стиля:
«Колонка слышит даже когда орёт телек. Сказал "Алиса, стоп" — 
остановила. Утром спрашиваю погоду — отвечает пока чищу зубы.»

Напиши в таком же духе про: {продукт}

🔗

Ресурсы

How Language Models Process Negation Zhejian Zhou, Tianyi Zhou, Robin Jia, Jonathan May University of Southern California — Information Sciences Institute + Thomas Lord Department of Computer Science Proceedings of the 43rd International Conference on Machine Learning (ICML 2026), Seoul


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

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

Написал 'без канцелярита' — оно снова проскочило. Внутри модели в этот момент шла борьба двух механизмов — и статистика из обучения победила правильный сигнал. Это знание позволяет переформулировать запреты так, чтобы они реально работали — заменить отрицания позитивными якорями. Вместо 'не пиши X' — 'вместо X используй Y': поздние слои цепляются за прямой паттерн и перестают тянуть запрещённое.

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

Модель обрабатывает отрицание в три этапа. Ранние слои: 'не' прикрепляется к понятию X — модель знает что отрицается. Средние слои: строится вектор 'не-X' и ослабляется сигнал самого X — всё правильно. Поздние слои: включаются паттерны совместной встречаемости из обучения и перекрывают правильный сигнал. Итог — точность на задачах с отрицанием около 50%, как монетка. Прямая инструкция всегда выигрывает у запрета: 'пиши как в Telegram' активирует миллионы прямых примеров из обучения — 'не пиши официально' заставляет сначала активировать 'официально', потом отрицать, и поздние слои этот путь регулярно обрывают.

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

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

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

Написание любого контента → особенно когда промпт содержит список запретов ('без канцелярита', 'не используй слово X'), и тем более когда запрещённые слова — штампы с высокой встречаемостью в обучающих данных (качество, инновационный, оптимальный, эффективный). Частично помогает при юридических ограничениях и запретах фирменных слов конкурентов — но не заменяет проверку. НЕ подходит как единственная мера там где конкретная фраза критична: нужна итерация и ручная проверка вывода.

Мини-рецепт

1. Найди все запреты в промпте: всё что начинается с 'не', 'без', 'избегай' — выпиши отдельно.
2. Переформулируй в позитив: 'не используй слово X' → 'вместо X пиши конкретный факт или Y'.
3. Добавь якорные слова: 3–5 слов которые хочешь видеть в тексте — они создают прямые паттерны которые поздние слои не проигнорируют.
4. Опиши жанр и тон: 'как объясняешь другу в Telegram' работает сильнее чем 'без официоза и сухости'.
5. Если запрет неизбежен: дай метод замены прямо в промпте — 'если хочется написать X, замени на конкретный факт'. Один пример правильного варианта перевешивает три запрета.

Примеры

[ПЛОХО] : Напиши описание продукта. Без канцелярита. Не используй слова 'качество' и 'инновационный'.
[ХОРОШО] : Напиши описание умной колонки для карточки на Wildberries. Стиль: как объясняешь другу в Telegram почему купил — живо, конкретно, слегка с иронией. Слова которые хочу видеть: звук, утро, голос, удобно, слышит. Если хочется написать 'качество' — замени на конкретный факт: '6 микрофонов', 'слышит с другого конца комнаты', 'не переспрашивает когда играет музыка'. Если хочется написать 'инновационный' — замени на то что колонка реально умеет делать.
Источник: How Language Models Process Negation
ArXiv ID: 2605.03052 | Сгенерировано: 2026-05-06 05:29

Проблемы LLM

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

Методы

МетодСуть
Инструкция замены вместо запретаЗапрет формулируй через альтернативу: Если хочется написать {нежелательное} — замени на {конкретная альтернатива}. Добавь якорные слова: 3–5 слов которые хочешь видеть в тексте. Опиши жанр: «как объясняешь другу в Telegram», «интервью с основателем». Почему работает: Позитивный паттерн — прямая активация из обучения. Запрет — двойная операция «X» «не-X», которую поздние слои перекрывают статистикой. Прямой паттерн всегда выигрывает. Когда применять: стилевые ограничения, запрет слов-штампов, требования к тону. Ограничение: сильные статистические паттерны могут просочиться даже так. Один пример правильного текста перевешивает три запрета

Тезисы

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

HowLanguageModelsProcess Negation

arXiv: 2605.03052

Языковые модели воспринимают отрицание не как логическую команду «вычеркни это», а как внутренний конфликт интересов. На уровне глубоких слоев нейронка честно пытается построить образ того, что ты просишь, но в финале все ломается из-за банальной статистики. Проблема в том, что LLM — это предсказательная машина, которая привыкла достраивать фразы по самым вероятным шаблонам. Когда ты говоришь «не используй слово X», модель сначала обрабатывает концепт этого слова, а потом ее «заносит на повороте» просто потому, что в обучающей выборке эти понятия всегда ходят парами.

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

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

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

Короче: хватит надеяться, что частица «не» спасет твой текст от мусора. Вместо того чтобы запрещать, пиши, что НУЖНО сделать, давая модели позитивный сценарий. Если ты просто ставишь запрет, ты подставляешь модель под удар ее собственной статистики, и в 8 из 10 случаев она выберет привычный путь, просто проигнорировав твое нытье. Либо давай четкие примеры того, как надо, либо смирись с тем, что запретный плод для нейронки всегда будет самым желанным токеном для генерации.

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

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

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