Files
BlackboxBook/book/03_hallucinations.md
2026-05-20 20:55:03 +03:00

440 lines
44 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ГЛАВА 3. ГАЛЛЮЦИНАЦИИ — НЕ ПОЛОМКА, А РЕЖИМ РАБОТЫ
---
> *«Система уверенно назвала шесть судебных решений в поддержку иска. Проблема в том, что ни одного из них не существовало.»*
В 2023 году нью-йоркский адвокат Стивен Шварц подал в суд ходатайство, подкреплённое ссылками на прецеденты: *Varghese v. China Southern Airlines*, *Martinez v. Delta Airlines* и ещё четыре кейса. Судья не нашёл ни одного из них в базе данных. Все шесть были выдуманы ChatGPT — вместе с номерами дел, датами и цитатами из «решений». Шварц и его коллега ЛоДука были совместно оштрафованы на $5 000 и стали символом главного практического риска LLM.
Это не единичный курьёз. Google Bard в своём первом публичном демо заявил, что телескоп James Webb сделал первое в истории фото экзопланеты — что было фактически неверно. В юридических, медицинских и финансовых сценариях такие ошибки особенно опасны не потому, что модель «редко ошибается», а потому что она ошибается **уверенно и правдоподобно**.
Всё это — не ошибки в привычном понимании. Программа не «упала», не выдала сообщение об ошибке. Модель не «сломалась» — она работала *именно так, как была обучена*.
Галлюцинация LLM — это **уверенная конфабуляция**: модель заполняет пробелы в знаниях правдоподобными, но вымышленными деталями. Точно так же, как человек с синдромом Корсакова искренне «вспоминает» события, которых не было, — не лжёт, а достраивает картину мира до целостной. Разница в том, что человеку мы можем сказать «подумай ещё раз», а модель каждый раз думает, что говорит правду.
Почему это должно волновать каждого, кто строит продукты на LLM? Потому что галлюцинация — самый коварный режим отказа: **система не сигнализирует об ошибке**. Она возвращает ответ с той же уверенностью, что и при корректных фактах. Без внешних контуров проверки вы не узнаете о проблеме, пока она не дойдёт до пользователя, суда или пациента.
---
## 3.1. Модель обучена предсказывать правдоподобное продолжение, а не истину
Это утверждение — не метафора, а буквальное описание целевой функции. Понимание этого факта — водораздел между наивным и инженерным использованием LLM.
### Функция потерь: правдоподобие, не истинность
LLM оптимизируют **авторегрессионный cross-entropy loss** (как мы видели во Введении): на каждом шаге модель предсказывает распределение вероятностей по всему словарю (~100K200K токенов) и штрафуется за то, насколько её прогноз расходится с «правильным» следующим токеном из тренировочных данных.
**Ключевое следствие:** модель не знает, верен ли факт. Она знает, что «Париж — столица Франции» — вероятное продолжение после «Столица Франции —». Но если в тренировочных данных часто встречалось «CERN расположен в Женеве, Швейцария, недалеко от границы с Францией», модель может сгенерировать «CERN расположен во Франции» — потому что `Франция` имеет высокую статистическую ассоциацию с контекстом CERN.
### Типы галлюцинаций
Классификация из обзорных работ (Ji et al., 2023; Huang et al., 2023):
**1. Intrinsic hallucinations (внутренние):**
Модель генерирует информацию, **противоречащую** предоставленному контексту или общеизвестным фактам.
Пример:
```
Контекст: "Компания основана в 2015 году."
Модель: "Компания, основанная в 2012 году, показала..."
```
Причина: attention не «подхватил» дату из контекста, MLP-слои активировали ассоциации с другой датой, которая статистически более вероятна в похожих контекстах.
**2. Extrinsic hallucinations (внешние):**
Модель генерирует **правдоподобную, но полностью выдуманную** информацию, которую невозможно ни подтвердить, ни опровергнуть на основе контекста.
Пример:
```
Запрос: "Расскажи о исследовании Smith et al. (2024) о квантовых вычислениях."
Модель: "В работе Smith et al. (2024) был предложен алгоритм QuBit-3,
который показал 47% ускорение на задачах факторизации..."
```
Всё звучит правдоподобно. Но исследование, алгоритм и числа — выдуманы. Модель просто продолжила в стиле научного текста, заполнив пропуски правдоподобными деталями.
**3. Faithfulness hallucinations (неверность):**
Модель отклоняется от собственной цепочки рассуждений. Промежуточные шаги CoT ведут к одному выводу, но финальный ответ — другой.
### Распространённость: масштаб проблемы
Чтобы оценить масштаб, представьте: ваш коллега даёт верные факты только в 6 из 10 случаев. Вы бы доверили ему писать документацию? А именно такой «коллега» — ранние модели на задачах атомарной точности.
| Метрика | Результат | Источник |
|---------|-----------|----------|
| TruthfulQA: сильные модели всё ещё далеки от человека | ~7580% правдивых ответов | Lin et al. (2022); результаты моделей — из последующих оценок на TruthfulQA leaderboard |
| TruthfulQA: человек | 94% | Lin et al. (2022) |
| FActScore: ChatGPT на биографиях | 58% атомарная точность | Min et al. (EMNLP 2023) |
| SimpleQA: GPT-4o | ~39% точных ответов | OpenAI (2024) |
| HELMET: оценка в длинном контексте | Галлюцинации растут с длиной контекста | Yen et al. (2024) |
| Парадокс масштабирования | Более крупные модели (GPT-3) были *менее* правдивы, чем мелкие | Lin et al. (2022) |
**SimpleQA** (OpenAI, 2024) — бенчмарк из ~4 300 коротких фактуальных вопросов с однозначными ответами. Он показал, что даже сильные модели ошибаются на банальных фактах. **HELMET** добавил важное измерение: точность модели деградирует по мере увеличения длины контекста, что критично для длинных документов.
**Прогресс reasoning-моделей (20252026).** Модели с test-time compute и extended thinking действительно улучшают качество на сложных задачах и нередко ловят часть собственных ошибок. Но — и это ключевой вывод — **они не устраняют галлюцинации**. Архитектура остаётся авторегрессионной: модель по-прежнему предсказывает следующий токен, а не выполняет внешний фактчекинг.
Последний пункт таблицы критически важен: **масштабирование не решает проблему галлюцинаций автоматически**. Более крупные модели знают больше фактов, но и более уверенно генерируют правдоподобную ложь. RLHF частично исправляет это, но не устраняет.
---
## 3.2. Локальный оптимум и «капитан очевидность»
### Проблема сглаживания
Обучение LLM включает два этапа:
1. **Pre-training**: максимизация правдоподобия на огромном корпусе. Модель учится генерировать текст, похожий на интернет.
2. **Alignment (RLHF/DPO)**: модель обучается генерировать ответы, которые нравятся людям-оценщикам.
На втором этапе происходит **сглаживание**: модель подавляет «рискованные» продолжения (необычные идеи, спорные утверждения, нестандартные формулировки) в пользу **консервативных, безопасных, шаблонных**.
### Как это проявляется
1. **Банальные обобщения**: «Это сложная тема с множеством аспектов...»
2. **Списки трюизмов**: «Плюсы: гибкость, масштабируемость, удобство. Минусы: сложность, стоимость, кривая обучения.»
3. **Хеджирование**: «Это зависит от конкретного случая и может варьироваться...»
4. **Избыточные предупреждения**: «Важно учитывать, что данный подход может не подойти для всех ситуаций...»
### Почему это режим, а не баг
Выравнивание (alignment) оптимизирует **предпочтения оценщиков**, а не качество инженерного вывода. Оценщики — часто не эксперты — предпочитают:
- Структурированные списки → модель генерирует списки даже когда нужен связный анализ.
- Осторожные формулировки → модель хеджирует даже когда факт однозначен.
- Длинные ответы → модель раздувает текст даже когда достаточно одного предложения.
### Sycophancy: модель как «поддакиватель»
Одно из самых коварных последствий RLHF — **сикофантия**. Модель обучена на данных, где согласие с пользователем получает более высокую оценку. Результат:
```
Пользователь: "Мне кажется, что Python быстрее C++ для числовых вычислений. Верно?"
Модель: "Да, вы правы! Python действительно может быть быстрее C++
в ряде сценариев числовых вычислений, особенно с NumPy..."
```
Модель начинает с «Да, вы правы!» — хотя утверждение фактически неверно. Она подстраивает объяснение под заданный вывод, а не корректирует ошибку. Исследования (Sharma et al., 2024) показали, что модели систематически меняют свой ответ, когда пользователь выражает несогласие — даже если изначальный ответ был верным.
Ещё хуже — **прогрессирующая сикофантия** в многошаговых диалогах: модель всё больше подстраивается под тон и позицию пользователя с каждым сообщением, усиливая его заблуждения вместо того, чтобы их корректировать.
### Verbosity bias: длинный ≠ правильный
**Verbosity bias** — системное предпочтение длинных ответов в данных RLHF. Оценщики чаще выбирают развёрнутый ответ, даже если краткий точнее. Модель это усвоила:
```
Вопрос: "Какой порт по умолчанию у PostgreSQL?"
Ответ модели (verbosity bias):
"Отличный вопрос! PostgreSQL — это мощная объектно-реляционная
система управления базами данных с открытым исходным кодом.
Она была разработана в Университете Калифорнии в Беркли
и имеет более 35 лет активной разработки.
Порт по умолчанию для PostgreSQL — 5432.
Важно отметить, что этот порт можно изменить..."
Правильный ответ: "5432"
```
В «водянистом» ответе каждое дополнительное предложение — шанс для галлюцинации. Чем больше текста генерирует модель, тем выше вероятность, что она «соскользнёт» с фактов на правдоподобные, но выдуманные детали.
**DPO** (Rafailov et al., 2023) и более поздние методы (KTO, ORPO) частично решают эти проблемы, позволяя более тонкое выравнивание без нестабильности PPO, но фундаментальный компромисс «безопасность vs точность» остаётся.
---
## 3.3. Faithfulness reasoning: цепочка рассуждений может быть фасадом
### Chain-of-Thought: мощный, но хрупкий инструмент
Chain-of-Thought (CoT, Wei et al., 2022) — техника, при которой модель генерирует промежуточные шаги рассуждения перед финальным ответом. Результаты впечатляют:
| Бенчмарк | Без CoT | С CoT | Улучшение |
|----------|---------|-------|-----------|
| GSM8K (математика) | ~18% (PaLM 540B) | ~57% | +39 п.п. |
| StrategyQA | — | заметное улучшение | Self-Consistency |
**Zero-shot CoT** (Kojima et al., NeurIPS 2022): достаточно добавить фразу «Let's think step by step» чтобы получить значительное улучшение на математических задачах. На GSM8K: с 10.4% до 40.7%.
### Проблема: post-hoc rationalization
Однако **внутренние рассуждения модели не обязательно отражают реальный вычислительный путь**. Это показали исследования Turpin et al. (2023) и Lanham et al. (2023):
1. **Модель «знает» ответ до рассуждения**. В некоторых случаях финальный ответ определяется уже первыми токенами CoT-цепочки. Остальные шаги — пост-рационализация.
2. **CoT можно сломать контекстом**. Если в промпте содержится подсказка неверного ответа (например, «Подсказка: ответ, вероятно, 42»), модель подстроит рассуждения под 42, даже если правильный ответ — 37.
3. **Unfaithful CoT**: модель генерирует логически корректные шаги, которые не соответствуют её внутренним вычислениям.
### Пример unfaithful reasoning
```
Задача: 247 × 13 = ?
Модель (CoT):
"Разобьём на шаги:
247 × 10 = 2470
247 × 3 = 741
2470 + 741 = 3211
Ответ: 3211"
```
Выглядит как правильное рассуждение. Но:
- Модель не выполняла умножение — она сгенерировала числа, которые «выглядят правильно» для этого паттерна.
- Иногда промежуточные шаги верны, но отдельные числа подставлены из ассоциативной памяти, а не вычислены.
- Если усложнить числа (373 × 4729), ошибки станут очевидными.
### Интерпретируемость усилила этот аргумент
До 2025 года тезис про unfaithful CoT в основном опирался на поведенческие эксперименты: модель отвечала так, будто рассуждала, но при манипуляции подсказками выяснялось, что объяснение ненадёжно. Механистическая интерпретируемость добавила **внутренние свидетельства**.
В кейс-стади Anthropic по circuit tracing видно различие между задачами, где модель действительно проходит через промежуточные вычислительные шаги, и задачами, где она выстраивает правдоподобное объяснение уже после выбора направления ответа. Особенно показателен режим **motivated reasoning**: если модели подсунуть неверную подсказку, она может не просто ошибиться, а буквально подобрать цепочку промежуточных аргументов под желаемый вывод.
Тот же инструментарий дал ещё одно важное наблюдение для темы галлюцинаций: в ряде кейсов модель изначально склонна **не спекулировать**, а выдуманный ответ появляется, когда другой внутренний контур подавляет этот отказ и активирует ощущение «я знаю ответ». Практический смысл прост: chain-of-thought полезен как интерфейс декомпозиции, но **не должен считаться аудиторским следом**, если вы не проверяете ответ внешними источниками или отдельным verifier-контуром.
### Когда CoT помогает, а когда вредит
| Ситуация | CoT помогает? | Почему |
|----------|---------------|--------|
| Многошаговая математика | Да | Структурирует генерацию, снижает ошибки переноса |
| Логические задачи | Да | Позволяет отслеживать состояние |
| Простые фактуальные вопросы | Нет | Добавляет шум, может «убедить» модель в неверном ответе |
| Классификация | Скорее нет | Прямой паттерн-матчинг эффективнее |
| Творческие задачи | Зависит | Может загнать в одну колею рассуждений |
Полноценный разбор chain-of-thought и стратегий декомпозиции — в [Главе 9](09_multistep_reasoning.md).
---
## 3.4. Таксономия причин галлюцинаций
### 1. Тренировочные данные
- **Шумные данные**: интернет содержит ошибки, мифы, устаревшие факты. Модель учится на всём.
- **Дублирование**: часто повторяемые ошибки получают больший вес.
- **Противоречия**: один и тот же факт может быть представлен по-разному в разных источниках.
### 2. Архитектурные ограничения
- **Нет явного механизма фактчекинга**: модель не сверяет свои выходы с базой знаний.
- **Soft attention**: модель не может точно «скопировать» информацию из контекста — она интерполирует через attention-веса.
- **Ограниченная глубина**: сложные многошаговые рассуждения требуют больше слоёв, чем доступно.
### 3. Процесс декодирования
- **Sampling**: при ненулевой температуре модель сэмплирует из распределения, что вносит случайность.
- **Top-k / top-p фильтрация**: отсекает маловероятные, но потенциально корректные токены.
- **Greedy decoding**: может застрять в локальном оптимуме.
### 4. Alignment
- **RLHF reward hacking**: модель учится генерировать ответы, которые обманывают reward model, а не которые корректны.
- **Sycophancy**: модель соглашается с пользователем, даже если он неправ (подробнее — в разделе 3.2).
- **Verbosity bias**: более длинные ответы получают более высокие reward-оценки, что стимулирует «разбавление» фактов общими фразами (подробнее — в разделе 3.2).
- **Мультимодальные галлюцинации**: с ростом vision- и video-моделей проблема распространилась на изображения. Модели «видят» объекты, которых нет на фото, выдумывают текст на вывесках, неверно интерпретируют графики. В медицинской визуализации это особенно опасно.
---
## 3.5. Что может помочь: инженерные решения
### RAG (Retrieval Augmented Generation)
**Принцип**: вынос фактов во внешний индекс. Модель получает релевантные документы в контексте и основывает ответ на них, а не на параметрической памяти.
```
[Запрос пользователя] → [Embedding запроса] → [Поиск в векторном индексе]
→ [Top-K релевантных чанков] → [Промпт: запрос + чанки] → [LLM: ответ с цитатами]
```
**Эффективность**: RAG часто заметно снижает hallucination rate на фактуальных задачах, если retrieval действительно приносит релевантные источники (Lewis et al., 2020; Gao et al., 2024). К 2026 году RAG + verification loops стали обычной production-практикой, а не лабораторным трюком.
Но есть важная тонкость: retrieved context не становится «истиной автоматически». Работа *ClashEval* показала, что между внешним контекстом и внутренним prior модели идёт постоянная борьба. Если retrieval ошибся, модель может послушно повторить неверный факт; если retrieval прав, модель всё равно может упрямо держаться за свой prior. Поэтому production-RAG требует не только retrieval, но и **отдельной оценки качества retrieval, проверки противоречий и метрик faithfulness**.
Подробно о RAG-пайплайнах, стратегиях чанкинга, GraphRAG, RAPTOR и типичных ошибках — в [Главе 12](12_rag.md).
### Constrained Decoding
**Принцип**: ограничение пространства вывода грамматикой или схемой. Модель может генерировать только валидный JSON, SQL, XML и т.д.
К 2026 году constrained decoding стал частью основных API-платформ:
- **OpenAI Structured Outputs**: JSON Schema с гарантированной валидацией, включая `enum`, `required`, вложенные объекты
- **Anthropic Tool Use / JSON mode**: строгая JSON-генерация через tool definitions
- **Google Gemini**: controlled generation с JSON Schema
- **Outlines / llama.cpp grammar**: grammar-guided generation для локальных моделей
- **Instructor** (Python): обёртка для Pydantic-валидации поверх любого API
**Что это даёт на практике**: если вы запрашиваете ответ в формате `{"city": string, "population": integer}`, модель *физически не может* вернуть текст вместо числа или пропустить поле. Синтаксические ошибки устранены полностью.
**Чего это не решает**: семантические галлюцинации. Модель может вернуть `{"city": "Москва", "population": 25000000}` — валидный JSON, но неверное число. Constrained decoding — необходимый, но недостаточный барьер.
### Verification Loops
**Принцип**: отдельный агент или промпт проверяет выход генератора.
```
[Генератор] → [Выход] → [Верификатор: проверка фактов, ссылок, кода] → [Финальный ответ / Запрос повторной генерации]
```
Подробно — в [Главе 13](13_anti_hallucination_loop.md).
### Методы детекции галлюцинаций
Прежде чем исправлять галлюцинации, их нужно **обнаружить**. В 20252026 сложился набор практичных подходов:
#### 1. Self-consistency (самосогласованность)
Генерируем N ответов (например, 5) на один вопрос при ненулевой температуре. Если все ответы совпадают — высокая уверенность. Если разброс значительный — маркер галлюцинации.
```python
# Псевдокод самосогласованности
responses = [generate(prompt, temperature=0.7) for _ in range(5)]
if len(set(responses)) > 2:
flag_as_uncertain()
```
**Ограничение**: модель может стабильно галлюцинировать (все 5 ответов одинаково неверны), если заблуждение «зашито» в веса.
Подробный анализ Self-Consistency как техники генерации, включая стоимость и масштабирование — в [Главе 8](08_multiple_hypotheses.md).
#### 2. NLI-based verification (проверка через Natural Language Inference)
Модель NLI (DeBERTa, BART-MNLI) проверяет, **следует ли** утверждение из источника:
```
Предпосылка (из RAG): "Компания основана в 2015 году в Берлине."
Гипотеза (из ответа LLM): "Компания, основанная в 2012 году..."
NLI-вердикт: CONTRADICTION → галлюцинация
```
Это можно автоматизировать для каждого атомарного факта в ответе (подход FActScore).
**Промпт для ИИ:** «Напиши Python-скрипт, который детектирует потенциальные фактические ошибки (галлюцинации) в ответах LLM через NLI-модель (natural language inference). Скрипт принимает: (1) исходный текст/запрос, (2) ответ модели. Разбивает ответ на атомарные утверждения (claims), каждое утверждение проверяет через NLI (entailment/contradiction/neutral) относительно ground-truth фактов. Используй библиотеку HuggingFace transformers, модель типа `microsoft/deberta-v3-large-mnli` или актуальный аналог. Результат — таблица: claim → NLI verdict → confidence. Покажи пример использования на 3 утверждениях.»
#### 3. Анализ log-вероятностей
Многие API возвращают `logprobs` для каждого токена. Низкая log-вероятность конкретного факта — сигнал неуверенности модели:
- Если модель пишет "основана в **2015** году" с logprob 0.1 — она уверена.
- Если logprob 3.5 — она «угадывает». Стоит перепроверить.
**На практике**: установите порог и автоматически маркируйте low-confidence факты для человеческой проверки.
#### 4. Перекрёстная верификация моделями
Используйте модель A для генерации, модель B для проверки. Разные модели имеют разные паттерны галлюцинаций, и расхождение — надёжный сигнал. Дороже, но эффективнее self-consistency.
### Temperature Tuning
| Параметр | Значение | Применение |
|----------|----------|------------|
| `temperature` = 0.00.1 | Почти детерминированный | Фактуальные задачи, код, structured output |
| `temperature` = 0.30.5 | Умеренный | Баланс точности и разнообразия |
| `temperature` = 0.70.9 | Высокий | Брейншторм, креативные задачи, исследование пространства |
| `temperature` = 1.0+ | Максимальный | Только для генерации разнообразных кандидатов с последующей фильтрацией |
**Важно**: температура меняет распределение, но не устраняет галлюцинации. При `temp=0` модель всё ещё может галлюцинировать — просто делает это **детерминированно** (один и тот же неверный ответ каждый раз).
---
## Практический вывод
### Принцип: галлюцинация — ожидаемое поведение, проектируйте контуры
| # | Правило | Действие |
|---|---------|----------|
| 1 | **Галлюцинация — не баг, а режим** | Проектируйте системы с ожиданием ошибок, не надейтесь на «умную» модель |
| 2 | **Разделяйте генерацию и проверку** | Generator ≠ Verifier. Используйте отдельные модели или промпты |
| 3 | **Внешние источники для фактов** | RAG для данных, инструменты для вычислений, API для актуальной информации |
| 4 | **Логируйте hallucination rate** | Измеряйте на ваших задачах: FActScore, ручная проверка выборки |
| 5 | **Не доверяйте CoT как доказательству** | CoT улучшает accuracy, но не гарантирует faithful reasoning |
| 6 | **Снижайте temperature для фактов** | 0.00.3 для детерминированных задач |
| 7 | **Используйте constrained decoding** | Structured outputs устраняют формальные ошибки |
| 8 | **Отдельно измеряйте retrieval quality и faithfulness** | Если RAG ошибся, выясняйте отдельно: не нашли документ, нашли мусор или модель проигнорировала контекст |
### Ментальная модель
> Относитесь к LLM как к **очень начитанному стажёру, который никогда не говорит «я не знаю»**. Он прочитал миллионы документов и может убедительно говорить о чём угодно. Но он не проверяет свои слова перед тем, как их сказать. Ваша задача — построить систему ревью, которая ловит ошибки до того, как они попадут к конечному пользователю.
---
### Стратегии по уровню сложности
Не все проекты требуют одинаковой защиты от галлюцинаций. Вот прогрессия — от простого к сложному:
#### Уровень 1: «Минимальная гигиена» (1 день работы)
- Установить `temperature=0` для фактуальных задач
- Использовать structured outputs (JSON Schema) для всех API-вызовов
- Добавить системный промпт: *«Если ты не уверен в факте — скажи об этом явно. Не выдумывай ссылки, даты или имена.»*
- Включить few-shot примеры с корректным ответом «Я не знаю» в промпт
**Эффект**: заметно снижает грубые галлюцинации. Бесплатно.
#### Уровень 2: «RAG-фундамент» (12 недели)
- Подключить векторную БД с вашими документами
- Реализовать базовый RAG-пайплайн (embed → retrieve → generate)
- Добавить правило: *«Отвечай только на основе предоставленных документов. Если ответа нет в документах — скажи об этом.»*
- Настроить чанкинг под ваш тип контента (размер, перекрытие, стратегия)
**Эффект**: существенно снижает hallucination rate на фактуальных задачах — при условии, что retrieval приносит релевантные источники.
#### Уровень 3: «Верификация» (24 недели)
- Добавить verification loop: отдельный вызов LLM проверяет ответ генератора
- Реализовать self-consistency (35 параллельных генераций, мажоритарное голосование)
- Подключить NLI-модель для автоматической проверки фактов против источников
- Логировать hallucination rate на выборке (ручная разметка 50100 ответов в неделю)
**Эффект**: ощутимо сокращает оставшиеся ошибки. Главное — вы начинаете *видеть* проблему количественно.
#### Уровень 4: «Продакшн-контур» (12 месяца)
- GraphRAG или RAPTOR для сложных мультихоповых запросов
- Перекрёстная верификация (модель A генерирует, модель B проверяет)
- Log-probability мониторинг: автоматический флаг для low-confidence фактов
- Цепочка: генерация → проверка → извлечение цитат → финальная валидация
- A/B-тестирование hallucination rate на реальных пользователях
- Человек в контуре (human-in-the-loop) для критичных решений
**Эффект**: hallucination rate выходит на уровень, приемлемый для регулируемых отраслей — при условии постоянного мониторинга и human-in-the-loop для критичных решений.
### Задания
1. **Измерьте hallucination rate на вашей задаче.** Возьмите 50 реальных запросов к вашей LLM-системе, прогоните их через модель и вручную разметьте ответы: корректный факт / галлюцинация / частичная неточность. Посчитайте долю галлюцинаций. Это ваш baseline — без него вы не сможете оценить, помогает ли какая-либо стратегия.
2. **Сравните self-consistency с одиночной генерацией.** На тех же 50 запросах запустите генерацию 5 раз с `temperature=0.7`. Для каждого запроса определите: совпадают ли ответы? Если нет — насколько разброс коррелирует с фактическими ошибками? Ожидаемый результат: вы получите интуицию о том, какие типы вопросов нестабильны.
3. **Проведите A/B-тест «с RAG vs без RAG».** Подготовьте 20 фактуальных вопросов, ответы на которые содержатся в ваших документах. Сравните точность ответов модели с RAG-контекстом и без него. Зафиксируйте не только accuracy, но и типы ошибок: игнорирование контекста, выдумывание деталей сверх источника, неверная интерпретация.
4. **Сгенерируйте синтетический тестовый набор галлюцинаций.** Используйте промпт для ИИ ниже, чтобы автоматически создать размеченный датасет для тестирования детектора галлюцинаций. Это ускорит создание тестовых примеров и даст вам эталон для сравнения методов детекции.
**Промпт для ИИ:** «Напиши Python-скрипт для генерации синтетического тестового набора на галлюцинации. Скрипт принимает список фактов (JSON: [{fact, category}]) и генерирует для каждого факта: (1) правильное утверждение (ground truth), (2) правдоподобную галлюцинацию (меняет детали), (3) неправдоподобную галлюцинацию (меняет категорию/сущность). Используй OpenAI API или Anthropic API. Результат — JSONL-файл с полями: id, fact, claim_type (ground_truth/plausible_hallucination/implausible), claim. Покажи генерацию для 10 фактов.»
---
## Источники
- Wei, J., et al. (2022). "Chain-of-Thought Prompting Elicits Reasoning in Large Language Models." NeurIPS.
- Kojima, T., et al. (2022). "Large Language Models are Zero-Shot Reasoners." NeurIPS.
- Wang, X., et al. (2023). "Self-Consistency Improves Chain of Thought Reasoning in Language Models." ICLR.
- Lin, S., et al. (2022). "TruthfulQA: Measuring How Models Mimic Human Falsehoods." ACL.
- Min, S., et al. (2023). "FActScore: Fine-grained Atomic Evaluation of Factual Precision." EMNLP.
- Ji, Z., et al. (2023). "Survey of Hallucination in Natural Language Generation." ACM Computing Surveys.
- Huang, L., et al. (2023). "A Survey on Hallucination in Large Language Models."
- Lewis, P., et al. (2020). "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks." NeurIPS.
- Wu, K., Wu, E., Zou, J. (2025). "ClashEval: Quantifying the tug-of-war between an LLM's internal prior and external evidence." arXiv:2404.10198.
- Anthropic. (2025). "Tracing the thoughts of a large language model."
- Turpin, M., et al. (2023). "Language Models Don't Always Say What They Think."
- Lanham, T., et al. (2023). "Measuring Faithfulness in Chain-of-Thought Reasoning."
- Rafailov, R., et al. (2023). "Direct Preference Optimization: Your Language Model is Secretly a Reward Model." NeurIPS.
- OpenAI (2024). "SimpleQA: Measuring Short-form Factuality."
- Yen, H., et al. (2024). "HELMET: How to Evaluate Long-context Language Models Effectively and Thoroughly."
- Sharma, M., et al. (2024). "Towards Understanding Sycophancy in Language Models." ICLR 2024.
- Liu, N., et al. (2023). "Lost in the Middle: How Language Models Use Long Contexts." TACL.
- Edge, D., et al. (2024). "From Local to Global: A Graph RAG Approach to Query-Focused Summarization." Microsoft Research.
- Sarthi, P., et al. (2024). "RAPTOR: Recursive Abstractive Processing for Tree-Organized Retrieval." ICLR.
- Gao, Y., et al. (2024). "Retrieval-Augmented Generation for Large Language Models: A Survey." arXiv:2312.10997.
---
**Навигация:**
- Назад: [Глава 2. Где в модели «живут» знания](02_where_knowledge_lives_in_the_model.md)
- Далее: [Глава 4. Каузальное чтение и сила первого фрейма](04_causal_reading_and_the_power_of_the_first_frame.md)