Запись архива

Semantic entropy: как ловить галлюцинации у LLM

Разбираем работу Oxford OATML и Nature 2024 о semantic entropy — методе, который оценивает неопределённость LLM по смыслу ответов и помогает ловить часть галлюцинаций без разметки.

Схема подсчёта semantic entropy: один вопрос, несколько сэмплов ответа, кластеризация по смыслу и итоговый счёт риска конфабуляции

19 июня 2024 года в Nature вышла работа исследователей OATML из Оксфорда: Detecting hallucinations in large language models using semantic entropy. Авторы предлагают смотреть не на разброс слов, а на разброс смыслов в нескольких сэмплах одного и того же ответа. Это важно, потому что многие LLM ошибаются не просто неверно, а именно произвольно: сегодня дают один уверенный ответ, завтра другой.

Сразу уточним историческую рамку. Это разбор конкретной работы середины 2024 года и моделей, доступных авторам тогда: LLaMA 2 Chat, Falcon Instruct, Mistral Instruct и GPT-4 v.0613. Мы не подменяем этот разбор более новыми системами 2025–2026 годов, а фиксируем, что именно показано в первоисточнике и что из этого следует для практики.

Коротко

  • Semantic entropy оценивает неопределённость LLM в пространстве смысла, а не токенов: разные формулировки одного и того же ответа не считаются отдельными версиями мира.
  • Метод нацелен не на все ошибки, а на конфабуляции — случаи, когда модель произвольно выдумывает ответ и меняет его при повторном сэмплировании.
  • По данным авторов статьи в Nature, при усреднении по 30 сочетаниям задача-модель semantic entropy дала лучший AUROC среди сравниваемых базовых методов: 0.790 против 0.691 у naive entropy, 0.698 у P(True) и 0.687 у embedding regression.
  • Для длинных биографий авторы ввели отдельную схему: сначала разбить абзац на атомарные факты, затем пересобрать вопросы и уже по ним считать семантическую энтропию.
  • Практический смысл метода — не доказать истинность, а вовремя понять, когда ответу модели лучше не доверять без поиска, внешней верификации или человека в контуре.

Контекст: почему semantic entropy вообще понадобилась

У большинства простых сигналов надёжности есть одна и та же проблема: они слишком тесно привязаны к поверхности текста. Обычная энтропия токенов, перплексия или разброс по строкам считают, что два по-разному сформулированных ответа — это уже два разных исхода. Но для пользователя это не так: если модель говорит одно и то же разными словами, это скорее признак устойчивого знания, а не неуверенности.

Именно эту проблему ещё в работе Semantic Uncertainty: Linguistic Invariances for Uncertainty Estimation in Natural Language Generation от 2023 года авторы назвали проблемой semantic equivalence. Идея была простой: в задачах генерации нужно считать неопределённость не по строкам, а по кластерам одинакового смысла. Статья в Nature от 19 июня 2024 года — это уже расширенная журнальная версия этой линии: с более новыми на тот момент моделями, большим набором задач и отдельным экспериментом на длинных биографиях.

Важна и ещё одна развилка. Авторы сознательно сужают слово «галлюцинация» до более конкретного механизма — конфабуляции. Это не любая ложь модели и не любой неверный вывод. Конфабуляция — это когда модель отвечает неправильно и произвольно: если задать тот же вопрос ещё раз с другим случайным сэмплированием, смысл ответа может поменяться. Такой тип ошибки хорошо подходит под неопределённостный анализ, потому что сама модель демонстрирует внутреннее колебание.

Отсюда и главный тезис статьи: если вы можете увидеть, что модель распадается на несколько несовместимых смыслов, то вы получили полезный сигнал риска ещё до внешнего фактчекинга. Это особенно важно там, где у вас нет заранее размеченного датасета под конкретный домен и нет гарантии, что завтрашние запросы будут похожи на вчерашние.

Метод: как считается semantic entropy

Базовая процедура в статье выглядит так.

  1. Для одного вопроса модель несколько раз генерирует ответ при ненулевой случайности.
  2. Полученные ответы сравниваются на смысловую эквивалентность, а не на буквальное совпадение.
  3. Ответы группируются в кластеры одинакового смысла.
  4. Дальше энтропия считается уже не по отдельным строкам, а по распределению вероятностей между смысловыми кластерами.

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

H_sem(x) = - Σ_i p(C_i|x) log p(C_i|x)

Здесь C_i — смысловой кластер ответов на запрос x. В отличие от naive entropy, нас интересует не количество разных формулировок, а распределение массы вероятности между разными значениями ответа.

Почему это лучше обычной энтропии

Наивная токенная энтропия наказывает модель за перефразирование. Для свободной генерации это плохой сигнал: один и тот же факт можно выразить кратко, развёрнуто, с перестановкой слов или с разной степенью детализации. Semantic entropy пытается убрать именно эту лексическую вариативность и оставить только неопределённость по содержанию.

Как авторы определяют одинаковый смысл

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

Что делать, если модель — чёрный ящик

Для стандартного варианта semantic entropy полезны вероятности генерации. Но в работе был и важный практический кейс: GPT-4 v.0613. Авторы прямо пишут, что на момент написания статьи этот интерфейс не давал нужных вероятностей токенов, поэтому для GPT-4 они использовали дискретную аппроксимацию semantic entropy — по частотам смысловых кластеров, без точных logprob.

Это важный момент для продакшена: метод можно применять не только в white-box режиме. По данным самих авторов, дискретный вариант работал сопоставимо со стандартным оценивателем в их постановке. Но это всё равно результат той же статьи, а не независимая внешняя репликация.

Как метод адаптировали к длинным текстам

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

  1. Разбивают биографию на атомарные фактические утверждения.
  2. Автоматически реконструируют вопросы, на которые эти утверждения могли быть ответами.
  3. Сэмплируют новые ответы уже на эти вопросы.
  4. Считают semantic entropy по каждому утверждению и агрегируют её.

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

Результаты

Авторы оценивают метод в двух режимах: ответы-предложения на задачах QA и математики, а также длинные биографии. В первом режиме использовались TriviaQA, SQuAD 1.1, BioASQ 11B Task B 2023, NQ-Open и SVAMP; для каждого датасета брали по 400 train и 400 test примеров, хотя сама semantic entropy не использует обучающие метки.

Постановка Данные и модели Метрика Что показано в статье
Ответы длиной в одно предложение TriviaQA, SQuAD 1.1, BioASQ 11B, NQ-Open, SVAMP; LLaMA 2 Chat 7B/13B/70B, Falcon Instruct 7B/40B, Mistral Instruct 7B AUROC и AURAC По данным авторов, при усреднении по 30 сочетаниям задача-модель semantic entropy получила AUROC 0.790; naive entropy — 0.691; P(True) — 0.698; embedding regression — 0.687. Авторы также пишут о стабильном диапазоне 0.78–0.81 AUROC по семействам LLaMA, Falcon и Mistral.
Длинные биографии, набор FactualBio GPT-4 v.0613; 21 человек; 150 атомарных фактических утверждений, из них 45 неверных по ручной разметке AUROC, AURAC, rejection accuracy Дискретная semantic entropy, по сообщению авторов, превосходит self-check baseline и адаптированный P(True) по AUROC и AURAC. По rejection accuracy преимущество сохраняется, пока система отклоняет до 20% наиболее рискованных ответов.
Black-box вариант GPT-4 v.0613 без доступа к вероятностям токенов Сопоставление со стандартным оценивателем Авторы утверждают, что дискретный вариант semantic entropy работает близко к стандартному и позволяет применять подход без logprob. Это полезно для API-моделей, но независимой валидации именно этого тезиса статья не даёт.

Если перевести эти метрики на язык внедрения, AUROC показывает, насколько хорошо счёт разделяет верные и неверные ответы, а AURAC — насколько растёт итоговая точность, если системе разрешить воздерживаться от ответа там, где риск высок. Для системных инженеров именно второй показатель часто ближе к реальному продукту: не всегда нужно отвечать на всё, иногда выгоднее вовремя промолчать или отправить запрос в поиск.

Ещё одна сильная часть статьи — проверка на длинных текстах. Биографии в FactualBio в среднем намного длиннее коротких QA-ответов, и именно там часто проявляется практический риск LLM: модель выдаёт гладкий абзац, внутри которого часть фактов просто выдумана. Работа показывает, что смысловая неопределённость может служить сигналом и в таком режиме, если сначала декомпозировать ответ на атомарные утверждения.

Интерпретация

Главный вклад статьи — не в том, что она «убирает галлюцинации». Она показывает более узкую и честную вещь: у модели можно измерять не только уверенность в следующем токене, но и неуверенность в следующем смысле. Это гораздо ближе к реальной задаче надёжности в свободной генерации.

Второй важный вывод — semantic entropy полезна именно как сигнал маршрутизации. Если счёт низкий, ответ можно отдавать быстрее. Если средний — добавить ссылки, retrieval, повторный запрос или более дорогую модель. Если высокий — лучше включить воздержание, поиск или человека. Такой режим хорошо сочетается с продуктовой логикой selective generation, а не конкурирует с ней.

Наш комментарий

На наш взгляд, сила работы в том, что она снимает ложную дихотомию между двумя плохими стратегиями: либо безусловно доверять LLM, либо пытаться в каждом случае запускать тяжёлый внешний фактчекинг. Semantic entropy предлагает промежуточный слой управления риском. Это не проверка истины, а оценка того, насколько сама модель распадается на несколько несовместимых интерпретаций.

Для практики это особенно ценно в местах, где retrieval либо дорог, либо плохо определён. Например, в доменных помощниках без хорошего поискового индекса, в внутренних knowledge assistant-сценариях и в длинной генерации, где пользователю трудно заметить отдельную ошибку внутри гладкого текста. Но ставить этот счёт в одиночку как «датчик правды» было бы ошибкой: он лучше работает как gating-сигнал поверх пайплайна, а не как последняя инстанция.

Ограничения

Первое ограничение — предмет работы уже, чем слово «галлюцинации» в массовом употреблении. Авторы сами подчёркивают: semantic entropy хорошо подходит для конфабуляций, но не обязана ловить случаи, когда модель стабильно повторяет неверное утверждение, усвоенное из данных обучения. Если все сэмплы уверенно сходятся в одном неправильном смысле, энтропия будет низкой.

Второе — вычислительная цена. Классическая semantic entropy требует многократного сэмплирования и последующей смысловой кластеризации. Уже в follow-up работе Semantic Entropy Probes авторы прямо мотивируют новый метод тем, что исходный sampling-based подход слишком дорог для массового применения. Иначе говоря, статья в Nature убедительно показывает полезность сигнала, но не закрывает вопрос дешёвого инференса.

Третье — зависимость от смыслового judge-модуля. Кластеризация по значению — это не магия, а конкретная инженерная аппроксимация. В статье есть пример, где semantic entropy оказывается завышенной из-за слишком чувствительного различения между точной датой и годом. Это хороший урок: качество метода зависит не только от самой LLM, но и от того, как именно вы решаете задачу semantic equivalence.

Четвёртое — ограниченность экспериментального охвата. Биографический набор FactualBio небольшой: в статье это 21 человек и 150 атомарных утверждений, из которых 45 размечены как неверные. Для исследовательской демонстрации этого достаточно, но для сильных обобщений о длинной генерации во всех доменах — нет.

Пятое — историческая привязка к моделям середины 2024 года. В статье нет reasoning-моделей поздней волны, нет современных API-режимов с иным поведением logprob и нет анализа мультимодальных систем. Это не недостаток авторов, а просто граница применимости результатов. Если вы хотите переносить выводы на стек 2026 года, это уже будет инженерная гипотеза, а не прямой факт из статьи.

Вывод

Если свести работу к одной мысли, то semantic entropy — это способ измерять не «насколько разнообразны ответы», а «насколько модель колеблется между разными смыслами». Именно поэтому метод оказывается полезнее обычной токенной энтропии для ловли конфабуляций в свободной генерации.

Практический вывод тоже достаточно ясен. Semantic entropy стоит рассматривать не как замену RAG, фактчекингу или человеку, а как слой управления риском: когда отвечать, когда искать, когда воздерживаться. Для продакшена это, возможно, даже важнее, чем сам исследовательский результат по AUROC.

Источники

FAQ

  • Semantic entropy ловит любые галлюцинации?

    Нет. В этой работе метод нацелен прежде всего на конфабуляции: произвольные, нестабильные ошибки. Если модель стабильно повторяет один и тот же ложный факт, semantic entropy может быть низкой.

  • Нужен ли доступ к logprob и скрытым состояниям?

    Для стандартного варианта доступ к вероятностям полезен. Но в статье есть дискретная аппроксимация, которую авторы применили к GPT-4 v.0613 без доступа к вероятностям токенов.

  • Сколько генераций нужно делать?

    В постановке статьи для ответов длиной в одно предложение авторы использовали десять генераций, а для длинных биографий — отдельную процедуру с реконструкцией вопросов и тремя новыми ответами на каждый вопрос. Это авторская настройка эксперимента, а не универсальный стандарт для любого продакшена.

  • Можно ли заменить semantic entropy RAG или внешнюю проверку фактов?

    Скорее нет. Метод лучше использовать как сигнал маршрутизации: при высоком риске подключать поиск, retrieval, повторный запрос или человека.

Читайте также