Hybrid Search

Гибридный поиск — объединение лексического (BM25, точное совпадение слов) и семантического (векторного) поиска в RAG. Результаты двух методов сливаются через RRF (Reciprocal Rank Fusion). Production Baseline 2026: чистого вектора уже недостаточно.

Суть

У каждого метода своя слепая зона: векторный поиск пропускает точные ID, коды, имена собственные; BM25 пропускает синонимы и смысл. Гибрид ловит обе категории — берём топ от каждого и объединяем ранги.

Зачем это нужно

Особенно важно, когда в базе знаний много специфичных терминов/кодов: «найди ошибку GO-124» вектор может «размазать» по смыслу, а BM25 найдёт точно. И наоборот, «как ускорить запросы» — это про смысл, тут силён вектор.

Как работает (RRF)

  1. BM25 отбирает топ-50 по точным совпадениям терминов.

  2. Vector Search отбирает топ-50 по семантической близости (косинус, см. Embeddings).

  3. RRF объединяет два ранжирования в общий топ-20:

    RRF(d) = 1 / (k + rank_bm25(d)) + 1 / (k + rank_vector(d)), где k — константа (обычно 60).

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

  4. Полученный топ уходит на Reranking (cross-encoder → топ-5).

  • Query Expansion / HyDE — смежная техника: запрос расширяют синонимами или генерируют «гипотетический ответ» и ищут уже по нему; помогает на коротких/неоднозначных запросах.
  • Связка Hybrid Search + Reranking покрывает ~80% use cases — это и есть минимальный продакшен-стандарт 2026.
  • Hybrid и хранилище: PostgreSQL full-text search (tsvector/tsquery) — лексический поиск, он не равноценен полноценному вероятностному BM25 / sparse-retrieval в dedicated-системах; для production-hybrid часто проще взять dedicated layer (Qdrant с нативным BM25/sparse, OpenSearch и т.п.). Query2doc — близкий к HyDE подход: LLM генерирует псевдо-документ для расширения запроса.

Калибровка RRF и нужен ли HyDE поверх реранкинга

Веса и константа k. У RRF в базовой форме весов нет вовсе — в этом его удобство: он объединяет два ранжирования по позициям, а не по несравнимым между собой скорам. Константа k (обычно 60) управляет тем, насколько сильно высокие позиции доминируют над остальными: меньше k — резче преимущество первых мест, больше — площе. Калибруется она, как и любой порог, на своём eval-наборе со срезами (RAG Metrics), а не подбирается на глаз.

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

HyDE поверх реранкинга. Оба приёма борются с одной и той же проблемой — расхождением языка запроса и языка документа, — но с разных сторон: HyDE переписывает запрос до поиска, реранкер переоценивает результат после. Поэтому их суммарный эффект не складывается: там, где реранкер уже вытянул нужный документ из топ-50, HyDE ничего не добавит, а стоить будет дополнительной генерации на каждый запрос.

Практический порядок проверки: сначала гибрид, потом реранкер, и HyDE пробовать последним — только если реранкер не помогает, потому что нужного документа не оказывается среди кандидатов вовсе. Это признак проблемы на этапе отбора, а не ранжирования, и вот там HyDE работает.

Почему отрицания ломают именно векторный канал

У проблемы, ради которой держат sparse-канал, есть конкретная числовая иллюстрация: косинусная близость векторов фраз «удалить» и «не удалять» может достигать 0,92. Для эмбеддера это почти одно и то же — обе фразы про удаление, — а для пользователя это противоположные команды.

То же самое происходит с точными артикулами, кодами ошибок и номерами версий: dense-поиск размазывает их по смыслу, потому что различающий признак — один символ, не несущий семантики. BM25 решает обе задачи не потому, что «умнее», а потому что работает с токенами, а не со смыслом.

Практический вывод для русскоязычного домена: выигрыш гибридного поиска на точных терминах теряется, если BM25-индекс и реранкер не настроены на морфологию русского языка. Лексический канал, не умеющий сводить словоформы, даёт мимо на любом склонении — и тогда гибрид формально есть, а работает как чистый dense (RU Embedding Model Selection).

Связано с

  • RAG — гибридный поиск = recall-этап retrieval
  • Reranking — куда уходит топ гибридного поиска
  • Embeddings — семантическая половина гибрида