440 lines
44 KiB
Markdown
440 lines
44 KiB
Markdown
# ГЛАВА 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** (как мы видели во Введении): на каждом шаге модель предсказывает распределение вероятностей по всему словарю (~100K–200K токенов) и штрафуется за то, насколько её прогноз расходится с «правильным» следующим токеном из тренировочных данных.
|
||
|
||
**Ключевое следствие:** модель не знает, верен ли факт. Она знает, что «Париж — столица Франции» — вероятное продолжение после «Столица Франции —». Но если в тренировочных данных часто встречалось «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: сильные модели всё ещё далеки от человека | ~75–80% правдивых ответов | 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-моделей (2025–2026).** Модели с 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).
|
||
|
||
### Методы детекции галлюцинаций
|
||
|
||
Прежде чем исправлять галлюцинации, их нужно **обнаружить**. В 2025–2026 сложился набор практичных подходов:
|
||
|
||
#### 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.0–0.1 | Почти детерминированный | Фактуальные задачи, код, structured output |
|
||
| `temperature` = 0.3–0.5 | Умеренный | Баланс точности и разнообразия |
|
||
| `temperature` = 0.7–0.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.0–0.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-фундамент» (1–2 недели)
|
||
|
||
- Подключить векторную БД с вашими документами
|
||
- Реализовать базовый RAG-пайплайн (embed → retrieve → generate)
|
||
- Добавить правило: *«Отвечай только на основе предоставленных документов. Если ответа нет в документах — скажи об этом.»*
|
||
- Настроить чанкинг под ваш тип контента (размер, перекрытие, стратегия)
|
||
|
||
**Эффект**: существенно снижает hallucination rate на фактуальных задачах — при условии, что retrieval приносит релевантные источники.
|
||
|
||
#### Уровень 3: «Верификация» (2–4 недели)
|
||
|
||
- Добавить verification loop: отдельный вызов LLM проверяет ответ генератора
|
||
- Реализовать self-consistency (3–5 параллельных генераций, мажоритарное голосование)
|
||
- Подключить NLI-модель для автоматической проверки фактов против источников
|
||
- Логировать hallucination rate на выборке (ручная разметка 50–100 ответов в неделю)
|
||
|
||
**Эффект**: ощутимо сокращает оставшиеся ошибки. Главное — вы начинаете *видеть* проблему количественно.
|
||
|
||
#### Уровень 4: «Продакшн-контур» (1–2 месяца)
|
||
|
||
- 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)
|