Всем привет! Меня зовут Ирина, я NLP-инженер в red_mad_robot, занимаюсь научными исследованиями интерпретируемости LLM и анализом механизмов внутренних вычислений моделей, чтобы применять полученные результаты на практике. Например, сегодня хочу рассказать, как мы подошли к решению задачи детекции галлюцинаций LLM в RAG системах со стороны исследования графов размышлений модели — с помощью интересного фреймворка от Anthropic.

В статье поговорим, как использовать cross-layer transcoders и атрибуционные графы для детекции галлюцинаций в RAG системах. Рассмотрим пример реализации детектора на графах для анализа модели Qwen2.5-7B и практические примеры использования. Спойлер: на простой реализации получили точность детекции 85% на тестовом датасете.

Особенность галлюцинаций в RAG и как с этим работать

Представьте: вы даёте другу стопку документов и просите найти ответ на вопрос. Нормальный человек прочитает документы и найдёт ответ, либо скажет — «тут его нет».

Такого же поведения мы ждём и от языковых моделей, но, к сожалению, это так не работает (или работает не всегда). Модель может взять часть информации из контекста, добавить к ней свои «знания» из обучающих данных, приправить это статистическими закономерностями — и выдать красивый, логичный, но неправильный ответ. Хуже всего — такие ответы выглядят настолько правдоподобно и убедительно, что не вызывают абсолютно никаких сомнений.

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

Звучит неприятно, но всё в порядке. Эта проблема существует давно, и есть довольно много хороших методов её решения. Я не буду рассматривать их все подробно, просто обозначу две основных группы.

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

Методы, основанные на моделях — зачастую используют вторичные LLM для оценки качества ответа. Однако именно работа других LLM делает эти подходы подверженными тем же проблемам галлюцинаций, что они призваны выявлять.

Все методы объединяет одно общее ограничение — в них модель рассматривается «снаружи». Такие методы оценивают конечный ответ системы, без анализа причин появления той или иной галлюцинации. Мы же хотим заглянуть в глубину процесса генерации ответа внутри LLM и посмотреть, есть ли способ детектировать галлюцинации, анализируя непосредственно атрибуционные графы модели. Но как это сделать? Чтобы собрать детектор галлюцинаций модели понадобится несколько важных компонентов.

Автоэнкодеры и транскодеры — SAE и CLT

Первый важный элемент для исследования внутренних активаций модели и её интерпретируемости — разреженные автоэнкодеры или SAE (Sparse Autoencoders). Это архитектура нейронных сетей, которая позволяет разложить активации моделей глубокого обучения на интерпретируемые человеком однозначные признаки, чтобы понять внутренние представления трансформерных моделей. Фундаментальный принцип заключается в преобразовании активаций моделей в разреженное многомерное латентное пространство, где затем можно их реконструировать, используя штраф за разреженность, стимулирующий активацию небольшого числа фичей.

Дальнейшие исследования расширили возможности SAE до транскодеров, обученных реконструировать выходные данные компонента глубокой сети по его входным данным. Сross-layer transcoders (CLT) — развитые транскодерные модели — позволяют моделировать взаимодействие фичей между несколькими архитектурными слоями LLM. В них каждый признак считывается из residual стрима трансформера — суммы выходных данных всех предыдущих слоёв и исходных эмбеддингов на одном уровне — и вносит вклад в выходные данные всех последующих слоёв multilayer perceptron (MLP) исходной модели, что значительно упрощает получаемые схемы.

CLT формирует модель замещения: функции считывают данные с одного слоя и записывают во все последующие слои
CLT формирует модель замещения: функции считывают данные с одного слоя и записывают во все последующие слои

Circuit Tracing

Второй элемент детектора, конечно, Circuit Tracing от Anthropic. Это методология механической интерпретируемости языковых моделей, которая заключается в линеаризации вычислений трансформера и построении атрибуционных графов. А теперь подробнее о принципах её работы.

Модель замещения строится с помощью обученного СLT. В ней выходной сигнал MLP каждого слоя исходной трансформерной модели замещается реконструкцией, которая выполняется путём встраивания СLT. Такая замена позволяет представить вычисления модели как большую полносвязную сеть, в которой можно анализировать каждое звено.

Модель замещения образована путём замены нейронов исходной модели на нейроны транскодера
Модель замещения образована путём замены нейронов исходной модели на нейроны транскодера

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

Например, представим, что модель на входе получает такой промпт:

Контекст: The novel 'To Kill a Mockingbird' by Harper Lee, published in 1960, explores themes of racial injustice and moral growth through the eyes of the young protagonist, Scout Finch, in the American South during the 1930s.

Вопрос: Who is the author of the novel 'To Kill a Mockingbird'?

Так будет выглядеть подграф размышлений модели во время генерации ответа:

Визуализация влияния входных токенов на выходные
Визуализация влияния входных токенов на выходные

Исследование галлюцинаций

Для этого исследования определим галлюцинацию — как ситуацию, когда ответ модели опирается не на предоставленный контекст, а на «внутренние знания» модели или модель генерирует непроверяемую информацию. На базе этого утверждения можно сконструировать метрику Groundedness. Основная идея — измерение доли влияния от токенов входа, соответствующих контексту, среди всего влияния от всех активных токенов.

Пусть C = {c1, c2, ..., ck} — множество извлеченных контекстных токенов, Ii — суммарное влияние узла i на логиты, вычисленное через атрибуционный граф, тогда контекстная доля влияния:

где индекс i пробегает по узлам, соответствующим токенам входа. 

Тогда метрика Groundedness имеет следующий вид:

где Gctx — доля влияния контекстных токенов на логиты,

RS — Replacement Score — качество признаков vs ошибок,

CS — Completeness Score — полнота объяснения,

a — вес для балансировки компонентов.

Replacement Score (RS) — доля пути от токенов ко всему выходному влиянию, проходящему через признаки (нейроны), а не через узлы ошибок. 

Для вычисления метрики в фреймворке circuit tracer используется граф вычислений, содержащий узлы для признаков, ошибок, токенов и логитов, а также их связи и веса влияния.

n_logits = len(graph.logit_tokens)
   n_tokens = len(graph.input_tokens)
   n_features = len(graph.selected_features)
   error_start = n_features
   error_end = error_start + n_tokens * graph.cfg.n_layers
   token_end = error_end + n_tokens


   logit_weights = torch.zeros(
       graph.adjacency_matrix.shape[0], device=graph.adjacency_matrix.device
   )
   logit_weights[-n_logits:] = graph.logit_probabilities


   normalized_matrix = normalize_matrix(graph.adjacency_matrix)
   node_influence = compute_influence(normalized_matrix, logit_weights)
   token_influence = node_influence[error_end:token_end].sum()
   error_influence = node_influence[error_start:error_end].sum()


   replacement_score = token_influence / (token_influence + error_influence)

Completeness Score (CS) — доля входящего влияния к каждому узлу, которая не объясняется узлами ошибок.

Расчёт completeness score в фреймворке circuit tracer использует те же объекты: normalized_matrix, node_influence, logit_weights etc.

non_error_fractions = 1 - normalized_matrix[:, error_start:error_end].sum(dim=-1)
output_influence = node_influence + logit_weights
completeness_score = (non_error_fractions * output_influence).sum() / output_influence.sum()

Таким образом, мы получаем скор влияния входного контекста на итоговую генерацию и путем бинаризации результата is_hallucination = [Groundedness < T] можем настраивать порог T для регулирования строгости детекции.

Мы проверили такой подход к детектированию галлюцинаций на сбалансированном тестовом датасете, который содержал поля: контекст, вопрос, правильный ответ. Порог строгости T = 0.4 был определён эмпирически, после измерения бинарного варианта метрики, получили 85% точности определения галлюцинаций.

Технические ограничения

У всего есть плюсы и минусы. За возможность взглянуть вглубь галлюцинаций LLM и построить их детектор на основе атрибуционного графа — придётся заплатить временем и ресурсами на вычисления. Три основные ограничения подхода на текущий момент:

  • высокая вычислительная сложность: полная процедура детекции может быть на порядки медленнее простой генерации текста;

  • зависимость от качества CLT: эффективность детектора критически зависит от качества обученного cross-layer transcoder;

  • ограниченная точность: токен-уровневое сопоставление с контекстом может приводить к ложным срабатываниям.

Конечно, сама по себе метрика не является полноценным инструментом для использования в качестве детектора, но представляет подтверждение гипотезы о том, что можно выявлять паттерны галлюцинирования модели уже во время генерации ответа этой моделью.

Источники

  1. Anthropic (2025). Tracing the thoughts of a large language model. Anthropic Research Blog

  2. Transformer Circuits (2025). Circuit Tracing: Revealing Computational Graphs in Language Models. transformer-circuits.pub

  3. Transformer Circuits (2025). On the Biology of a Large Language Model. transformer-circuits.pub

  4. Cunningham H., Ewart A., Riggs L., Huben R., Sharkey L. (2023). Sparse autoencoders find highly interpretable features in language models. arXiv:2309.08600. arXiv

  5. Dunefsky J., Chlenski P., Nanda N. (2024). Transcoders find interpretable LLM feature circuits. arXiv:2406.11944. arXiv


Над материалом работали:

текст — Ирина Кошкина

редактура — Игорь Решетников

иллюстрации — Петя Галицкий


Это блог red_mad_robot. Мы запускаем цифровые бизнесы и помогаем компаниям внедрять AI. Здесь наша команда разработки на собственных кейсах рассказывает о том, что происходит с AI сегодня, а стратегические аналитики подсказывают, что будет завтра. Мы бы подписались.

Наш Telegram-канал (там всё другое, а ещё есть анонсы мероприятий): t.me/redmadnews

Комментарии (0)