Что значит «языковая модель галлюцинирует»? Как сделать её ответы более точными и фактологически верными? Умеет ли нейросеть гуглить? Может ли нейросеть выдумывать несуществующие факты? Отвечаем в нашем материале о RAG (Retrieval Augmented Generation) — методе, позволяющем «подключать» языковые модели к внешним источникам информации.
Retrieval Augmented Generation (RAG) — это технология, сочетающая в себе поиск релевантной информации в существующих хранилищах данных и генерацию текста с помощью языковых моделей, для создания более точных и информативных ответов.
Современные языковые модели вроде ChatGPT способны отвечать на самые разные вопросы — начиная от фактов об императорских пингвинах и заканчивая рассуждениями о смысле жизни. Однако зачастую они генерируют фактологически неверную информацию. То есть, проще говоря, фантазируют. Например, если попросить языковую модель рассказать о несуществующем произведении известного писателя, то с большой вероятностью нейросеть выдумает его описание вместо того, чтобы сказать, что такого произведения не существует.
Пример галлюцинации ChatGPT
Подобное поведение языковых моделей называют галлюцинациями. Галлюцинации — одна из ключевых проблем, мешающих использованию языковых моделей для решения реальных задач. Например, в качестве справочника или аналога поисковых систем.
Исследователи пока работают над полным устранением этого недостатка. Но уже сейчас можно снизить вероятность ложного ответа. Для этого существует множество различных техник, и одна из них — RAG (retrieval-augmented generation, генерация, дополненная релевантной для пользователя информацией).
Перед тем, как перейти к описанию техники RAG, нужно вспомнить, как обычно языковая модель генерирует ответ. Рассмотрим обычную генерацию, при которой модель получает от пользователя только сам вопрос.
Языковая модель принимает на вход текст запроса от пользователя и слово за словом генерирует его вероятное продолжение. Информацию о том, какое слово будет наиболее вероятным в качестве продолжения, она «выучивает» в процессе обучения. Иными словами, языковая модель хранит в себе только ту информацию, на которой её обучали. Именно поэтому, например, ChatGPT может отвечать только про события, случившиеся до определённой даты. Подробнее об устройстве языковых моделей можно прочитать в нашем материале.
Но что, если кроме самого вопроса подать на вход информацию, которая потенциально могла бы помочь модели ответить правильно?
Например, помимо вопроса о среднем росте императорского пингвина, дать модели справку об императорских пингвинах из энциклопедии? Вероятность, что модель даст правильный ответ, будет выше, поскольку релевантная справка из энциклопедии уже содержит в себе ответ на вопрос — модели нужно будет только его извлечь.
Средний рост императорского пингвина — 120 см. Фото: Flickr
Техника RAG основана как раз на этой идее: модели на вход кроме вопроса пользователя нужно подать информацию, которая будет потенциально полезна для ответа.
Таким образом, RAG — это генерация, расширенная поиском. Но помимо поиска в RAG есть и две другие составляющие: данные, среди которых производится поиск, и сам процесс генерации. Разберём каждую компоненту отдельно.
В качестве данных может выступать любое хранилище информации, по которому можно производить поиск. Например, база данных службы поддержки с парами вопрос-ответ, документация компании, база с текстами из энциклопедии, база с персональными данными пользователя (сведения из телефонной книги, календаря и т. д.) и даже поисковые системы вроде Google.
Под поиском подразумевается процесс нахождения полезной информации, исходя из запроса пользователя. Поиск может производиться разными способами.
Например, его можно производить на уровне совпадения слов. В таком случае наиболее релевантными будут данные, которые содержат в себе самое большое количество слов из вопроса пользователя.
Поиск может быть устроен сложнее. Вопрос пользователя и данные в базе могут быть представлены эмбеддингами — наборами чисел, которые отражают семантику (смысловое значение) данных. Чем у двух текстов наборы чисел более похожи, тем эти тексты семантически более близки, и наоборот.
Компьютер способен эффективно сравнивать наборы чисел. Поэтому, храня таким образом данные, можно реализовать поиск: нужно просто сравнить эмбеддинг запроса с эмбеддингами всех текстов в базе. А затем выбрать те из них, чьи эмбеддинги наиболее близки к эмбеддингам запроса. Похожая идея представления текстовых данных лежит в Word2Vec, однако там наборами чисел представляются не тексты, а слова.
Последний этап — генерация ответа на вопрос с использованием найденной информации. Генерация производится с помощью языковой модели и специальных шаблонов, по которым с использованием найденного конструируется итоговый запрос, который будет подан на вход модели.
Например шаблон для ответов на фактологические вопросы выглядит так:
«Пользователь задал вопрос: {вопрос}. Вот релевантная информация, найденная в справочнике: {найденная информация}. Ответь на вопрос пользователя, основываясь только на данной выше информации. Если данная информация не содержит ответ на вопрос пользователя, то ответь, что ты не знаешь».
Требование к языковой модели сообщить, что она не знает, если собранная информация не содержит ответ на вопрос, необходимо, чтобы уменьшить галлюцинации. Если явно не прописать это требование в запросе модели, то она будет склонна к выдумыванию ответов.
Благодаря исключению выдуманных ответов, RAG можно использовать для помощи операторам службы поддержки. В этом случае для заданного пользователем вопроса в базе уже существующих вопросов-ответов производится поиск, например, трёх самых похожих вопросов. А затем результат добавляется в вопрос для языковой модели по следующему шаблону:
«Пользователь задал вопрос: {вопрос}. Вот список похожих вопросов с ответами на них:
Ответь на вопрос пользователя, основываясь только на ответах на похожие вопросы, которые перечислены выше. Если данная информация не содержит ответ на вопрос пользователя, то ответь, что ты не знаешь».
Содержимое шаблона зависит и от решаемой задачи, и от модели и подбирается специалистами вручную.
Теперь, когда мы разобрали все компоненты, разберём работу RAG на конкретном примере с императорским пингвином.
Иллюстрация работы RAG
Пользователь задаёт вопрос: «Какой средний рост императорского пингвина?»
Первый шаг — поиск релевантной информации в базе с текстами энциклопедии. Вопрос пользователя подаётся на вход системе поиска по базе, и она выдаёт релевантную информацию.
Допустим, что в базе нашлась справка об этом виде пингвинов со следующим содержанием:
«Императорский пингвин — самый крупный и тяжёлый из современных видов семейства пингвиновых. Его средний рост составляет около 120 см, а вес колеблется между 22 и 45 кг».
Второй шаг — формирование запроса для языковой модели по определённому шаблону (мы их уже разбирали в разделе про компоненты).
В шаблон вставляется вопрос пользователя и найденная на первом шаге информация:
«Пользователь задал вопрос: Каков средний рост императорского пингвина?
Вот релевантная информация, найденная в справочнике: Императорский пингвин — самый крупный и тяжёлый из современных видов семейства пингвиновых. Его средний рост составляет около 120 см, а вес колеблется между 22 и 45 кг.
Ответь на вопрос пользователя, основываясь только на данной выше информации. Если данная информация не содержит ответ на вопрос пользователя, то ответь, что ты не знаешь».
Третий шаг — генерация финального ответа.
Языковая модель извлекает нужную информацию из запроса, сформированного на предыдущем шаге, и генерирует финальный ответ:
«Средний рост императорского пингвина составляет 120 см».
RAG требует аккуратной настройки каждой компоненты:
Также стоит учитывать, что длина текста, которую можно подать на вход языковой модели, ограничена, поэтому нужно подавать либо самую релевантную информацию, либо сжимать её специальными методами.
RAG используется для решения задач, в которых поиск ответов на вопросы пользователя нужно провести во внешних источниках информации. Например, связанных с фактами, документами, работой службы поддержки.
Также RAG используют для создания более продвинутых поисковых систем. В традиционных поисковых системах пользователь в ответ на запрос получает выдачу релевантных сайтов, на которых может оказаться ответ.
Используя RAG и поисковую выдачу, можно ускорить процесс поиска ответа: вместе с запросом пользователя подать языковой модели содержимое нескольких релевантных сайтов, из которых она и сгенерирует ответ.
Пример работы RAG в поисковой системе Perplexity.ai: система нашла несколько релевантных сайтов (они отображены в секции Sources), взяла из них информацию и подала её и исходный вопрос в языковую модель, которая сгенерировала финальный ответ (в секции Answer)
Также RAG часто используют для генерации выжимок и отчётов: например, исследователь может подать на вход модели несколько научных статей по интересующей его теме и попросить сгенерировать выжимку со ссылками на данные статьи.
Компания Google представила много новых ИИ-продуктов, а модель GPT опровергла известную математическую гипотезу Пала Эрдёша — рассказываем, что произошло в мире ИИ за последнее время
Facebook* и Instagram* будут сканировать фото и видео, чтобы находить детей, которые скрыли свой возраст
Можно ли заниматься NLP, если при словах «производная» и «матрица» хочется закрыть ноутбук? Да — если изучать математику не абстрактно, а через реальные задачи. Объясняем, какие разделы действительно нужны джуну,…