Гибридный поиск для RAG: BM25, векторы и практическое применение метода объединения рангов по принципу взаимности.
Гибридный поиск для RAG: почему поиск только с векторами приводит к потере точных идентификаторов, как метод слияния взаимных рангов объединяет BM25 с эмбеддингами и в чём всё ещё остаются недостатки гибридного подхода.
Источники: Hybrid Search in RAG — BM25, Vectors, and Reciprocal Rank Fusion in Practice
Добавление поиска по ключевым словам в систему поиска, основанную исключительно на векторах, — один из самых дешевых способов повышения точности в технологии RAG. Компания Anthropic измерила это на собственных корпусах данных: использование алгоритма BM25 с учетом контекста в сочетании с контекстуальными векторными представлениями сократило количество неверных результатов в топ-20 на 49 процентов без изменений в самой модели векторных представлений.
Рассмотрим причины, лежащие в основе этих цифр. Пользователь вводит идентификатор транспортного средства, например GX-V5-5N. Система, основанная исключительно на векторах, возвращает общие инструкции по регистрации и историю обслуживания, при этом правильный документ отсутствует даже среди первых десяти результатов. Контекстуальные векторные представления идеально улавливают автомобильный контекст, и именно поэтому они игнорируют буквальный вариант ввода. Проблема не в слабых векторных представлениях — это структурный аспект, который влияет на любую систему RAG, построенную исключительно на векторах, что характерно для большинства стандартных учебных материалов.
Ниже: почему сочетание лексического и векторного поиска требует другой математики, чем средневзвешивание оценок, что делает метод Reciprocal Rank Fusion, где гибридный подход перестаёт быть эффективным, и что необходимо измерить перед его применением.
Идея за две минуты
Чистый векторный поиск систематически теряет точные совпадения, такие как коды ошибок, идентификаторы продуктов и собственные имена. Сама технология эмбеддингов не плоха — семантическая близость и буквальное совпадение — это просто разные свойства.
BM25, функция ранжирования на основе лексики, появившаяся в 1990-х годах, компенсирует недостатки векторов. Она практически бесплатно находит редкие, специфические токены, но взамен упускает парафразы и синонимы. Оба метода допускают ошибки в противоположных направлениях, и именно по этой структурной причине их следует сочетать, а не из-за временной инженерной моды.
Проблема в том, что их результаты нельзя сложить. Оценки BM25 не имеют предела и зависят от корпуса данных, тогда как коэффициент косинусного сходства находится в диапазоне от минус одного до одного. Сумма 15,3 и 0,82 не имеет никакого смысла. Поэтому современные движки не объединяют эти оценки. Вместо этого они объединяют позиции в рейтинге с помощью метода Reciprocal Rank Fusion.
Однако гибридный подход не всегда оказывается лучшим. При запросах, основанных на точных идентификаторах, BM25 в одиночку может превзойти весь гибридный подход. Важный вопрос заключается не в том, стоит ли использовать гибридный подход, а в том, какая доля ваших запросов действительно его требует, и это то, что нужно измерять.
Два взаимодополняющих слабых места
Представьте двух младших коллег с противоположными слабостями.
Первый подход максимально буквальный, как у функции Ctrl+F. При запросе на страницу с кодом ошибки ERR_CONNECTION_RESET он находит её мгновенно. Однако при рассмотрении проблем с подключением он игнорирует документ о потере сессии, поскольку ни одно из слов запроса в нём не встречается.
Второй подход позволяет видеть суть сквозь формулировки. Он понимает, что проблемы с подключением и потеря сессии означают одно и то же. Но при запросе на точный код ошибки он предоставляет общую информацию о сбоях сети, так как редкий код ошибки теряется в общем значении всего предложения.
Ни один из подходов сам по себе недостаточен. В этом суть всего аргумента, изложенного в двух абзацах.
Что учитывает BM25
BM25 — это ни волшебство, ни устаревшая технология. Он работает на основе обратного индекса — таблицы, связывающей каждое слово с документами, в которых оно встречается, благодаря чему алгоритм никогда не сканирует всю коллекцию. Ранжирование основано на трёх принципах интуиции:
- Редкие термины имеют больший вес. Идентификатор GX-V5-5N говорит гораздо больше, чем слово «транспортное средство».
- Повторение приводит к насыщению. Десятый раз использование слова приносит гораздо меньше пользы, чем второй раз, поскольку кривая становится плоской после нескольких повторений.
- Длина текста наказуема. Длинные документы не должны выигрывать лишь потому, что в них больше возможностей для случайных совпадений.
Векторная модель работает по другому принципу. Текст преобразуется в список чисел, который кодирует его смысл, а ранжирование определяется степенью близости в этом пространстве, независимо от того, совпадают ли в запросе и документе слова. Одна из систем измеряет покрытие символов, а другая — покрытие смысла.
Ошибка категоризации, которой следует избегать
Хочется рассматривать векторный поиск как улучшенную версию поиска по полному тексту — более современную, умную и естественную альтернативу. Но это ошибка категоризации. Векторы не заменяют лексический поиск; они решают другую проблему и при этом теряют ту способность, которая у лексического поиска была бесплатно.
Если в корпусе содержатся коды, идентификаторы или собственные имена, одних лишь эмбеддингов будет недостаточно для их обнаружения, каким бы хорошим ни был модель. Ограничения связаны с тем, что представляют собой векторы. Правильный подход заключается в определении того, какие запросы требуют определенной степени веса, что оставляет проблему объединения двух списков результатов, измеряемых в несопоставимых единицах.
Почему нельзя просто сложить оценки
Естественным инженерным импульсом является нормализация, присвоение весов и их сложение. Однако это сталкивается с фактом, который невозможно устранить путем настройки.
У BM25 нет теоретического предела. Его показатель растет с увеличением количества совпадающих терминов запроса, их редкости в корпусе и длины документа, поэтому один и тот же документ получает разные значения после появления десяти тысяч новых файлов. Косинусное сходство, которое сравнивает угол между двумя векторами, остается в диапазоне от минус одного до одного.
Суммирование 15,3 и 0,82 подобно сложению килограммов и фунтов без преобразования: арифметически возможно, но информационно бессмысленно. Можно использовать нормализацию минимум-максимум или z-счёт, но тогда оба системы оценки требуют перекалибровки каждый раз, когда меняется корпус, модель эмбеддингов или состав запросов. Калибровка, которую приходится повторять после каждой переиндексации, представляет собой отложенный долг.
Голосование за позицию
Метод слияния взаимных рангов избегает этой проблемы путем игнорирования оценок. Он учитывает только ранг, который каждый поисковик присвоил документу. Формула проста: слиянная оценка документа — это сумма для каждого поисковика из значения один деленное на (k плюс его ранг в списке данного поисковика). Документ, отсутствующий в списке, не вносит никакого вклада.
Следовательно, документ, занимающий одно из трех первых мест в обоих списках, превосходит документ, который на первом месте в одном списке, но отсутствует в другом. Метод RRF поощряет согласованность в порядке, а не абсолютную точность, причем позиция в ранге — это единица, которую каждый инструмент ранжирования формирует одинаковым образом.
Этот метод был предложен Кормаком, Кларком и Бюттчером на конференции SIGIR 2009, задолго до появления технологии RAG. Их логика заключается в том, что высокие ранги должны иметь наибольший вес, низкие ранги не должны полностью исчезать, а константа k снижает влияние любой отдельной нестандартной системы.
Примечание, возникающее во время обзоров дизайна: стандартное значение k равное 60 было установлено в ходе одного пилотного теста и не корректировалось в последующих проверках. Сами авторы назвали это бездумным выбором. При k=60 первая позиция даёт оценку примерно на 1,6 процента выше, чем у второй позиции, в то время как шестидесятая позиция получает примерно половину оценки первой.
На практике k подобен регулятору громкости, а не рычагу. Более важным является количество кандидатов, вносимых каждым элементом. Если векторная часть предоставляет пятьдесят кандидатов, документ на позиции пятьдесят один вносит ровно ноль вклада.
Как гибридный метод стал стандартом
Наиболее точные данные получены в ходе экспериментов Anthropic по контекстуальному поиску 2024 года на собственных наборах данных, в которых отслеживалась частота отсутствия правильного фрагмента в топ-20 результатов. Само по себе использование контекстуальных эмбеддингов сократило количество таких случаев на 35 процентов. Добавление контекстуального алгоритма BM25 привело к снижению на 49 процентов, что означает, что лексический подход внес значительный вклад в достигнутый результат.
Следует избегать неправильного толкования: в том же отчете указано снижение на 67 процентов при добавлении этапа переранжирования, однако переранжирование — это отдельный этап, использующий другой класс моделей. Фьюжн и переранжирование не являются синонимами, и их смешивание на одном слайде — распространенная ошибка в презентациях.
Сходство решений различных поставщиков говорит о большем, чем любой отдельный тест-кейс. Elasticsearch, OpenSearch, Weaviate, Qdrant и Azure AI Search все встроенно поддерживают технологию RRF. Гибридный поиск перешел из категории продвинутых опций в статус стандартного настроения.
Стоимость второго индекса
За это приходится платить, и эти затраты следует учесть до принятия решения, а не после первого инцидента:
- дополнительное пространство на диске, объем которого зависит от конфигурации,
- несколько дополнительных миллисекунд на этап слияния данных,
- и, что самое важное, еще один элемент, который может потерять синхронизацию. Если документ удаляется из векторного индекса, но остается в лексическом, он продолжает появляться снова и снова, как призрак.
Команды, уже использующие Postgres, часто могут воспользоваться лексическим подходом, объединив pgvector с встроенным поиском полнотекстовых данных, полностью в рамках SQL и без необходимости в новой инфраструктуре. Если существующая система RAG использует только векторные индексы, более важным вопросом становится то, почему в ней отсутствует алгоритм BM25 — это вопрос технического долга, а не отсутствия инноваций.
Где гибридные решения терпят неудачу
Единое мнение поставщиков может создать впечатление, что гибридные решения всегда превосходят остальные. Однако прямые тесты показывают более сложную картину, и неоднозначные результаты появляются при анализе показателей по типам запросов вместо их среднего значения.
В сравнении Azure AI Search от Microsoft за 2023 год гибридные методы поиска в суммарном итоге превзошли методы, основанные исключительно на векторах. Однако при рассмотрении по категориям ситуация выглядит менее однозначно: для запросов, основанных исключительно на ключевых словах, один лексический движок может давать более высокие оценки, чем совмещенный результат. Среднее значение скрывает те особенности, которые становятся видны при анализе каждого сегмента отдельно.
Второй движок не всегда улучшает качество
Там, где лексический движок дает правильный результат, второй фактор может его ослабить. Предположим, что алгоритм BM25 ставит правильный документ на первое место, а векторный алгоритм — на десятое. При совмещении этих методов его место опускается ниже документа, занявшего третье место по обоим критериям. Согласованность результатов важнее точности, что и предусмотрено конструкцией, но это имеет свои недостатки для некоторых типов запросов.
Важна также качественность второй части процесса поиска. Тесты первоначального извлечения информации из научного корпуса показали, что гибридный подход, основанный на слабой модели вкладки, оказывается ниже по результатам, чем метод BM25 в одиночку, тогда как аналогичная конфигурация с более мощной моделью значительно превосходит его. Фьюжн не создаёт ничего нового; он лишь смешивает существующие данные, при этом шум получает такой же вес, как и сигнал.
Это не противоречит первоначальной мысли. Качество вкладки определяет, насколько векторная часть улучшает результаты, но даже лучшая вкладка не может восстановить точный идентификатор, которого она не представляет. Это две разные составляющие.
Ни один из результатов не опровергает гибридный поиск. Оба указывают на необходимость измерения собственного распределения запросов перед его использованием. Многие команды выбирают гибридный подход в качестве стандартного решения, совсем не учитывая это распределение.
Этот метод измерения дешев. Разделите журналы запросов на те, у которых есть точный идентификатор, и на те, что носят исключительно концептуальный характер, затем рассчитайте показатель для каждой группы отдельно. Это займет часы, а не мгновение, в то время как единое агрегированное число скрывает ухудшение качества, которое позже приведет к проблемам в производственной среде.
Проблема консенсуса
У метода объединения рейтингов есть более тонкая недостаток, который проявляется тогда, когда алгоритмы сходятся во мнениях, а не когда они расходятся.
Возьмем поиск в технической документации с запросом о настройке OAuth с помощью переменных окружения. Метод векторного поиска возвращает общее руководство по безопасности: оно актуально по сути, но не содержит информации о специфике OAuth. Метод BM25 возвращает точный результат, связанный с OAuth, но он относится к записи из трехлетнего чанглога. Ни один из вариантов не является лучшим ответом, и при объединении рейтингов все равно в первую очередь попадает более слабый вариант.
Это прямой результат способа работы RRF. Устаревший челлендж-лог был оценен обеими системами на средний уровень, поэтому сумма их взаимных оценок превысила оценку новой страницы, которую понравилась лишь одна система. Две умеренные оценки перевесили одну уверенную и точную.
Фильтрация перед слиянием
Исправление касается этапа, предшествующего математическим вычислениям. В большинстве случаев строгие фильтры метаданных, такие как свежесть, права доступа и статус документа, должны применяться до слияния, а не после. Система слияния не должна рассматривать кандидатов, которым никогда не разрешалось участвовать. Некоторые производственные системы применяют фильтрацию после слияния и получают хорошие результаты, поэтому это архитектурное решение, которое следует протестировать на собственном наборе данных, а не универсальное правило.
Здесь порядок имеет решающее значение. Фильтрация после слияния удаляет устаревшую страницу из результата, однако свежая страница, которая уже потеряла голоса и попала в диапазон исключения, остается в списке. Фильтрация до слияния изменяет список кандидатов, по которым голосуют оба механизма с самого начала.
На практике необходимо одновременно применять три фильтра на входе в оба этапа обработки: разрешения пользователя, статус документа и окно свежести, соответствующее домену. Оба этапа должны применять точно одинаковые фильтры. В противном случае один из них заполняет свой список кандидатов документами, которые другой никогда не видел, и слияние превращает эту асимметрию в преимущество в ранжировании.
Ещё один плюс в пользу языков с высокой морфологической сложностью. Интенсивные изменения формы слов мешают совпадению лексем. Без качественной лемматизации алгоритм BM25 теряет значительную часть своей эффективности, поскольку разные формы одного слова, такие как польские umowy и umowie или немецкие Vertrags и Verträgen, выглядят как совершенно разные токены. Это редкий случай, когда векторный подход спасает лексический, а не наоборот.
Таким образом, гибридные методы устраняют одну группу ошибок, но создают новую, и ничто в стеке механизмов поиска нельзя считать надёжным без дополнительной проверки.
Что можно извлечь из этого
Снижение количества неудачных поисков на 49 процентов произошло не благодаря более крупной модели или большему объёму памяти GPU. Оно стало возможным благодаря пониманию того, что одна текстовая представление не может соответствовать двум совершенно разным типам запросов.
- BM25 и векторные методы действуют в противоположных направлениях, и именно это является структурной причиной их объединения.
- RRF объединяет позиции в рейтинге, а не сами оценки, поскольку масштабирование BM25 и косинуса несовместимо, и нормализация никогда не устраняет полностью проблему калибровки.
- Гибридный поиск является стандартом среди поставщиков инфраструктуры, поэтому игнорирование второго этапа представляет собой технический долг, а не проявление консерватизма.
- Стандартный вариант не означает автоматически лучшего результата. При запросах с точными идентификаторами BM25 в одиночку может превзойти методы объединения, а средневзвешенная метрика скроет этот факт.
- Применяйте фильтры метаданных до объединения, иначе согласованность работы поисковых движков приведет к тому, что устаревший документ окажется выше в рейтинге, чем новый.
Для следующей недели возьмите последние тысячу реальных запросов, отметьте каждый как содержащий точный идентификатор или как чисто концептуальный, и рассчитайте соотношение. Затем оцените точность отдельно для обеих групп и сохраните две строки с результатами, а не смешанное среднее. Эта таблица, гораздо лучше любых стандартов поставщиков, покажет, улучшит ли гибридная система вашу работу или просто добавит ещё один индекс, за которым нужно ухаживать. Результат также покажет, насколько большая часть вашего трафика зависит от точных строк, что редко кто-либо учитывает.
Связанные материалы
- Практические заметки: Ограничения векторного поиска в RAG — косинусное сходство и связанные аспекты — Подробное руководство по Практическим заметкам: Ограничения векторного поиска в RAG — косинусное сходство и связанные аспекты, включающее шаблоны контрактов, проверок и готового кода для команд, внедряющих эту архитектуру.
- Apache Doris 4.1: Векторный поиск, хранение в формате JSON, OLAP и Lakehouse — Обзор нововведений Apache Doris 4.1: векторные индексы типа IVF, функция поиска BM25, документы в формате JSON объемом до 100 МБ, технология Segment V3, кэши запросов, возможность записи в формат Iceberg, операторы MERGE INTO и TIMESTAMPTZ.