Генерация, дополненная поиском
Генерация, дополненная поиском (англ. Retrieval Augmented Generation, обычно сокращённо RAG) — это технология, позволяющая большим языковым моделям (БЯМ, англ. Large Language Model, LLM) извлекать и использовать новую информацию[1]. При использовании RAG языковые модели не отвечают на запросы пользователей, пока не обратятся к определённому набору документов. Эти документы дополняют информацию, полученную на этапе предварительного обучения БЯМ[2], и позволяют использовать доменно-специфическую или актуальную информацию, отсутствующую в наборе обучающих данных[2].[3] Это, например, помогает чат-ботам на базе БЯМ работать с внутренними данными организаций или формировать ответы на основании авторитетных источников.
RAG усиливает БЯМ, интегрируя механизм поиска информации перед генерацией ответа[4]. В отличие от традиционных моделей, полагающихся на статичный обучающий корпус, RAG извлекает релевантный текст из баз данных, пользовательских файлов и веб-источников[1]. Журнал Ars Technica отмечает: «RAG — это способ повысить точность больших языковых моделей, по сути, комбинируя работу БЯМ с веб-поиском или иным процессом обращения к документам, чтобы БЯМ придерживались фактических данных»[5]. Такой подход помогает снижать галлюцинации искусственного интеллекта[4][6], из-за которых чат-боты могут описывать несуществующие политики или советовать вымышленные судебные кейсы.
RAG также уменьшает необходимость в повторном обучении моделей на новых данных, снижая вычислительные и финансовые издержки[1]. Помимо этого, технология позволяет БЯМ включать ссылки на источники в свои ответы, что обеспечивает верифицируемость и прозрачность: пользователи могут убедиться в корректности и релевантности контента, сверив его с исходными документами.
Впервые термин RAG был введён в научной публикации 2020 года[4], подготовленной компанией Meta[7].[3]
Индексирование
Обычно данные, к которым предполагается обращаться, преобразуются в эмбеддинги БЯМ — числовые представления в многомерном векторном пространстве. RAG совместим с неструктурированными (текст), полуструктурированными и структурированными (например, граф знания) данными[8]. Эмбеддинги сохраняются в векторной базе данных для последующего документного поиска[9].
Поиск
На пользовательский запрос сначала отвечает поисковик документов, выбирающий наиболее релевантные материалы для расширения запроса[2].[4] Сравнение осуществляется разными методами, исходя из типа индексирования[1]
Аугментация
Найденная актуальная информация внедряется в БЯМ с помощью prompt engineering — переформулирования исходного пользовательского запроса. В современных реализациях (с 2023 года) возможна автоматическая экспансия запроса на разные домены, обучение на прошлых поисковых сессиях и запоминание.
Генерация
Наконец, БЯМ генерирует результат, исходя как из пользовательского запроса, так и найденных документов.[2][10]. В ряде моделей возможны дополнительные этапы: повторная классификация документов, выбор релевантного контекста, тонкая настройка (fine-tuning) и др.
Совершенствования
Базовый процесс RAG совершенствуется на разных этапах.
Кодирование
Оптимизация процесса кодирования текста в плотные либо разрежённые векторы повышает эффективность поиска[11].
- Повышение качества — за счёт оптимизации расчёта схожести: скалярные произведения улучшают скоринг, а поиск ближайших соседей (ANN) ускоряет обращение к базе[12].
- Точность повышается при поддержке поздних интеракций: сравнение слов осуществляется после поиска для уточнения релевантности[13].
- Гибридные подходы комбинируют плотные векторы с разрежёнными (one-hot), используя вычислительную эффективность разрежённых операций[11].
- Отдельные техники фокусируются на уточнении отбора документов, комбинируя, например, разрежённые представления (SPLADE) с расширением запроса для лучшей релевантности[14].
Методы, ориентированные на поисковик (retriever)
Эти методы фокусируются на усилении качества поиска документов в векторных базах:
- Предобучение поисковика методом Inverse Cloze Task (ICT) — предсказание пропущенного текста[15].
- Прогрессивное увеличение обучающей выборки (метод DRAGON) — трудные «отрицательные» примеры для генерализации dense search[16].
- Супервизированная оптимизация поисковика — минимизация дивергенции Кульбака—Лейблера между выборкой поисковика и вероятностями генератора[17].
- Методы переупорядочивания позволяют уточнять сортировку выданных документов, повышая общую точность системы[18].
Языковая модель
Перепроектирование языковой модели с учётом поисковика позволяет гораздо меньшей (по размеру) сети достигать сопоставимой перплексии по сравнению с более крупными аналогами[19]. Такой подход (модель Retro) требует затрат на обучение с нуля, которых избегал классический RAG; идея состоит в заложении доменной экспертизы на этапе тренировки, чтобы эффективно распределять ресурсы модели. На иллюстрации показана архитектура модели.
Оригинальная Retro трудновоспроизводима, для этого были введены упрощённые модификации (Retro++), поддерживающие контекстуальный RAG[20].
Фрагментация
Фрагментация — разбиение данных на сегменты/векторы для эффективной работы поисковика[9].
Выделяют три основных подхода:
- Фиксированная длина c перекрытием — быстро и просто; помогает удерживать семантический контекст.
- Фрагментация по синтаксическим границам (например, по предложениям; поддерживается инструментами spaCy, NLTK).
- Разделение по формату — например, код лучше разбивать по функциям/классам, HTML — сохранять таблицы/картинки, PDF — учитывать внутренние блоки. Библиотеки Unstructured и Langchain автоматизируют этот подход.
Графы знаний
Вместо документов для векторизации и поиска возможно использовать графы знаний. Контент (тексты, книги и др.) преобразуется в граф с помощью модели, затем подграфы векторизуются, заносятся в базу и используются как источник сведений, аналогично стандартному RAG. Графовая структура упрощает поиск релевантных связей для генерации ответа, и иногда такой подход называется GraphRAG[21].
Гибридный поиск
Векторы могут не всегда захватить ключевые сведения, поэтому поддерживается параллельный текстовый поиск: текстовые результаты добавляются к найденным векторами сегментам, и совокупный массив «скармливается» модели для генерации ответа.
Оценка и бенчмарки
Системы RAG оцениваются по метрикам качества поиска и точности генеративного вывода. Наиболее востребованные наборы: BEIR для разных задач извлечения фактов, Natural Questions и Google QA для оценки качества открытых вопросов.
Проблемы
RAG не полностью решает проблему галлюцинаций БЯМ. По мнению Ars Technica, «это не универсальное решение: БЯМ всё ещё могут выдавать галлюцинации, даже используя исходный материал»[5].
Хотя RAG и увеличивает точность генерации, он не избавляет от повторного обучения. Также БЯМ слабо распознают ситуации, когда знаний недостаточно для корректного ответа: модели могут выдавать догадки вместо признания своей неуверенности[1]. RAG-системы способны «доставать» корректные, но вводящие в заблуждение источники, что приводит к смысловым ошибкам. Возможна компиляция противоречивых данных из разных источников, из-за чего формируются ответы с устаревшими и актуальными деталями одновременно. Как указывает MIT Technology Review, причина — в неверной трактовке системой полученных данных[2].