← Resources
By Sora Kashiwagi
— Senior Engineer, Vector Search
·
· TUTORIAL
Гибридный поиск: объединение BM25 и векторного поиска для RAG
Поиск по ключевым словам (BM25) и векторный поиск дают сбои противоположным образом — именно поэтому продакшен-RAG их комбинирует. В этом руководстве объясняются оба метода, как слияние (RRF) объединяет их результаты, где применяется реранкинг и когда гибридный поиск ощутимо превосходит чистый векторный.
Два вида поиска, которые дают сбои по-разному
BM25 (лексический поиск, или поиск по ключевым словам) оценивает документы по точному совпадению терминов, придавая больший вес редким терминам и штрафуя за длину. Он детерминирован и работает на основе инвертированного индекса. Векторный (семантический) поиск кодирует запросы и документы в плотные embedding-векторы и извлекает результаты по сходству ближайших соседей, улавливая смысл, синонимы и перефразировки — даже между разными языками.
Их слабые стороны зеркальны. BM25 не распознаёт синонимы и концепции: запрос «проблемы с памятью базы данных» не найдёт страницу с заголовком «политики вытеснения кэша», если буквальные слова отличаются. Векторный поиск упускает точные токены — аббревиатуры, артикулы, коды ошибок, ID, номера моделей — и страдает от семантического дрейфа, возвращая семантически близкие, но неверные результаты: например, «кроссовки Adidas» в ответ на запрос «кроссовки Nike». Поскольку режимы сбоев взаимодополняют друг друга, ни один из методов в отдельности не является достаточным.
Что делает гибридный поиск
Гибридный поиск выполняет лексическое (BM25) и плотное (векторное) извлечение параллельно, а затем объединяет два ранжированных списка результатов в один. Шаг слияния — самая интересная часть: оценки BM25 и оценки векторного сходства находятся в совершенно разных масштабах, их нельзя просто сложить.
Именно поэтому доминирующий метод слияния — Reciprocal Rank Fusion (RRF) — использует только позицию в ранге, а не исходные оценки. Объединённая оценка каждого документа — это сумма по обоим ретриверам значения 1, делённого на (k плюс его ранг), где k — небольшая константа (обычно 60; в некоторых исследованиях используют 20). Поскольку RRF полностью игнорирует распределения оценок, он не требует нормализации и работает «из коробки» — именно поэтому он применяется по умолчанию в большинстве векторных баз данных.
RRF против взвешенного слияния
RRF — не единственный вариант. Взвешенное (alpha) слияние нормализует два набора оценок и смешивает их с настраиваемым весом: alpha 0 — чистый поиск по ключевым словам, 1 — чистый векторный, 0,5 — равный вес, а значения по умолчанию часто составляют около 0,75 в сторону семантики. Некоторые движки также предлагают слияние на основе относительных оценок и распределений.
Компромисс: RRF надёжен и малопараметричен, идеально подходит, когда не хочется подстраиваться под конкретный корпус. Взвешенное слияние даёт регулятор, чтобы отдать предпочтение точному совпадению терминов (меньший alpha) в технических материалах с большим количеством идентификаторов или семантике (больший alpha) для вопросов на естественном языке. Начните с RRF; прибегайте к взвешенному слиянию, когда есть чёткая причина отдать предпочтение одному из ретриверов.
Где применяется реранкинг
Гибридное извлечение — это первый этап; реранкинг — второй. Быстрый ретривер (BM25, векторный или гибридный) извлекает набор кандидатов, затем cross-encoder переоценивает каждого кандидата, совместно кодируя запрос и документ за один проход с полным cross-attention. Cross-энкодеры значительно точнее ретриверов первого этапа, но слишком затратны для работы со всем корпусом, поэтому они переоценивают только top-k кандидатов.
Поэтому каноническая продакшен-pipeline выглядит так: гибридное извлечение (BM25 + векторное, объединённое с RRF) → cross-encoder или LLM-реранкер → лучшие результаты в контекст модели. Каждый этап выполняет ту задачу, в которой он лучше всего — сначала полнота охвата, в конце — точность.
Это действительно помогает? И как построить в osFoundry
Преимущества реальны, но зависят от ваших данных. Исследование BEIR компании Elastic показало, что гибрид RRF поднял средний NDCG@10 примерно на 18% по сравнению с одним BM25 и на меньший отрыв по сравнению с сильным обученным энкодером, при этом был не хуже или лучше BM25 на каждом протестированном датасете. По мере улучшения плотных моделей предельный прирост гибрида сократился — зачастую до нескольких процентных пунктов на данных из домена — но он остаётся наибольшим для корпусов за пределами домена, редких терминов и запросов, сочетающих естественный язык с точными идентификаторами. Гибридный поиск остаётся стандартом для продакшена.
Кастомная RAG-pipeline osFoundry предоставляет это в виде компонуемых этапов, а не чёрного ящика: этап BM25 и векторный этап работают параллельно, этап слияния (RRF по умолчанию, взвешенный как опция) объединяет их, а этап реранкинга уточняет результат перед отправкой в модель. Вы настраиваете баланс лексического и семантического поиска для каждой базы знаний в конфигурации, следуя паттерну «извлечь — слить — переранжировать» без написания инфраструктурного кода.
Frequently asked questions
- В чём разница между поиском по ключевым словам и семантическим поиском?
- Поиск по ключевым словам (лексический), как BM25, сопоставляет точные термины и взвешивает редкие — точный, но слепой к синонимам. Семантический (векторный) поиск кодирует смысл в embedding-векторы и находит по сходству, улавливая перефразировки и связанные концепции, но может упустить точные токены, такие как ID и коды ошибок. Каждый силён в противоположных ситуациях.
- Что такое гибридный поиск?
- Гибридный поиск выполняет поиск по ключевым словам (BM25) и векторное извлечение параллельно и объединяет их ранжированные результаты в один список с помощью алгоритма слияния. Он существует потому, что два метода дают сбои по-разному — векторный обрабатывает синонимы и концепции, BM25 точно справляется с точными терминами, идентификаторами и редким жаргоном — поэтому их комбинирование улучшает как полноту, так и точность.
- Что такое Reciprocal Rank Fusion (RRF)?
- RRF объединяет два ранжированных списка, используя только позицию в ранге, а не исходные оценки. Объединённая оценка каждого документа — это сумма по ретриверам значения 1, делённого на (k плюс его ранг), где k — небольшая константа (обычно 60). Поскольку он игнорирует несовместимые шкалы оценок BM25 и векторного поиска, нормализация не требуется, и он хорошо работает из коробки.
- Когда гибридный поиск превосходит чистый векторный?
- Когда запросы сочетают естественный язык с точными идентификаторами, используют редкий или специфичный для домена жаргон, работают с внедоменным контентом или являются многоязычными. Чистого векторного поиска может хватить для сугубо концептуальных вопросов по хорошо встроенным, внутридоменным данным. Для технических баз знаний, полных кодов и названий продуктов, гибридный подход явно лучше.
- Почему векторный поиск упускает точные термины и ID?
- Embedding-векторы сжимают текст в вектор фиксированного размера, который улавливает смысл, а не точное написание, поэтому редкие токены, такие как коды ошибок, артикулы и аббревиатуры, сглаживаются — свойство, иногда называемое структурной слепотой. Модель знает, о чём отрывок, но не то, что он содержит искомую буквальную строку, — именно с этим хорошо справляется BM25.
- RRF или взвешенное слияние — что выбрать?
- Начните с RRF: он надёжен, малопараметричен и не требует настройки под корпус. Переходите к взвешенному (alpha) слиянию, когда есть чёткая причина отдать предпочтение одному ретриверу — меньший alpha для точного совпадения терминов в контенте с большим количеством идентификаторов, больший alpha для семантики в вопросах на естественном языке.
- Добавляет ли гибридный поиск задержку или затраты, и оправдано ли это?
- Он выполняет два извлечения плюс шаг слияния, поэтому есть определённые накладные расходы, а реранкинг добавляет ещё. Для большинства систем RAG преимущества в полноте и точности оправдывают это, особенно для технических корпусов или корпусов со смешанным контентом. Если у вас хорошо встроенные, сугубо концептуальные данные и задержка критична, чистого векторного поиска может быть достаточно — измерьте на своих запросах.
Sources