Улучшение производительности поиска влалках RAG-трубопроводов с гибридным поиском

Улучшение производительности поиска валок в RAG-трубопроводах с гибридным подходом

Строка поиска с гибридной возможностью поиска

С недавним интересом к Retrieval-Augmented Generation (RAG) конвейерам разработчики начали обсуждать проблемы создания RAG конвейеров с производственной готовностью. Как и во многих аспектах жизни, принцип Парето также играет роль в RAG конвейерах, где достижение начальных 80% относительно простое, но остальные 20%, необходимые для производственной готовности, вызывают трудности.

Одним из часто повторяющихся тем является улучшение компонента поиска в RAG конвейерах с помощью гибридного поиска.

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

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

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

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

  • Поиск на основе ключевых слов: Его способность точного сопоставления ключевых слов полезна для определенных терминов, таких как названия продуктов или профессиональный жаргон, однако он чувствителен к опечаткам и синонимам, что может привести к упущению важного контекста.
  • Векторный или семантический поиск: Благодаря его семантическим возможностям, он позволяет мультиязычный и мультимодальный поиск на основе семантического значения данных и делает его устойчивым к опечаткам, однако он может упустить важные ключевые слова. Кроме того, он зависит от качества созданных векторных представлений и чувствителен к терминам, не из области задачи.

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

Например, рассмотрим запрос “Как объединить две таблицы Pandas с помощью .concat()?”. Поиск по ключевым словам поможет найти актуальные результаты для метода .concat(). Однако, поскольку слово “объединить” имеет синонимы, такие как “компоновать”, “соединять” и “конкатенировать”, было бы полезно использовать осведомленность о контексте семантического поиска (подробнее см. в Когда следует использовать гибридный поиск).

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

Как работает гибридный поиск?

Гибридный поиск объединяет ключевые слова и векторные техники поиска, объединяя их результаты поиска и переранжировывая их.

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

[0, 0, 0, 0, 0, 1, 0, 0, 0, 24, 3, 0, 0, 0, 0, ...]

Разреженные встроенные выражения могут быть сгенерированы различными алгоритмами. Самым часто используемым алгоритмом для разреженных встроенных выражений является BM25 (Лучшее соответствие 25), который основан на подходе TF-IDF (Term Frequency-Inverse Document Frequency) и уточняет его. Простыми словами, BM25 подчеркивает важность терминов в зависимости от их частоты в документе относительно их частоты во всех документах.

Векторный поиск – это современная техника поиска, возникшая в связи с прогрессом машинного обучения. Современные алгоритмы машинного обучения, такие как Transformers, могут генерировать числовое представление данных в различных модальностях (текст, изображения и т. д.), называемое векторными встраиваниями.

Эти векторные встраивания обычно плотно упакованы информацией и преимущественно состоят из ненулевых значений (плотные векторы), как показано ниже. Вот почему векторный поиск также известен как поиск по плотным векторам.

[0.634, 0.234, 0.867, 0.042, 0.249, 0.093, 0.029, 0.123, 0.234, ...]

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

Слияние результатов поиска по ключевым словам и векторному поиску

Как поиск по ключевым словам, так и векторный поиск возвращают отдельный набор результатов, обычно список результатов поиска, отсортированный по их рассчитанной значимости. Эти отдельные наборы результатов поиска должны быть объединены.

Существует множество различных стратегий для объединения упорядоченных результатов двух списков в одно единственное ранжирование, как указано в статье Бенхэма и Калпеппера [1].

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

Затем рассчитанные оценки взвешиваются с параметром alpha, который определяет вес каждого алгоритма и влияет на переранжировку результатов.

hybrid_score = (1 - alpha) * sparse_score + alpha * dense_score

Обычно значение alpha принимает значение от 0 до 1, где

  • alpha = 1: Чистый векторный поиск
  • alpha = 0: Чистый поиск по ключевым словам

Ниже вы можете увидеть минимальный пример объединения поиска по ключевым словам и векторного поиска с оценкой на основе ранга и alpha = 0.5.

Minimal example of how keyword and vector search results can be fused in hybrid search with scoring based on ranking and an alpha of 0.5 (Image by the author, inspired by Hybrid search explained)

Как гибридный поиск может улучшить производительность вашей RAG-пайплайна?

У RAG-пайплайна есть множество настроек, которые можно изменить для повышения его производительности. Одной из этих настроек является повышение релевантности извлеченного контекста, который затем подается на вход LLM, потому что, если извлеченный контекст не является релевантным для ответа на заданный вопрос, LLM не сможет сгенерировать релевантный ответ.<р>В зависимости от типа контекста и запроса вы должны определить, какая из трех техник поиска наиболее полезна для вашего RAG-приложения. Таким образом, параметр альфа, который контролирует взвешивание между поиском по ключевым словам и семантическим поиском, можно рассматривать как гиперпараметр, который нужно настроить.<р>В обычном RAG-пайплайне, использующем LangChain, вы определите компонент “ретривер” путем установки используемого компонента “vectorstore” в качестве ретривера с помощью метода “.as_retriever()” следующим образом:

# Определяем и заполняем хранилище векторов# Подробности см. здесь https://towardsdatascience.com/retrieval-augmented-generation-rag-from-theory-to-langchain-implementation-4e9bd5f6a4f2vectorstore = ...# Устанавливаем хранилище векторов в качестве ретривераretriever = vectorstore.as_retriever()

Однако этот метод позволяет только семантический поиск. Если вы хотите включить гибридный поиск в LangChain, вам нужно будет определить специфический компонент “ретривер” с возможностью гибридного поиска, такой как “WeaviateHybridSearchRetriever”:

from langchain.retrievers.weaviate_hybrid_search import WeaviateHybridSearchRetrieverretriever = WeaviateHybridSearchRetriever(    alpha = 0.5,               # по умолчанию 0,5, что соответствует равному взвешиванию между поиском по ключевым словам и семантическим поиском    client = client,           # аргументы ключевых слов для передачи клиенту Weaviate    index_name = "LangChain",  # Имя используемого индекса    text_key = "text",         # Имя используемого текстового ключа    attributes = [],           # Атрибуты, возвращаемые в результатах)

Остальная часть стандартного RAG-пайплайна останется неизменной.<р>Это небольшое изменение кода позволяет вам экспериментировать с разными весами между поиском по ключевым словам и векторным поиском. Обратите внимание, что установка alpha = 1 приводит к полностью семантическому поиску, так как это эквивалент определения ретривера из компонента “vectorstore” непосредственно (retriever = vectorstore.as_retriever()).

Когда использовать гибридный поиск (сценарии использования гибридного поиска)

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

Задавайте вопросы, как человек: внедрение семантического поиска в Stack Overflow

stackoverflow.blog<р>

Изначально Stack Overflow использовал TF-IDF для сопоставления ключевых слов с документами [2]. Однако описание проблемы программирования, которую вы пытаетесь решить, может быть сложным. В зависимости от используемых вами слов для описания проблемы (например, объединение двух объектов DataFrame в Pandas может быть выполнено разными методами, такими как объединение, соединение и конкатенация), могут возникать разные результаты. Таким образом, более осознанный в контексте метод поиска, такой как семантический поиск, был бы более полезен в таких случаях.

Однако, с другой стороны, обычным случаем использования Stack Overflow является копирование и вставка сообщений об ошибках. В этом случае предпочтительным методом поиска является точное сопоставление ключевых слов. Кроме того, вам понадобятся возможности точного сопоставления ключевых слов для имен методов и аргументов (например, .read_csv() в Pandas).

Как вы можете догадаться, многие похожие примеры реального использования получат пользу от контекстно-осознанного семантического поиска, но все же будут полагаться на точное сопоставление ключевых слов. Эти примеры использования могут значительно выиграть от внедрения гибридного поискового компонента.

Резюме

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

В гибридном поиске параметр alpha контролирует вес между ключевым и семантическим поиском. Этот параметр alpha можно рассматривать как гиперпараметр для настройки конвейеров RAG для улучшения точности результатов поиска.

Используя статью, посвященную случаю Stack Overflow [2], мы продемонстрировали, как гибридный поиск может быть полезен для случаев использования, где семантический поиск может улучшить опыт поиска. Однако точное сопоставление ключевых слов по-прежнему важно, когда специфические термины являются частыми.

Понравилась эта история?

Подпишитесь бесплатно, чтобы быть уведомленным о публикации новой истории.

Получайте электронное письмо при каждой публикации Леони Монигатти.

Получайте электронное письмо при каждой публикации Леони Монигатти. Подписываясь, вы создаете учетную запись VoAGI, если у вас ее еще нет…

VoAGI.com

Найдите меня в LinkedIn, Twitter и Kaggle!

Отказ от ответственности

Я являюсь представителем разработчика в Weaviate, открытой векторной базе данных, на момент написания этого текста.

Ссылки

Литература

[1] Бэнхэм, Р. и Калпеппер, Дж. С. (2017). Компромисс между риском и наградой в ранжировании с использованием слияния. В: Материалы 22-й Австралийской конференции по компьютерной обработке документов (с. 1–8).

[2] Хейни, Д. и Гибсон, Д. в блоге Stack Overflow. Задавайте вопросы, как человек: внедрение семантического поиска в Stack Overflow (доступно 24 ноября 2023 г.).

Изображения

Если не указано иное, все изображения созданы автором.