Дополненная генерация поиска ( RAG ) — это метод, который предоставляет генеративным моделям искусственного интеллекта возможности поиска информации . Он изменяет взаимодействие с большой языковой моделью (LLM) так, что модель отвечает на запросы пользователя со ссылкой на указанный набор документов, используя эту информацию для дополнения информации, полученной из ее собственных обширных статических данных обучения . Это позволяет LLM использовать доменно-специфическую и/или обновленную информацию. [1]
Варианты использования включают предоставление чат-боту доступа к внутренним данным компании или предоставление фактической информации только из авторитетного источника. [2]
Процесс
Процесс RAG состоит из четырех ключевых этапов. Во-первых, все данные должны быть подготовлены и проиндексированы для использования LLM. После этого каждый запрос состоит из фазы поиска, дополнения и генерации. [1]
Индексация
Обычно данные, на которые необходимо ссылаться, преобразуются в LLM- вложения , числовые представления в виде больших векторов. RAG можно использовать для неструктурированных (обычно текстовых), полуструктурированных или структурированных данных (например, графов знаний ). [1] Затем эти вложения сохраняются в векторной базе данных для обеспечения возможности поиска документов .
Извлечение
При наличии запроса пользователя сначала вызывается извлекатель документов для выбора наиболее релевантных документов, которые будут использованы для дополнения запроса. [3] Это сравнение может быть выполнено с использованием различных методов, которые частично зависят от типа используемого индексирования. [1]
Увеличение
Модель передает эту соответствующую извлеченную информацию в LLM посредством оперативного проектирования исходного запроса пользователя. [2] Более новые реализации (по состоянию на 2023 год [обновлять]) также могут включать специальные модули дополнения с такими возможностями, как расширение запросов на несколько доменов и использование памяти и самосовершенствования для обучения на основе предыдущих извлечений. [1]
Поколение
Наконец, LLM может генерировать выходные данные на основе как запроса, так и извлеченных документов. [4] Некоторые модели включают дополнительные шаги для улучшения выходных данных, такие как повторное ранжирование извлеченной информации, выбор контекста и тонкая настройка. [1]
Улучшения
Усовершенствования базового процесса, описанного выше, могут применяться на разных этапах потока RAG.
Кодировщик
Эти методы сосредоточены вокруг кодирования текста как плотных или разреженных векторов. Разреженные векторы, используемые для кодирования идентичности слова, обычно имеют длину словаря и содержат почти все нули. Плотные векторы, используемые для кодирования смысла, намного меньше и содержат гораздо меньше нулей. Несколько улучшений могут быть сделаны в способе вычисления сходств в векторных хранилищах (базах данных).
Производительность можно повысить с помощью более быстрых скалярных произведений, приближенных ближайших соседей или центроидного поиска. [5]
Точность может быть улучшена с помощью поздних взаимодействий. [ необходимо разъяснение ] [6]
Гибридные векторы: плотные векторные представления можно комбинировать с разреженными one-hot векторами, чтобы использовать более быстрые разреженные скалярные произведения, а не более медленные плотные. [7] Другие [ необходимо разъяснение ] методы могут комбинировать разреженные методы (BM25, SPLADE) с плотными, такими как DRAGON.
Методы, ориентированные на ретриверов
Эти методы направлены на улучшение качества результатов поиска в векторной базе данных:
предварительно обучите ретривера, используя обратную задачу «Клоуз». [8]
Прогрессивное увеличение данных. Метод Dragon samples сложных негативов для обучения плотного векторного ретривера. [9]
Под наблюдением обучите ретривер для данного генератора. Получив подсказку и желаемый ответ, извлеките top-k векторы и подайте эти векторы в генератор, чтобы получить оценку запутанности для правильного ответа. Затем минимизируйте KL-расхождение между наблюдаемой вероятностью извлеченных векторов и правдоподобиями LM, чтобы настроить ретривер. [10]
используйте переоценку для обучения ретривера. [11]
Модель языка
Модель языка Retro для RAG. Каждый блок Retro состоит из слоев Attention, Chunked Cross Attention и Feed Forward. Черные буквы обозначают изменяемые данные, а синие буквы обозначают алгоритм, выполняющий изменения.
Перепроектировав языковую модель с учетом ретривера, сеть в 25 раз меньше может получить сопоставимую запутанность, как и ее гораздо более крупные аналоги. [12] Поскольку он обучается с нуля, этот метод (Retro) влечет за собой большие затраты на тренировочные прогоны, которых избегала исходная схема RAG. Гипотеза заключается в том, что, предоставляя знания о предметной области во время обучения, Retro нуждается в меньшем фокусе на предметной области и может направить свои меньшие весовые ресурсы только на языковую семантику. Перепроектированная языковая модель показана здесь.
Сообщалось, что Retro невоспроизводим, поэтому были сделаны модификации, чтобы сделать его таковым. Более воспроизводимая версия называется Retro++ и включает в себя контекстный RAG. [13]
Разделение на части
Разделение на фрагменты подразумевает различные стратегии разбиения данных на векторы, чтобы извлекатель мог найти в них подробную информацию.
Различные стили данных имеют закономерности, которые можно использовать для правильного разделения на фрагменты.
Существует три типа стратегии фрагментации:
Фиксированная длина с перекрытием. Это быстро и просто. Перекрытие последовательных фрагментов помогает поддерживать семантический контекст между фрагментами.
Синтаксические фрагменты могут разбить документ по предложениям. Библиотеки, такие как spaCy или NLTK, также могут помочь.
Разделение на части на основе формата файла. Некоторые типы файлов имеют встроенные естественные части, и лучше всего их уважать. Например, файлы кода лучше всего разбивать на части и векторизовать как целые функции или классы. Файлы HTML должны оставлять нетронутыми элементы <table> или <img> в кодировке base64. Аналогичные соображения следует учитывать для файлов PDF. Такие библиотеки, как Unstructured или Langchain, могут помочь с этим методом.
Вызовы
Если внешний источник данных большой, извлечение может быть медленным. Использование RAG не полностью устраняет общие проблемы, с которыми сталкиваются LLM, включая галлюцинации . [3]
^ ab "Что такое RAG? - Объяснение ИИ дополненной генерации извлечения - AWS". Amazon Web Services, Inc. Получено 16 июля 2024 г.
^ ab "Next-Gen Large Language Models: The Retrieval-Augmented Generation (RAG) Handbook". freeCodeCamp.org . 11 июня 2024 г. . Получено 16 июля 2024 г. .
^ Льюис, Патрик; Перес, Итан; Пиктус, Александра; Петрони, Фабио; Карпухин, Владимир; Гойал, Наман; Кюттлер, Генрих; Льюис, Майк; Йих, Вэнь-тау; Роктешель, Тим; Ридель, Себастьян; Киела, Доуве (2020). «Генерация дополненной последовательности для задач обработки естественного языка с интенсивным использованием знаний». Достижения в области нейронных систем обработки информации . 33. Curran Associates, Inc.: 9459–9474. arXiv : 2005.11401 .
^ Хаттаб, Омар; Захария, Матей (2020). ""ColBERT: Эффективный и действенный поиск отрывков с помощью контекстуализированного позднего взаимодействия через BERT"". doi : 10.1145/3397271.3401075.
^ Формально, Тибо; Лассанс, Карлос; Пивоварски, Бенджамин; Клиншан, Стефан (2021). "«SPLADE v2: Разреженная лексическая и расширяемая модель для поиска информации»". Архив . S2CID 237581550.
^ Ли, Кентон; Чанг, Мин-Вэй; Тутанова, Кристина (2019). ««Латентный поиск для слабо контролируемого ответа на вопросы в открытой области»» (PDF) .
^ Линь, Шэн-Чи; Асаи, Акари (2023). «Как приручить ДРАКОНА: Разнообразное расширение на пути к обобщенному плотному поиску» (PDF) .
^ Ши, Вэйцзя; Мин, Севон (2024). «REPLUG: Модели языка черного ящика с дополнениями для поиска». «REPLUG: Модели языка черного ящика с дополнениями для поиска» . С. 8371–8384. arXiv : 2301.12652 . doi :10.18653/v1/2024.naacl-long.463.
^ Рам, Ори; Левин, Йоав; Далмедигос, Италия; Мюльгай, Дор; Шашуа, Амнон; Лейтон-Браун, Кевин; Шохам, Йоав (2023). «Языковые модели с расширенным поиском в контексте»». Труды Ассоциации компьютерной лингвистики . 11 : 1316–1331. arXiv : 2302.00083 . дои : 10.1162/tacl_a_00605.
^ Боржо, Себастьян; Менш, Артур (2021). «Улучшение языковых моделей путем извлечения из триллионов токенов» (PDF) .
^ Ван, Боксин; Пин, Вэй (2023). ««Должны ли мы предварительно обучать авторегрессионные языковые модели с помощью поиска? Всестороннее исследование»» (PDF) .