Существует мнение, что основная проблема больших языковых моделей — в склонности к галлюцинациям. Когда нейросеть генерирует текст с информацией, не связанной с запросом.
Меня зовут Полина, я инженер по разработке ПО искусственного интеллекта в YADRO. Вместе с коллегами я разрабатываю системы на базе генеративных моделей, в том числе вопросно-ответных ассистентов. В рамках одного из проектов мы вместе с экспертом команды Андреем Соколовым задались вопросом: действительно ли проблема галлюцинаций так актуальна для современных предобученных LLM в вопросно-ответном сценарии.
Для этого мы провели эксперимент на собранном нами датасете. Попутно рассказали про модели-трансформеры и дали строгое определение понятию «галлюцинации LLM», которое повлияло на чистоту эксперимента.
Сложно встретить человека, который бы не слышал про большие языковые модели, такие как GPT-4, LLAMA и подобные. В их основе лежат нейросетевые модели, построенные по архитектуре, которая называется трансформер. После открытия она стала невероятно успешной во множестве задач машинного обучения:
обучение представлений (representation learning). Модель BERT, представленная в 2018 году, подняла планку соревнования GLUE (сборник задач на понимание естественного языка) до 80% — прирост составил 8%.
обучение без учителя многозадачных NLP-моделей, способных решать одновременно множество задач по обработке естественного языка. Так, GPT-2, обученная в режиме «без учителя» на множестве общедоступных текстов, продемонстрировала близкие к рекордным результаты в таких задачах, как перевод, суммаризация, ответ на вопрос и других. При этом во время обучения модель не видела ни одного примера из датасетов, соответствующих задачам.
классификация изображений. Модель Vision Transformer (ViT), представленная в 2020 году, достигла качества распознавания на датасетах ImageNet, CIFAR и других, сопоставимого с лучшими на тот момент моделями на базе сверточных нейросетей.
Сейчас трудно найти задачу машинного обучения, для которой в лидерах не было бы трансформерных моделей. Однако у них есть и существенные недостатки. В частности, некоторые из моделей могут галлюцинировать, то есть генерировать информацию, никак не связанную с запросом.
Чтобы понять, как возникают галлюцинации, необходимо немного погрузиться в архитектуру трансформерных моделей.
Ниже на рисунке — общий вид трансформерной модели, которая преобразует текст в текст. Классический пример такой задачи — машинный перевод.
Модель состоит из двух частей: энкодера и декодера. Пример полной трансформерной модели: BART.
Задача энкодера — в том, чтобы для поданного на вход набора токенов (элементарных частей текста) получить набор их контекстно-зависимых представлений, или векторов эмбеддингов, — . При этом количество входных токенов и выходных векторов эмбеддингов совпадают.
Декодер работает по тактам. На очередном k-м такте декодер принимает на вход набор контекстно-зависимых представлений из энкодера, а также последовательность токенов входных символов — . При этом представляет собой последовательность символов, которые были сгенерированы декодером за первые тактов. Далее декодер для каждого возможного токена из словаря вычисляет вероятность его появления на текущем -м такте — . Здесь — общее количество токенов в словаре.
Энкодер и декодер могут использоваться независимо:
Если нет декодера, результатом модели являются векторы контекстно-зависимых представлений. Их можно использовать для поиска информации, понимания языка и других. Примеры encoder-only моделей — BERT, RoBERTa и подобные.
Если нет энкодера, входная информация в модель подается только в виде начальной текстовой затравки (промпта) — последовательности токенов . Исследования показывают, что во многих прикладных задачах decoder-only модели достигают качества, сопоставимого с полными трансформерными моделями, где есть и энкодер, и декодер. Пример decoder-only модели — GPT-2.
Декодер не умеет выбирать очередной выходной символ энкодера. За это отвечает отдельный алгоритм семплирования (или стратегия семплирования), который, вообще говоря, не является частью модели. На практике применяются различные алгоритмы, которые выбирают случайным образом один токен из нескольких наиболее вероятных. Выбранный токен добавляется в конец последовательности выходных символов , и процедура генерации очередного токена повторяется.
Процесс генерации, который называется авторегрессионным, завершается в двух случаях:
на очередном такте будет выбран символ конца предложения (в словаре ему соответствует специальный токен),
или будет достигнуто некоторое максимальное ограничение на длину выходной последовательности.
Одна из проблем авторегрессионных моделей — проблема галлюцинаций: в сгенерированной последовательности появляется информация, которая, как может показаться на первый взгляд, никак не связана с информацией во входной последовательности.
Вот, например, что сгенерировала модель GPT-2 при подаче ей на вход запроса (последовательности входных символов) “Is Earth flat?”:
Вывод GPT-2Is Earth flat? This is a great question. The answer is that it depends on what you mean by "flat" in the first place. If the Earth is flat, then there is no reason why there should be no life on the planet. And if there were life, there would be nothing to be found on it. In other words, if life were to exist on Earth, it would have to have some form of life. But if it does not exist, why would there be life? Because there are no living things on this planet, and even if they were, they would not be able to survive. So what is the answer to this question? Well, that's a good question to ask. It's not a question that you can answer by saying, "I don't know what life is, but I know it's there." You can't answer the question "What is life?" because there's no such thing as life in this world. There is only
Модель пустилась в пространные рассуждения о том, что «если Земля плоская, то нет причин, почему на ней не может быть жизни». Очевидно, ценность такой генерации невелика.
Почему так происходит? Дело в том, что в определенный момент при генерации очередного токена вероятности токенов, не относящихся к входному запросу, были ненулевыми и алгоритм семплирования выбрал какой-то из них. И далее декодер продолжил генерировать наиболее вероятную последовательность токенов. Такое поведение может также говорить о том, что модель не была достаточно хорошо натренирована на подобных входных запросах.
Модель GPT-2, используемая в примере, довольно старая — представлена в 2020 году. Поэтому полученный результат никак не характеризует поведение современных LLM. За прошедшее время их размеры кратно возросли, как и размеры датасетов, на которых выполняется тренировка.
Попробуем разобраться, насколько остро стоит проблема галлюцинаций при использовании современных претренированных LLM.
Мы рассмотрим модель saiga_mistral_7b-GPTQ в конфигурации gptq-4bit-32g-actorder_True
. Она представляет собой широкоизвестную модель mistral_7b, которая дообучена на наборе русскоязычных датасетов, построенных специальным образом.
Авторы указывают, что модель дообучалась ими для ведения диалога с пользователем. Поэтому мы проанализируем ее поведение в близком сценарии. А именно — используем затравки (промпты), сформированные на основе следующего шаблона:
«Ты — полезный помощник, который отвечает на вопросы по представленному документу. Не пытайся придумать ответ, если не знаешь. Просто скажи, что ответа на этот вопрос не было в документе. Отвечай на том же языке, на котором был задан вопрос. Ответ должен быть четким и точным и должен содержать только информацию из предложенного документа. Документ: {тело пассажа}. Вопрос: {тело вопроса}».
Под пассажем понимается текст (документ), на основе которого модель должна дать ответ на вопрос. Для получения полного промпта в шаблон нужно подставить некоторый пассаж и вопрос. При этом в ответе на последний можно опираться только на информацию из пассажа.
На практике подобные шаблоны затравок используются при построении вопросно-ответных систем. Например, на базе архитектуры RAG. В ней пользователь задает вопрос к некоторому документу (опорному пассажу), а языковая модель должна дать на него точный ответ.
Чтобы понять, как часто галлюцинирует выбранная модель в режиме ответов, дадим более строгое определение галлюцинации.
Галлюцинацией мы будем называть отдельное слово, если оно содержит информацию, никак не связанную со словами опорного пассажа. Чтобы определить, является ли заданное слово из сгенерированного ответа галлюцинацией, зададим к нему два вопроса:
Есть ли в опорном пассаже слово с тем же или схожим значением?
Есть ли в пассаже слово, которое семантически связано с рассматриваемым словом? Например, они синонимичны или их можно отнести к некой общей категории (множеству).
Если ответ на оба вопроса отрицательный, будем считать рассматриваемое слово галлюцинацией. При этом вспомогательные слова (предлоги, союзы, вводные слова, слова из вопроса и т.д.) по определению галлюцинациями не являются.
Общую степень галлюцинативности ответа мы будем оценивать следующим образом:
0 — ответ не является галлюцинацией. Не содержит ни одного слова галлюцинации.
1 — ответ является частичной галлюцинацией. Содержит слова-галлюцинации, но их менее половины от общего числа слов в ответе.
2 — ответ является полной галлюцинацией. Большинство слов ответа являются галлюцинациями.
К сожалению, описанное выше определение степени галлюцинативности не является строгим. Классифицировать ответы в соответствии с этим определением автоматически не получится. Тем не менее определение вполне могут использовать люди-разметчики.
Именно так мы и сделали. Собрали заготовку датасета — ruHalAttr — с примерами вида (вопрос, опорный пассаж, ответ генеративной модели) и далее вручную классифицировали их по степени галлюцинативности, опираясь на наше определение.
Мы ищем коллег разных специальностей для работы с ПО искусственного интеллекта. Возможно, вас заинтересуют вакансии:
За основу мы взяли примеры на русском языке из датасета Mr.TyDi. Каждая запись в нем состоит из вопроса, релевантного ему пассажа («позитивный пассаж»), а также нескольких нерелевантных пассажей («негативные пассажи»).
Вот пример вопроса и опорного пассажа из датасета:
Вопрос: В честь кого Юпитер назван Юпитером?
Пассаж: Планета была известна людям с глубокой древности, что нашло своё отражение в мифологии и религиозных верованиях различных культур: месопотамской, вавилонской, греческой и других. Современное название Юпитера происходит от имени древнеримского верховного бога-громовержца.
Мы извлекли из датасета Mr.TyDi пары — «вопрос + релевантный пассаж» — и случайным образом отобрали 300 штук из них. Далее для каждой пары мы сгенерировали ответ модели saiga_mistral_7b-GPTQ.
Для формирования промпта мы использовали шаблон, приведенный выше, в который подставляли вопрос и релевантный ему пассаж. То есть мы просили модель ответить на вопрос, опираясь на информацию из переданного ей пассажа. Использовали следующие довольно типичные значения параметров семплирования: temperature=0.005, top_p=0.95, top_k=40, max_tokens=500
. Так мы сформировали заготовку датасета, состоящую из 300 примеров вида (вопрос, опорный пассаж, ответ генеративной модели).
Дело оставалось за малым: передать заготовку датасета нашей команде разметчиков. Для каждого примера они сформировали два дополнительных поля:
hal_degree — степень галлюцинативности ответа в соответствии с определением выше (по шкале от 0 до 2).
attributable — является ли ответ фактологически верным (0 — неверный, 1 — верный).
При этом ответ считается фактологически верным, если выполняются следующие условия:
ответ содержит информацию, отвечающую на поставленный вопрос,
ответ может быть полностью подтвержден информацией из референсного пассажа.
Требования, что фактологически верный ответ должен быть исчерпывающим (максимально полным), нет.
Получив результаты разметки, мы оценили, как часто встречаются галлюцинации среди подготовленных нами примеров.
Около 94% ответов генеративной модели получили степень галлюцинативности «0», то есть не являлись галлюцинациями. Степень галлюцинативности «1» получили всего 4% ответов, а доля ответов, являющихся полными галлюцинациями (степень галлюцинативности 2), составила лишь 2%. То есть только 6% ответов генеративной модели оказались галлюцинациями в той или иной степени.
При этом доля фактологически неверных ответов значительная — более 30%. Что показывает, что гораздо большая проблема больших языковых моделей именно в фактологических ошибках, которые иногда ложно называются галлюцинациями.
Ниже — один из примеров галлюцинаций модели saiga_mistral_7b-GPTQ.
Вопрос: На каком языке говорили в Империи инков?
Пассаж: При покорении соседних племен инки, с одной стороны, использовали свою сильную и многочисленную армию, а с другой стороны, привлекали к себе элиту покоряемых регионов. Прежде, чем предпринимать военные действия, инки трижды предлагали правителям покоряемого региона добровольно присоединиться к империи. Они заставляли покоренные племена изучать язык кечуа, насаждали свои обычаи и вводили свои законы. Местная знать и жречество покоренных народов сохраняли своё положение, а отправление местных религий не возбранялось при условии обязательного поклонения общеимперскому богу Солнца Инти. Инки уделяли большое значение сохранению местных народных промыслов и костюма, дабы по платью любого жителя Тауантинсуйу было легко определить его происхождение и социальный статус.
Ответ: Информации нет в контексте. Этот контекст был взят из книги «Империя инков» автора Майкла Зиглера.
Видно, что почти все слова из предложения «Этот контекст был взят из книги "Империя инков" автора Майкла Зиглера» не имеют близких слов ни в вопросе, ни в опорном пассаже. Более того, поиск в интернете книги с таким названием и автором также не принес результатов.
Полученный датасет позволяет построить довольно простой алгоритм обнаружения галлюцинаций. Для определения, насколько ответ модели соответствует вопросу и переданному ей пассажу, можно использовать метрику BERTScore.
Метрика была разработана для автоматической оценки качества генерации текста. BERTScore вычисляет сходство предложения-кандидата и эталонного предложения. Оба предложения разбиваются на токены, для которых затем формируются контекстно-зависимые эмбеддинги. BERTScore вычисляет сходство между двумя предложениями как сумму косинусных сходств между эмбеддингами их токенов. При этом для сопоставления токенов кандидата и эталонного предложения используется жадный алгоритм.
BERTScore — это не одна, а сразу три метрики:
BERTScore-Precision. Характеризует степень того, насколько для каждого токена из предложения кандидата есть близкий ему токен из эталонного предложения.
BERTScore-Recall. Характеризует то, насколько для каждого токена из эталона есть семантически близкий ему токен из кандидата
BERTScore-F. Гармоническое среднее первых двух.
Простейший алгоритм детекции галлюцинаций на базе метрики BERTScore выглядит так.
Дано: тройка (вопрос, пассаж, ответ генеративной модели)
Найти: является ли ответ галлюцинацией?
Алгоритм:
Вычислить значение BERTScore-Precision между ответом модели (кандидатом) и конкатенацией «вопрос, пассаж» (играет роль эталона).
Сравнить полученное значение BERTScore-Precision с некоторым порогом. Если значение окажется ниже порога, считать ответ галлюцинацией.
Похожий алгоритм детекции галлюцинаций был описан ранее в докладе коллег из deepset.ai. Они подбирали решающий порог, экспериментируя с англоязычным датасетом AttrEval-GenSearch из статьи Automatic Evaluation of Attribution by Large Language Models. В этом датасете, в отличие от ruHalAttr, авторы выделили три класса ответов:
attributable, если ответ полностью подтверждается опорным пассажем,
extrapolatory, если в опорном пассаже недостаточно информации, чтобы подтвердить ответ,
contradictory, если ответ прямо противоречит своим опорным пассажам.
Для разделения ответов по классам коллеги из deepset.ai подбирали два порога: один для разделения классов contradictory и extrapolatory (trsh_contr_extr
), второй — между extrapolatory и attributable (trsh_extr_attr
).
Мы провели подбор значений trsh_contr_extr
и trsh_extr_attr
на датасете AttrEval-GenSearch и получили результаты, практически совпадающие с результатами deepset.ai.
При таких пороговых значениях все ответы из класса contradictory оказываются выше порога trsh_contr_extr
. Поэтому величина F1 для примеров из этого класса оказывается равной 0, как и у deepset.ai. Иными словами, различить примеры contradictory и extrapolatory при помощи данного алгоритма нельзя.
Для детекции галлюцинаций на датасете ruHalAttr нам достаточно всего одного порога. Чтобы определить его значение, рассмотрим распределение значений BERTScore-Precision (энкодер distilbert-base-multilingual-cased) на примерах из датасета ruHalAttr.
Исходя из этого распределения, мы выбрали в качестве порога значение BERTScore-Precision=0.85. Все, что ниже этого значения, будем считать галлюцинациями. Видно, что это довольно грубая оценка. Но для получения более точной оценки порога необходимо набрать датасет большего размера.
Если дать более строгое определение термину «галлюцинация», наш эксперимент показал, что на большом количестве вопросов вероятность галлюцинаций очень мала — порядка 6%. При этом фактологически неверные ответы составляют чуть больше трети (35%) от общего числа.
А значит, при построении систем на основе генеративных моделей нужно в первую очередь уделять внимание фактологически неверным ответам. И важно не путать их с галлюцинациями. Находить последние можно с помощью простейшего порогового алгоритма — в нашем примере мы построили его на базе метрики BERTScore-Precision.