3,583 papers
arXiv:2511.12236 79 15 нояб. 2025 г. FREE

ConFactCheck: детекция галлюцинаций через проверку консистентности ключевых фактов

КЛЮЧЕВАЯ СУТЬ
LLM не помнит что именно выдумала — каждая генерация независима. Из-за этого галлюцинации выглядят убедительно в первом ответе, но «плывут» при переспросе. ConFactCheck извлекает из ответа модели ключевые факты (даты, имена, числа), генерирует вопросы про каждый факт, спрашивает LLM заново и сверяет ответы. Несовпадение = галлюцинация. В 3-5 раз меньше запросов к модели чем у конкурентов (3-4 вместо 20).
Адаптировать под запрос

TL;DR

ConFactCheck — метод проверки галлюцинаций в ответах LLM через переспрос ключевых фактов. Извлекает из ответа модели ключевые факты (имена, даты, числа), генерирует вопросы про каждый факт, спрашивает LLM заново и сверяет новые ответы с оригиналом. Несовпадение = галлюцинация.

LLM-галлюцинации опасны тем, что их не видно сразу — текст выглядит убедительно. Существующие методы проверки требуют десятков запросов к модели (SelfCheckGPT делает 20 запросов на каждый ответ) или доступа к внутренним весам модели. ConFactCheck работает иначе: если модель действительно знает факт, она ответит одинаково при разных формулировках вопроса. Если "знание" было выдумано на лету — ответы поплывут.

Метод работает в два этапа: Fact Alignment Check (проверка совпадения фактов через переспрос) и Uniform Distribution Check (проверка уверенности модели через распределение вероятностей токенов). ConFactCheck показал лучшие или вторые результаты на всех датасетах, требуя в 3-5 раз меньше запросов к LLM чем конкуренты.


🔬

Схема метода

ЭТАП 1: Извлечение ключевых фактов
Текст → NER/POS-тэггинг → Список фактов [факт₁, факт₂, ..., фактₙ]

ЭТАП 2: Генерация вопросов
Для каждого факта → Вопрос с фактом как ответом

ЭТАП 3: Fact Alignment Check
Вопрос → LLM (low temperature) → Новый ответ
Сравнение через LLM-judge: новый ответ = оригинальный факт?
Несовпадение → +1 к счётчику галлюцинаций

ЭТАП 4: Uniform Distribution Check  
Для регенерированных фактов → Анализ вероятностей топ-5 токенов
Если распределение близко к равномерному → модель неуверена → галлюцинация

Полный пайплайн требует 3-4 запроса к LLM (в среднем) вместо 20 у конкурентов.


🚀

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

Задача: Проверяешь ответ GPT про запуск нового продукта Яндекса. Модель написала: "Яндекс Станция 2 запущена в продажу 15 марта 2023 года по цене 12 990 рублей с поддержкой 8K видео."

Как применить принцип ConFactCheck вручную:

Промпт 1 — Извлечение фактов:

Из этого текста выдели ключевые проверяемые факты (даты, цифры, названия, характеристики):

"Яндекс Станция 2 запущена в продажу 15 марта 2023 года по цене 12 990 рублей 
с поддержкой 8K видео."

Формат: список фактов, каждый отдельной строкой.

Промпт 2 — Генерация вопросов:

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

Факты:
- Яндекс Станция 2
- 15 марта 2023
- 12 990 рублей  
- 8K видео

Только вопросы, без ответов.

Промпт 3 — Переспрос:

[Скопировать вопросы из предыдущего ответа]

Ответь на каждый вопрос кратко и точно.

Промпт 4 — Сравнение:

Сравни два набора фактов. Совпадают ли они?

Оригинальные факты:
- Яндекс Станция 2
- 15 марта 2023
- 12 990 рублей
- 8K видео

Факты из ответов:
[вставить ответы из промпта 3]

Для каждой пары: совпадает / не совпадает / частично совпадает

Результат:

Модель покажет какие факты остались стабильными при переспросе, а какие "поплыли". Если модель сначала сказала "8K видео", а при переспросе "Поддерживает 4K и HDR" — это сигнал галлюцинации. Стабильные факты (название продукта, цена) скорее всего правдивы.


🧠

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

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

Сильная сторона LLM: Для фактов, которые модель действительно усвоила из обучающих данных, она будет давать консистентные ответы при разных формулировках вопроса. Если модель много раз видела "Яндекс основан в 1997 году", она скажет это и напрямую, и через ответ на вопрос "В каком году основан Яндекс?", и через "Когда появился Яндекс?".

Как метод использует это: ConFactCheck эксплуатирует разницу между "знанием" и "выдумкой": - Реальное знание → модель ответит одинаково при прямом утверждении и при вопросе про этот факт - Галлюцинация → при переспросе модель даст другой ответ (или уклончивый ответ), потому что нет устойчивого паттерна

Второй этап (Uniform Distribution Check) добавляет проверку уверенности: если модель выдала факт, но вероятности токенов размазаны равномерно (близко к случайному выбору) — она неуверена, даже если текст звучит убедительно.

Рычаги управления в полной реализации: - Температура при переспросе — ConFactCheck использует низкую (детерминированный ответ). Можно поднять чтобы проверить устойчивость к вариациям. - Количество переспросов — можно спросить несколько раз разными формулировками для более жесткой проверки. - Порог несовпадения — сколько фактов должны "поплыть" чтобы признать весь ответ галлюцинацией.


📋

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

Упрощённая версия для ручной проверки в чате:

Мне нужно проверить ответ LLM на галлюцинации через метод переспроса.

**Исходный текст для проверки:**
{вставить текст}

**ШАГ 1:** Извлеки из текста все ключевые проверяемые факты: 
имена, даты, числа, названия, характеристики, утверждения.  
Формат: нумерованный список.

**ШАГ 2:** Для каждого факта создай короткий вопрос, 
ответом на который был бы именно этот факт.

**ШАГ 3:** Ответь на каждый вопрос из шага 2 кратко и точно.

**ШАГ 4:** Сравни факты из шага 1 с ответами из шага 3.  
Для каждой пары укажи:  
✅ Совпадает (факт подтверждён)  
❌ Не совпадает (возможная галлюцинация)  
⚠️ Частично совпадает (требует внешней проверки)

**ШАГ 5:** Итоговая оценка: какой процент фактов не прошёл проверку?

Что подставлять: - {вставить текст} — ответ LLM, который нужно проверить на галлюцинации

Принцип работы: LLM выполнит все шаги последовательно. Если она "знает" факт — он останется стабильным при переспросе. Если выдумала — при переспросе ответ "поплывёт" (изменится формулировка, появятся оговорки, факт станет более расплывчатым).


⚠️

Ограничения

⚠️ Требует технической реализации для полной точности: Оригинальный метод использует NER-тэггинг, T5-модель для генерации вопросов, доступ к logprobs (вероятностям токенов) и статистические тесты. Упрощённая версия через промпт работает, но менее точна.

⚠️ Не работает для субъективных утверждений: Метод проверяет фактические утверждения (даты, имена, числа). Для мнений, оценок, интерпретаций метод неприменим — там нет "правильного ответа".

⚠️ Модель может галлюцинировать консистентно: Если LLM "уверена" в неправильном факте (например, из-за частой ошибки в обучающих данных), она будет повторять ошибку стабильно. Метод детектирует несогласованность, не неправильность.

⚠️ Зависит от judge-модели: В полной реализации сравнение делает GPT-4-mini. Если judge-модель слабая, она может пропустить тонкие различия или наоборот засчитать разные формулировки одного факта как несовпадение.


🔍

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

Команда проверила ConFactCheck на 4 датасетах: 3 QA-датасета (Natural Questions, HotpotQA, WebQA) и 1 датасет длинных текстов (WikiBio — биографии из Википедии с синтетическим текстом от GPT-3). Для QA-датасетов метки галлюцинаций создавали автоматически: сравнивали ответ LLM с правильным ответом через GPT-4.1-mini как судью. Для WikiBio использовали готовую ручную разметку.

Сравнивали с 4 baseline-методами: HaDes (анализ токен-фичей), SelfCheckGPT (20 сэмплов + проверка расхождений), SAC³ (5 сэмплов с вариациями вопроса), INSIDE (анализ эмбеддингов через собственные значения). Тестировали на LLaMA3.1-8B и Qwen2.5-7B, плюс семейство Phi-3 (3.8B, 7B, 13B) для проверки как метод работает на моделях разного размера.

Главная находка: ConFactCheck показал лучший или второй лучший результат на всех датасетах и моделях. При этом требовал в среднем 3.8 запросов к LLM против 20 у SelfCheckGPT и 5 у SAC³. По скорости: 9.5 секунд против 13.4 у SelfCheck-Prompt и 15.5 у SAC³ на одном примере (на LLaMA3.1).

Почему метод эффективнее: Конкуренты генерируют много вариантов полного ответа и сравнивают их целиком. ConFactCheck декомпозирует ответ на атомарные факты и проверяет каждый целенаправленным вопросом. Это как разница между "перескажи текст 20 раз и посмотри где разошлись пересказы" vs "задай конкретные вопросы по ключевым пунктам".

Любопытная деталь: Увеличение размера модели с 3.8B до 13B не снизило количество галлюцинаций линейно. Phi-3-7B показал 58% галлюцинаций на NQ-Open, а Phi-3-13B — 54%. Разница есть, но небольшая. Это подтверждает фундаментальную природу проблемы: галлюцинации — не баг, а особенность архитектуры LLM, которую нельзя полностью убрать просто увеличив модель.

Инсайт для практики: Метод одинаково хорошо работает на моделях разного размера (AUC 0.69-0.73 на Phi-3 всех размеров). Значит, принцип консистентности универсален — его можно применять к любой модели, от маленькой до огромной.


💡

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

📌

🔧 Техника: Многократный переспрос для критичных фактов

Если факт критически важен (медицинская доза, юридическая дата, финансовая цифра), переспроси несколько раз разными формулировками:

У меня есть факт из ответа LLM: "{факт}"

Задай мне 3 разных вопроса, ответом на которые был бы этот факт.  
Вопросы должны различаться по формулировке.

[Получить вопросы]

Теперь ответь на каждый из этих вопросов:
[вопросы]

[Сравнить 3 ответа — если хотя бы один отличается, риск высок]

Эффект: Галлюцинация может "продержаться" один переспрос, но при 3 разных формулировках начнёт расползаться.


📌

🔧 Техника: Кросс-модельная проверка

Принцип ConFactCheck можно усилить, переспрашивая другую модель:

[В ChatGPT получил ответ с фактами]

[Скопировать факты в Claude]

Промпт в Claude:
Ответь на вопросы кратко и точно:
1. [вопрос про факт₁]
2. [вопрос про факт₂]
...

[Сравнить ответы двух моделей]

Эффект: Если обе модели дают одинаковый ответ при переспросе — факт с высокой вероятностью правдив (обе модели усвоили его из обучающих данных). Если ответы расходятся — риск галлюцинации высокий.


📌

🔧 Техника: "Уверен ли ты?" как proxy для Uniform Distribution Check

Полный ConFactCheck проверяет распределение вероятностей токенов (недоступно в чате). Упрощённый аналог: попросить модель оценить уверенность.

Ты ответил: "{факт}"

По шкале от 1 до 10, насколько ты уверен в этом факте?  
1 = полностью выдумал, 10 = абсолютно точно знаю из обучающих данных.

Объясни оценку в 1 предложении.

Эффект: Это не замена статистическому тесту, но даёт сигнал. Если модель говорит "7 — помню что-то похожее, но детали могу путать" — проверь факт внешне.


🔗

Ресурсы

Consistency Is the Key: Detecting Hallucinations in LLM Generated Text By Checking Inconsistencies About Key Facts

GitHub-репозиторий с кодом

Raavi Gupta (Columbia University), Pranav Hari Panicker (IIT Bombay), Sumit Bhatia (Adobe MDSR Lab), Ganesh Ramakrishnan (IIT Bombay)

Связанные работы упомянутые в исследовании: - SelfCheckGPT (Manakul et al., 2023) — проверка через семплирование множества ответов - FactScore (Min et al., 2023) — концепция атомарных фактов

- SAC³ (Zhang et al., 2023) — проверка консистентности через семантические вариации - HaDes (Liu et al., 2022) — детекция галлюцинаций через токен-фичи


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

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

LLM не помнит что именно выдумала — каждая генерация независима. Из-за этого галлюцинации выглядят убедительно в первом ответе, но «плывут» при переспросе. ConFactCheck извлекает из ответа модели ключевые факты (даты, имена, числа), генерирует вопросы про каждый факт, спрашивает LLM заново и сверяет ответы. Несовпадение = галлюцинация. В 3-5 раз меньше запросов к модели чем у конкурентов (3-4 вместо 20).

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

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

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

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

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

Проверка ответов LLM на галлюцинации → конкретно для фактических утверждений (даты, имена, числа, характеристики продуктов), особенно когда ответ содержит проверяемые факты из областей где модель могла не видеть свежих данных. НЕ подходит для субъективных утверждений — мнений, оценок, интерпретаций (там нет правильного ответа для проверки).

Мини-рецепт

1. Извлеки факты: Попроси модель выделить из своего ответа все проверяемые факты — Из этого текста выдели ключевые факты: даты, имена, числа, названия. Формат: список
2. Сгенерируй вопросы: Для каждого факта создай вопрос — Для каждого факта создай короткий вопрос, ответом на который был бы именно этот факт. Только вопросы, без ответов
3. Переспроси: Задай модели эти вопросы — Ответь на каждый вопрос кратко и точно
4. Сверь ответы: Сравни оригинальные факты с новыми ответами — Сравни два набора фактов. Для каждой пары: совпадает / не совпадает / частично
5. Оцени стабильность: Факты которые поплыли (изменились, стали расплывчатыми) — кандидаты на галлюцинацию

Примеры

[ПЛОХО] : Проверь этот текст на галлюцинации — модель не знает КАК проверять, даст общую оценку без конкретики
[ХОРОШО] : Исходный текст: [вставить ответ LLM]. ШАГ 1: Извлеки все проверяемые факты списком. ШАГ 2: Для каждого факта создай вопрос. ШАГ 3: Ответь на вопросы. ШАГ 4: Сравни факты из шага 1 с ответами из шага 3 — совпадает/не совпадает для каждой пары. ШАГ 5: Процент фактов не прошедших проверку — пошаговый алгоритм заставляет модель переспросить саму себя и выявить несовпадения
Источник: Consistency Is the Key: Detecting Hallucinations in LLM Generated Text By Checking Inconsistencies About Key Facts
ArXiv ID: 2511.12236 | Сгенерировано: 2026-01-12 18:36

Методы

МетодСуть
Переспрос ключевых фактов — детекция галлюцинацийИзвлекаешь из ответа модели проверяемые факты (имена, даты, числа, характеристики). Для каждого факта генерируешь вопрос, ответом на который был бы этот факт. Задаёшь вопросы модели заново. Сравниваешь новые ответы с оригинальными фактами. Несовпадение = возможная галлюцинация.

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

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

Когда не работает: Субъективные утверждения, мнения, оценки — там нет "правильного ответа". Модель может стабильно повторять ошибку из обучающих данных (см. тезис ниже).

Тезисы

ТезисКомментарий
Консистентность при переформулировке отличает знание от выдумкиLLM генерирует текст на основе паттернов из обучающих данных, не из явной базы знаний. Если паттерн сильный (модель видела факт много раз) — она даст одинаковый ответ на прямой вопрос и на переформулировку. Если паттерн слабый или отсутствует — модель додумает правдоподобную деталь, но при переспросе "забудет" что именно выдумала. Каждая генерация независима.

Применяй: Спроси модель про важный факт несколькими способами. Пример: сначала "Когда основан Яндекс?", потом "В каком году появился Яндекс?", потом "Год создания компании Яндекс?". Если ответы разные — высокий риск галлюцинации.
📖 Простыми словами

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

Это как если бы ты подозревал друга в том, что он не был на крутой вечеринке, хотя он клянется, что зажигал там всю ночь. Ты не идешь проверять записи с камер, а начинаешь закидывать его мелкими вопросами: "А какая музыка играла?", "А кто стоял на входе?", "А во сколько привезли пиццу?". Если он все выдумал, он запутается в деталях: сначала скажет, что пицца была в десять, а через минуту — что в полночь. Формально история звучит складно, но на деталях он сыпется.

Чтобы провернуть такой допрос технически, сначала из текста выдирают ключевые факты через NER (имена, даты, цифры). Для каждого факта мелкая модель T5 генерирует вопрос, на который этот факт должен быть ответом. Затем основная LLM отвечает на эти вопросы, а GPT-4-mini в роли судьи сравнивает: совпал новый ответ с оригиналом или нет. Если модель ответила правильно, но при этом сильно сомневалась (это проверяют через KS-тест вероятностей токенов), ей все равно засчитывают провал. Метод работает в 1.4-3 раза быстрее аналогов, потому что не перебирает варианты до посинения, а бьет точно в цель.

Тестировали это добро на классических датасетах вроде NQ-Open и WikiBio, но принцип универсален. Его можно прикрутить к любому пайплайну, где важно, чтобы нейронка не несла отсебятину: от генерации юридических справок до описания медицинских препаратов. Главное условие — у тебя должен быть доступ к «кишкам» модели (вероятностям токенов), так что с закрытыми API типа Claude или GPT-4 фокус с проверкой уверенности не пройдет. SEO для роботов уходит в прошлое, наступает эра внутренней верификации.

Короче: хватит надеяться, что модель скажет правду просто потому, что ты вежливо попросил. Хочешь чистый текст без галлюцинаций — внедряй автоматический перекрестный допрос. Метод дает точность до 0.84 AUC-PR, но требует нормальных инженерных рук, чтобы настроить связку из NER, T5 и статистических тестов. Кто не поленится собрать этот конвейер, получит фильтр, который отсеивает бред на лету. Остальные продолжат краснеть перед клиентами за то, что их чат-бот немножко присочинил.

Сгенерировано: 21.12.2025 17:01 | ArXiv Data Collector

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

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

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