Расшифровка галлюцинаций LLM: глубокий анализ ошибок языковых моделей
Введение
По мере того как компании и крупные технологические фирмы создают более качественные продукты с использованием больших языковых моделей (LLMs), важно понимать их ответственность за предоставление надежных решений. Существенная проблема заключается в том, что эти модели иногда выдают уверенную, но неверную информацию, из-за чего пользователи ошибочно считают результат точным. Эта проблема известна как галлюцинация.
Морена, Data Scientist, выступила с содержательной презентацией о галлюцинациях LLM на недавнем Unstructured Data Meetup, организованном Zilliz, подробно объяснив концепцию галлюцинаций, типы галлюцинаций, чем они могут быть вредны, почему они возникают и, самое главное, как мы можем обнаруживать эти галлюцинации.
Посмотрите запись выступления Морены
Что такое галлюцинации?
Галлюцинации — это ложные или противоречащие друг другу результаты, генерируемые любой формой языковой модели. Проще говоря, это контент, который фактически неверен, бессмысленен или не соответствует входному контексту.
Например, зададим Llama3 сложный вопрос: Какое другое название обсуждали сооснователи State Software для JSON?
Ответ Llama3 показан ниже:
Ответ Llama3 на пример вопроса
В то время как фактическое обсуждение несколько отличается:
Ответ на странице Wikipedia о JSON
Llama 3-8B демонстрирует классический пример галлюцинации. Давайте рассмотрим различные типы галлюцинаций, которые может выдавать языковая модель.
Различные типы галлюцинаций
Существует две основные категории галлюцинаций: внутренние галлюцинации и внешние галлюцинации.
Внутренние галлюцинации
Внутренние галлюцинации, как правило, противоречат исходной информации, которая им дана. Представьте, что вы спешите, пытаясь решить вопросы для большого и сложного теста на понимание текста. Вы можете неправильно понять информацию и ответить на некоторые вопросы неверно. Аналогично, LLM часто склонны галлюцинировать, когда данные сильно неструктурированы, например в обширном текстовом корпусе.
Внешние галлюцинации
Внешние галлюцинации возникают, когда LLM генерируют информацию, которую невозможно проверить по предоставленным исходным данным, что часто приводит к вымышленным деталям. Чтобы эффективно управлять внешними галлюцинациями, предложите LLM использовать только предоставленную информацию для выполнения задач. Этот подход особенно полезен в конвейерах Retrieval-Augmented Generation (RAG). Laurie Voss подчеркнул эту практику во время Zilliz Unstructured Data Meetup, отметив ее важность для поддержания точности.
Ниже приведен пример промпта для решения проблемы внешних галлюцинаций.
prompt = f"""Only using the Context Provided to you and not any outside knowledge, Answer the user query.
Context: {Wikipedia_Page_Content}
Query: Summarize me this Page"""
# Rather than just
prompt = f"""Summarize me this Page
{Wikipedia_Page_Content}"""
Пример внутренней и внешней галлюцинации
Проблемы с галлюцинациями LLM
Галлюцинации, которые поначалу могут казаться безобидными или даже забавными, создают значительные проблемы при внедрении LLM в таких отраслях, как право и здравоохранение. В этих секторах точность информации, генерируемой моделями генеративного ИИ, критически важна для обеспечения положительных результатов. Когда эти модели выдают неточные результаты, это может привести к серьезным последствиям, таким как неправильные юридические решения или ухудшение качества ухода за пациентами, потенциально подвергая жизни опасности.
Более того, помимо влияния на конкретные отрасли, галлюцинации, генерируемые LLM, могут иметь далеко идущие социальные последствия. Они подрывают доверие к надежным источникам информации и способствуют широкому распространению путаницы и недоверия среди общественности. Это подрывание доверия может быть особенно разрушительным во время критически важных событий, таких как выборы.
Например, в периоды выборов дезинформация, распространяемая LLM о кандидатах, процедурах голосования или результатах выборов, может существенно влиять на демократические процессы. Ложная информация может вводить избирателей в заблуждение относительно того, где и когда голосовать, потенциально снижая явку избирателей и влияя на результаты выборов. Кроме того, дезинформация может усиливать напряженность, приводя к социальным беспорядкам и даже насилию, как это наблюдалось в ситуациях, когда необоснованные заявления о фальсификациях на выборах вызывали протесты и столкновения.
Почему LLM галлюцинируют?
У LLM отсутствует понятие объективной истины; их выводы определяются сложными математическими операциями, такими как умножение матриц и функции softmax, которые вычисляют вероятности для каждого токена в последовательности на основе предшествующих токенов. Эти вероятности определяют последовательность, генерируемую LLM, но что влияет на эти вероятности?
Вероятности токенов для заданной строки
Противоречивая или ложная информация в обучающих данных
Базовые модели обучаются на огромных объемах неструктурированных данных, включая страницы Wikipedia, subreddits, tweets, ветки Stack Overflow и MathOverflow, репозитории GitHub и многочисленные другие интернет-источники. Это обучение не направлено на то, чтобы модель с самого начала производила осмысленные выводы; вместо этого оно формирует базовые знания, хранящиеся в виде тензоров, и генерирует связные результаты.
Однако не все данные, найденные в интернете, являются точными. Дезинформация и вводящий в заблуждение контент, например из определенных subreddits или tweets, могут влиять на модель во время обучения. Эта проблема может приводить к несогласованности в весах модели и вызывать искаженные распределения вероятностей, в конечном счете становясь причиной галлюцинаций в ее выводах.
Сложность задач
Характер задач также влияет на то, склонна ли LLM генерировать ложные или бессмысленные результаты. Простые задачи, такие как ответы на прямолинейные вопросы, с меньшей вероятностью приводят к галлюцинациям. Однако LLM могут испытывать трудности и выдавать крайне бессмысленные результаты при столкновении с более сложными задачами, такими как суммирование обширных текстовых фрагментов или анализ табличных данных, предоставленных в формате markdown.
Простая и сложная задача
Обнаружение галлюцинаций
Для обнаружения галлюцинаций LLM используется несколько методологий: самооценка, обнаружение на основе эталона, обнаружение на основе неопределенности и обнаружение на основе согласованности. Давайте подробно рассмотрим некоторые из этих методологий.
Методы обнаружения галлюцинаций
Самооценка
Самооценка — это процесс, в котором LLM оценивает свои выходные данные, что на первый взгляд может показаться нелогичным, учитывая, что галлюцинации часто возникают внутри самой модели. Однако этот метод остается ценным, поскольку оценивать качество ответа по своей сути проще, чем генерировать сам ответ. Более простые задачи, такие как оценка ответа, менее склонны к галлюцинациям, чем более сложные задачи, например генерация ответа на сложные запросы. Это связано с тем, что способность LLM оценивать правильность и связность ответа менее сложна, чем ее способность точно генерировать совершенно новую информацию.
Более того, интеграция самооценки с другими методами обнаружения, такими как подходы на основе эталонов или согласованности, повышает способность LLM всесторонне оценивать свои выходные данные. Такой комбинированный подход усиливает способность модели эффективно выявлять и снижать потенциальные галлюцинации, тем самым повышая общую надежность и достоверность сгенерированного контента.
Базовый рабочий процесс для самооценки LLM
Методы на основе эталонов
Методология на основе эталонов оценивает согласованность сгенерированных выходных данных с предоставленными эталонами, что делает ее особенно полезной в производственных средах, использующих Retrieval Augmented Generation (RAG), и в задачах вроде суммаризации.
Предоставление исходных знаний в качестве эталонов позволяет LLM генерировать выходные данные, которые тесно согласуются с заданными эталонами. Рассмотрим задачу суммаризации страницы Wikipedia о Париже. Используя методы на основе эталонов, LLM может генерировать краткие изложения, оцениваемые по исходному содержанию, чтобы обеспечить точность и связность.
Метрики производительности, такие как BERTScore или ROUGEScore, обычно используются для оценки производительности LLM в конкретных задачах. Они предоставляют количественные показатели того, насколько хорошо сгенерированные выходные данные соответствуют эталонам. Кроме того, включение слоев самооценки дополнительно повышает надежность и эффективность методов оценки на основе эталонов.
Систематический рабочий процесс для контекстного поиска
Методы на основе неопределенности
Помните, как ранее мы наблюдали, что LLM уверенно выдают неверные результаты? Что ж, если говорить о галлюцинациях, под поверхностью это не всегда так. Галлюцинации могут возникать из-за неопределенных распределений вероятностей, когда токен ранжируется немного выше, чем «лучший» токен истинной разметки, что приводит к ошибочной генерации выходных данных.
Чтобы анализировать вероятности токенов, вы можете использовать методы классов Hugging Face. Эти методы позволяют изучать вероятности, связанные с генерацией токенов, предоставляя представление о том, как модель принимает решения, и потенциально выявляя случаи возникновения галлюцинаций.
from transformers import GPT2Tokenizer, AutoModelForCausalLM
import numpy as np
tokenizer = GPT2Tokenizer.from_pretrained("gpt2")
model = AutoModelForCausalLM.from_pretrained("gpt2")
tokenizer.pad_token_id = tokenizer.eos_token_id
inputs = tokenizer(["Today is"], return_tensors="pt")
outputs = model.generate(**inputs, max_new_tokens=5, return_dict_in_generate=True, output_scores=True)
transition_scores = model.compute_transition_scores(
outputs.sequences, outputs.scores, normalize_logits=True
)
input_length = inputs.input_ids.shape[1]
generated_tokens = outputs.sequences[:, input_length:]
for tok, score in zip(generated_tokens[0], transition_scores[0]):
# | token | token string | logits | probability
print(f"| {tok:5d} | {tokenizer.decode(tok):8s} | {score.numpy():.4f} | {np.exp(score.numpy()):.2%}")
# Expected output:
#| 262 | the | -1.4136 | 24.33%
#| 1110 | day | -2.6089 | 7.36%
#| 618 | when | -2.0096 | 13.40%
#| 356 | we | -1.8593 | 15.58%
#| 460 | can | -2.5083 | 8.14%
Вы можете попробовать этот метод с моделями с закрытым исходным кодом, такими как gpt-4, через logprobs.
from openai import OpenAI
client = OpenAI()
completion = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "user", "content": "Hello!"}
],
logprobs=True,
top_logprobs=2
)
print(completion.choices[0].logprobs)
Вывод для logprobs выглядит как JSON ниже.
{
"id": "chatcmpl-123",
"object": "chat.completion",
"created": 1702685778,
"model": "gpt-4o",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Hello!"
},
"logprobs": {
"content": [
{
"token": "Hello",
"logprob": -0.31725305,
"bytes": [72, 101, 108, 108, 111],
"top_logprobs": [
{
"token": "Hello",
"logprob": -0.31725305,
"bytes": [72, 101, 108, 108, 111]
},
{
"token": "Hi",
"logprob": -1.3190403,
"bytes": [72, 105]
}
]
},
{
"token": "!",
"logprob": -0.02380986,
"bytes": [
33
],
"top_logprobs": [
{
"token": "!",
"logprob": -0.02380986,
"bytes": [33]
} ]
}, "finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 2,
"completion_tokens": 2,
"total_tokens": 4
},
"system_fingerprint": null
}
Обнаружение на основе согласованности
Обнаружение на основе согласованности — это простой, но эффективный метод выявления галлюцинаций LLM. Этот подход предполагает многократный запрос к LLM с одним и тем же вопросом и сравнение его ответов. Согласованные результаты при повторных запросах указывают на более низкую вероятность галлюцинаций, тогда как несогласованные ответы свидетельствуют о потенциальных проблемах.
Ниже приведен пример, которым Morena поделился во время своего выступления, где он многократно задавал LLM три вопроса.
ronaldo_prompt = "Give me three facts about Cristiano Ronaldo."
toaster_prompt = "Give me an absurd fact about toasters."
seinfeld_prompt = "In what episode of Seinfeld did Kramer buy a giant hat?"
Настройка промптов:
ronaldo_passages = []
for i in range(3):
prompt = ronaldo_prompt
result = chat_gpt_prompt(prompt).choices[0]-message.content
ronaldo passages.append(result)
toaster_passages = []
for i in range(3):
prompt = toaster_prompt
result = chat_gpt_prompt(prompt).choices[0].message.content
toaster_passages.append(result)
seinfeld_passages = []
for i in range(3):
prompt = seinfeld_prompt
result = chat_gpt_prompt(prompt).choices[0].message.content
seinfeld_passages.append(result)
В этом примере запрос о Cristiano Ronaldo, информация о котором закреплена в обучающих данных LLM, как правило, дает согласованные результаты с минимальными рисками галлюцинаций. Эта согласованность демонстрирует надежность модели при генерации точных ответов по хорошо известным темам.
Ответ, сгенерированный LLM о Cristiano Ronaldo
Однако в случае с фрагментами о Seinfeld ситуация отличается, поскольку Kramer никогда не покупал «Giant Hat».
Ответ, сгенерированный LLM о Giant Hat
Заключение
По мере того как всё больше компаний используют большие языковые модели (LLM) в производственных приложениях, крайне важно последовательно решать связанные с ними проблемы. Галлюцинации, если их не контролировать, могут становиться всё более вредоносными. Мы можем минимизировать их последствия, понимая их происхождение, триггеры и стратегии обнаружения.
В этой публикации была рассмотрена концепция галлюцинаций и их потенциальные триггеры. Кроме того, мы представили четыре практических метода обнаружения галлюцинаций: самооценка, методы на основе эталонов, методы на основе неопределённости и обнаружение на основе согласованности. Эти методы подходят для разных сценариев использования и могут комбинироваться для повышения точности обнаружения галлюцинаций.
Сравнение различных методов обнаружения галлюцинаций
Внедрение этих подходов обеспечивает ответственное развёртывание LLM и других технологий генеративного ИИ, максимально увеличивая их положительное влияние на общество.
Читать далее

Why We Built Vector Lakebase: Rethinking Unstructured Data Architecture for AI
Vector Lakebase: a unified, lake-native data foundation for AI workloads — and an answer to what happens after vector databases succeed.

Zilliz Cloud Now Available in AWS Europe (Ireland)
Zilliz Cloud launches in AWS eu-west-1 (Ireland) — bringing low-latency vector search, EU data residency, and full GDPR-ready infrastructure to European AI teams. Now live across 30 regions on five cloud providers.

Why and How to Migrate from Self-Hosted Milvus to Zilliz Cloud
A simple, step-by-step guide to migrating from Milvus to Zilliz Cloud. Learn both endpoint and backup methods for a smooth, scalable vector database migration.


