Включите исполнение JavaScript в браузере, чтобы запустить приложение.
28 окт 2024

Что такое RAG (Retrieval Augmented Generation) простыми словами и основные принципы

Простыми словами объясняем, что такое методы RAG (Retrieval Augmented Generation). Основные принципы RAG-метода: размер и количество чанков, добавление других методов поиска, мультиплицирование запроса. Как оценить качество RAG-метода — читайте на нашем сайте.
  1. Что такое RAG
  2. Примеры метода RAG
  3. Принцип работы RAG
  4. Получение внешних данных
  5. Процесс релевантного поиска
  6. Дополнение данных
  7. Обновление внешних данных
  8. Алгоритм создания RAG
  9. Принципы RAG
  10. Оценка качества RAG-модели
  11. Преимущества RAG
  12. Где применяется RAG

Что такое RAG 

RAG — это аббревиатура от Retrieval Augmented Generation, которая расшифровывается как «генерация с дополненной выборкой». Технология используется при работе с большими языковыми моделями (LLM). Она представляет собой процесс оптимизации выходных данных путем «подмешивания» в них соответствующей контексту запроса дополнительной информации.

Для обучения больших языковых моделей используют огромные объемы данных с миллиардами переменных. Благодаря этому они могут развернуто отвечать на вопросы, выполнять переводы с разных языков, составлять связные тексты. 

Можно сказать, что LLM — это технология, на которой базируется создание ИИ. В том числе — чат-ботов и нейросетей, использующих метод обработки естественного языка (NLP). 

Несмотря на то что LLM обучаются на огромных массивах данных, информация, которая используется для их обучения, статична. А значит, объем знаний, заключенный в больших языковых моделях, все же имеет определенные ограничения. При этом создавая, например, чат-ботов нельзя исключить риск непредсказуемых ответов, так называемых галлюцинаций.

При использовании больших языковых моделей ИИ может:

  • дать ложные сведения, если не знает правильного ответа;
  • сообщить пользователю устаревшую информацию, в то время как от него ждут актуальные данные;
  • неправильно или неточно обработать запрос из-за нарушения терминологии.

Получается, что внедрение чат-бота, способного ошибаться и давать ложную информацию, может серьезно повредить репутации компании.

Перечисленные выше проблемы нашли решение посредством внедрения генерации с дополненной выборкой. RAG подтягивает в контекст запроса дополнительную актуальную информацию из внешних надежных источников. Благодаря этому языковая модель может сформировать грамотный и верный ответ. 

Примеры метода RAG

Предположим, пользователь вводит запрос: «сколько стоят билеты на поезд Москва —Сочи». Без RAG LLM не может дать четкий ответ на этот вопрос, так как модель не знает, на какую дату нужны билеты, в плацкарт или в купе. В результате вместо конкретных цифр программа может выдать пространные рассуждения об изменении цен без какой-либо конкретики. Чтобы избежать этого, ИИ должен понимать, что ему нужно взять информацию на сегодняшнее число с официального сайта РЖД.

Расшифровка аббревиатуры RAG как раз пошагово описывает весь процесс.

Retrieval переводится как поиск. Этот компонент системы отвечает за то, чтобы найти и извлечь конкретную информацию.

Retrieval Augmented — означает «расширенный поиск», который ведется в дополнительной области. Он необходим для нахождения более подробных сведений, релевантных запросу.

Retrieval Augmented Generation — генерация с дополненной выборкой, то есть формирование ответа с учетом всей собранной информации.

Рассмотрим на конкретном примере.

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

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

На первый взгляд все выглядит просто, но на самом деле использование RAG сопряжено с рядом проблем. Они перечислены ниже.

  • Нужно разработать алгоритм поиска, который бы позволил находить именно релевантные запросу документы и текстовые блоки из них. Если поставить программе задачу просто найти точные соответствия в базе данных, это не сработает.
  • Требуется определить объем текстовых блоков, которые RAG будет использовать для компоновки ответа. Если они будут слишком маленькими, результат получится чересчур лаконичным. Большие полотна текста пользователя тоже не порадуют.
  • Требуется научить программу обрабатывать информацию сразу из нескольких источников, комбинировать ее, обрезать, сокращать только до сути.

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

Принцип работы RAG

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

Например, пользователь спрашивает: «Сколько живут белые медведи?». Программа находит в энциклопедии релевантную информацию, а затем формирует запрос к языковой модели. Он будет выглядеть так: 

«Вопрос: Сколько живут белые медведи? Релевантная информация: продолжительность жизни — максимум 25-30 лет, в неволе рекорд долгожительства — 42 года».

После этого выполняется запрос к LLM, которая генерирует ответ: 

«Продолжительность жизни белых медведей — максимум 25-30 лет, в неволе рекорд долгожительства — 42 года»

Разберем процесс работы RAG более подробно.

Получение внешних данных

Внешними данными называют новые сведения, которые отсутствуют в исходной базе знаний, предназначенной для обучения LLM. Они чаще всего собираются сразу из нескольких источников. Например, это могут быть БД, API или репозитории документов. Причем формат представления информации значения не имеет — программа распознает как лонгрид, так и форму записи данных.

Чтобы генеративный ИИ мог использовать полученные сведения, нужно создать дополнительную библиотеку знаний. Для этого применяют метод встраивания языковых моделей. Он предполагает представление данных в числовом формате, а также их хранение в векторной БД.

Процесс релевантного поиска

Чтобы выполнить релевантный поиск, программа должна:

  • преобразовать запрос пользователя в векторы;
  • сопоставить их с векторными БД.

Рассмотрим на конкретном примере. 

В компании есть внутренний чат-бот для ответов на вопросы сотрудников. Служащий вводит запрос: «Сколько дней отпуска у меня в этом году?». 

Чтобы дать верный ответ, языковая модель будет использовать математические векторные расчеты и представления. На их основе она вычислит документы, где прописаны правила предоставления ежегодных отпусков, а также сведения о том, когда конкретный сотрудник отдыхал в последний раз. 

Дополнение данных

Чтобы повысить достоверность результата поиска, модели RAG нужно дополнить запрос пользователя, расширив его. Для этого программа считывает контекст и на его основе строит логическую цепочку рассуждений. Такой подход называют методом подсказки. Используя его, LLM может сгенерировать действительно точный ответ.

Обновление внешних данных

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

Алгоритм создания RAG

Создание RAG ведется по общепринятому алгоритму, который затем корректируется согласно поставленным задачам. Рассмотрим, как это работает.

  1. Для начала работы нужно собрать базу знаний, на которой впоследствии будет базироваться поиск нужной информации.
  1. Выполняется нарезка документов на куски в пределах 100-1000 слов. Количество абзацев при этом может быть любым. На английском языке слово «кусок» пишется как chunk. Поэтому в мире программирования эти маленькие блоки принято называть чанками.
  1. Производится оцифровка чанков, их преобразование в векторное отображение. Именно по ним в дальнейшем будет производиться поиск дополнительной информации.
  1. Векторы собираются в единую БД. Здесь они будут хранить скрытые в них данные до тех пор, пока пользователь не запустит процедуру поиска. Причем программа будет обращаться к чанкам, которые содержат информацию, наиболее релевантную поисковому запросу.
  1. После того как LLM получает запрос пользователя, то с помощью цифрового кода преобразует его в векторное представление. Такие векторы называют эмбеддингами. 
  1. Программа начинает поиск среди эмбеддингов чанков, которые хранятся в отдельной базе данных. При этом вычленяются те векторы, где содержится наиболее релевантная запросу информация. Чаще всего для этого выполняется расчет косинусного сходства между векторами запроса и каждого из чанков. Затем на основе этих расчетов определяется список векторов, содержащих требуемые сведения.
  1. Происходит объединение содержимого найденных чанков с поисковым запросом, введенным пользователем. Формируется текст ответа, контекст которого соответствует заданному вопросу. Затем эта информация поступает на вход LLM. 

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

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

Принципы RAG

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

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

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

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

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

  • Поиск по векторам может оказаться безрезультатным, например, если речь идет об узкой терминологии. Поэтому кроме эмбеддингов используются другие поисковые методы, в том числе TF-IDF, ранжирование с помощью алгоритма ВМ25.
  • Для получения более точных результатов удобно применять метод мультиплицирования. В этом случае программа создает от трех до пяти вариантов исходного запроса, а затем сводит полученную информацию в единый ответ.
  • Чтобы в ответе LLM была представлена только конкретика, процесс сбора информации упрощают посредством суммаризации чанков.
  • Модель необходимо дообучить, показав ей правильный формат взаимодействия. Один из способов решения этой задачи — системный промт, который объяснит LLM правила разделения вопроса и собранной RAG информации.

Оценка качества RAG-модели

Все изменения, которые вы будете вносить в программу, нужно тестировать. Иначе у вас просто не получится оценить качество работы модели после ее оптимизации. Проверку лучше всего проводить на большом количестве комбинаций «вопрос-ответ». Чтобы упростить эту задачу, рекомендуем воспользоваться описанными ниже способами.

  • Составляйте проверочные задания самостоятельно, на основе проведенного анализа запросов пользователей. Например, если вы готовите чат-бота для службы техподдержки, то у вас должна быть наработанная база обращений клиентов. Задачу сбора пула вопросов можно поручить нейросети. Но в этом случае нужно подготовить грамотный промт, а затем провести корректировку полученных результатов.
  • Аналогичным образом напишите по 2-3 варианта ответа для каждого запроса. Вручную эта задача займет очень много времени, ведь у вас будет как минимум несколько десятков вопросов.

Для сбора референсных ответов тоже можно обратиться к нейросетям. Этот способ эффективен, если ИИ обрабатывает документы объемом до 100 страниц. 

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

  • Используйте группу метрик для оценки того, насколько ответы LLM близки к референсным. Для этой задачи подойдут METEOR, BERTScore, ROUGE, BLEURT. 
  • Обязательно создайте эталонную базу данных, куда будут входить вопросы и соответствующие им чанки. Обращайтесь к ней каждый раз после внесения изменений в RAG, чтобы проверить точность релевантного поиска. Если эту проверку не проводить, LLM может начать отвечать неправильно.

Преимущества RAG

  • Генерация с дополненной выборкой повышает точность ответов. Общая модель будет использовать только те данные, что есть в исходной БД, но их может оказаться недостаточно. RAG найдет недостающие кусочки информации и передаст ее LLM.
  • RAG позволяет постепенно пополнять базу знаний актуальными сведениями без необходимости заново обучать модель. А значит, она существенно экономит расходы на дообучение.
  • LLM может дать конкретный, точный ответ с отсылкой к источнику информации.
  • Снижается число галлюцинаций генеративной модели. ИИ формирует текст, не перевирая исходные данные. 

Где применяется RAG

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

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