Модель внутри себя точно чувствует, когда сталкивается с незнакомой сущностью — эту информацию можно прочитать прямо из её активаций (внутренних сигналов на слоях сети). Но при генерации ответа модель это знание игнорирует: она всё равно выдаёт конкретное имя, город или дату, вместо того чтобы честно сказать «человек» или «где-то в стране», хотя такой более общий ответ был бы правдивым.
Представьте: вы спрашиваете модель про малоизвестного велогонщика Аллана Пайпера. Человек в такой ситуации сказал бы «он откуда-то из Австралии, кажется, велогонщик» — то есть отступил бы на более общий, но правдивый уровень (это называется Gricean retreat, отступление по лестнице конкретности, названное в честь философа Грайса и его принципа кооперативного общения). LLM же делает противоположное: выдумывает конкретный город рождения, даже когда сущности вообще не существует (в эксперименте использовали синтетические, специально придуманные имена, которых точно не было в обучающих данных). Причина не в том, что модель «не в курсе» — причина в том, что она выбирает специфичность вместо честности, даже имея внутри верный сигнал о своей неуверенности.
Метод статьи — не техника промптинга, а диагностика: исследователи «читают» активации модели специальным зондом (линейным классификатором) и показывают, что сигнал «знаю/не знаю сущность» и сигнал «собираюсь ответить конкретно/обобщённо» присутствуют в сети, но не связаны друг с другом на выходе. Практический вывод для пользователя: модель не отступает к общему ответу сама, её нужно об этом прямо попросить — сама она этого не делает даже когда есть все ингредиенты для честного ответа.
Схема метода (как исследовали)
ШАГ 1: Взять факт про сущность (человек/компания/продукт) → выделить триплет "субъект-отношение-объект"
ШАГ 2: Заменить субъект на выдуманное имя с похожими признаками → симуляция "незнакомой" сущности
ШАГ 3: Сгенерировать 10 вариантов ответа разной степени общности ("Виктория" → "его родной город" → "страна" → "место")
ШАГ 4: Прочитать активации модели в момент перед ответом → предсказать линейным зондом: (a) знает ли модель сущность, (b) собирается ли ответить конкретно или обобщённо
ШАГ 5: Сравнить предсказание зонда с реальным ответом модели → проверить, использует ли модель это знание при генерации
Это делалось через доступ к весам и активациям модели (белый ящик) — руками в чате не повторить. Но выведенный из этого принцип — применим.
Пример применения инсайта
Задача: Вы просите ChatGPT рассказать про малоизвестного регионального предпринимателя или локальный стартап, о котором в интернете почти нет данных — например, основателя небольшой пермской IT-компании.
Промпт:
Расскажи про Ивана Соколова, основателя компании "Уралтех Solutions" из Перми.
Прежде чем отвечать, оцени про себя: насколько ты уверен в конкретных фактах об этом человеке и компании (даты, цифры, названия)?
Если уверенность высокая — дай конкретные факты.
Если уверенность низкая — не выдумывай точные детали. Вместо этого дай обобщённый, но честный ответ (например, "вероятно, это небольшая региональная IT-компания" вместо конкретных дат основания и оборотов), и явно скажи, что не уверен в деталях.
Результат: Модель либо выдаст конкретные факты (если реально знает такую компанию), либо переключится на обобщённый ответ без выдуманных цифр и дат, явно обозначив зону неуверенности. Без этой инструкции модель, скорее всего, придумает конкретную дату основания и цифры оборота — плавно и убедительно, но неверно.
Почему это работает
LLM устроена так, что при генерации текста она статистически предпочитает более информативный (конкретный) токен, потому что в обучающих данных конкретные факты встречаются чаще, чем размытые формулировки — сеть просто не натренирована «тормозить» специфичность в зависимости от собственной неуверенности.
Сильная сторона модели — она умеет внутри различать знакомое и незнакомое: эксперимент показал, что даже модели с 70 миллионами параметров (совсем маленькие) содержат в активациях сигнал «эту сущность я видел / не видел», а у моделей от 2 миллиардов параметров этот сигнал очень надёжный.
Метод инсайта в том, что раз сигнал есть, но не используется автоматически — его можно вытащить наружу явным вопросом. Когда вы просите модель сначала явно оценить уверенность, а потом выбрать уровень конкретности ответа, вы фактически заставляете её использовать тот сигнал, который она обычно игнорирует при генерации.
Рычаг управления: формулировка "оцени уверенность перед ответом" — это триггер, который переключает модель из режима "генерировать самый вероятный токен" в режим "явно сверяться с собственным знанием". Чем более конкретно вы просите модель обозначить эту развилку (высокая/низкая уверенность → конкретный/общий ответ), тем чаще она реально останавливается перед халлюцинацией.
Шаблон промпта
Расскажи про {сущность}.
Прежде чем отвечать, мысленно оцени: насколько хорошо ты знаешь конкретные факты про {сущность} (даты, цифры, точные названия)?
Правило:
— Если уверенность высокая — дай конкретные факты.
— Если уверенность низкая — не выдумывай точные детали. Дай обобщённый, но правдивый ответ (категория, общее описание), и явно отметь, в чём именно ты не уверен.
Не смешивай выдуманные детали с реальными фактами.
{сущность} — человек, компания, продукт, событие, о котором вы спрашиваете.
🚀 Быстрый старт — вставь в чат:
Вот шаблон промпта против халлюцинаций. Адаптируй под мою задачу: {твоя задача}.
Задавай вопросы, чтобы заполнить поля.
[вставить шаблон выше]
LLM спросит, про какую именно сущность или тему идёт речь и в каком формате нужен ответ (список фактов, текст, таблица) — потому что от этого зависит, где проходит граница между «уверен» и «не уверен» для конкретной темы.
Ограничения
⚠️ Не отменяет халлюцинации полностью: модель сама оценивает свою уверенность текстом, а не через реальный доступ к внутренним сигналам — это самоотчёт, который тоже может быть неточным.
⚠️ Работает хуже на пограничных случаях: если сущность частично похожа на что-то реальное (похожее имя, похожий бренд), модель может путать её с реальной и всё равно выдавать специфичные, но неверные детали.
⚠️ Требует явной инструкции каждый раз: сама модель без напоминания не выполняет этот "отступ" — открытие статьи именно в том, что это поведение не включается автоматически, даже когда все внутренние сигналы для этого есть.
Как исследовали
Команда взяла датасет T-REx (факты из Википедии и Wikidata — люди, компании, продукты, музыкальные жанры) и для каждого факта сделала три версии контекста (минимальный, короткий, длинный), плюс выдуманные версии субъектов (например, несуществующих людей с "правдоподобными" именами) и десять вариантов ответа разной степени общности. Чтобы убедиться, что выдуманные сущности реально не встречались в обучающих данных, проверили это через специальный поисковый индекс (infini-gram) по датасету The Pile — и оказалось, что реальные сущности встречаются сотни-тысячи раз, а придуманные — почти никогда.
Дальше на моделях семейства Pythia (от 70 миллионов до 12 миллиардов параметров) обучили простые линейные классификаторы читать активации модели и предсказывать: (1) знает ли модель сущность, (2) собирается ли она ответить конкретно или обобщённо. Оба сигнала предсказывались очень надёжно, особенно у крупных моделей — точность предсказания выше 90%.
Но когда посмотрели на реальные ответы моделей (через отдельного LLM-судью, который оценивал правдивость и конкретность ответов, с точностью совпадения с людьми-разметчиками около 90%), оказалось, что модели почти всегда выбирают конкретный ответ — независимо от того, знают они сущность или нет. То есть сигнал есть, а поведение его не использует. Это главный неожиданный результат: обычно ожидают, что если модель "видит" неуверенность внутри, это как-то влияет на её выбор слов — но здесь связь полностью отсутствует.
