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
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) — детекция галлюцинаций через токен-фичи
