Гибридный поиск

Понятие гибридного поиска

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

Эти сигналы дополняют друг друга:

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

Их объединение даёт результаты, релевантные одновременно и лексически, и семантически. Это распространённый строительный блок для поиска по базам знаний и для этапа извлечения данных в подходе Retrieval-Augmented Generation (RAG).

Гибридный поиск в YDB

В YDB гибридный запрос выполняется по таблице, для которой созданы оба индекса:

Объединение задаётся в секции ORDER BY функцией HybridRank, которая принимает по одному оценивающему выражению на каждую ветвь — FullTextScore для текстовой ветви и Knn-расстояние или сходство для векторной ветви:

$queryText = "машинное обучение";
$queryVector = Knn::ToBinaryStringFloat([0.1, 0.2, 0.3, 0.4]);

SELECT id, title
FROM documents
ORDER BY HybridRank(
    FullTextScore(text, $queryText),
    Knn::CosineDistance(embedding, $queryVector))
LIMIT 10;

Каждая ветвь выполняется по своему индексу и возвращает собственный список наиболее подходящих документов. Затем YDB объединяет эти списки в итоговое ранжирование — одним из двух способов:

  • Reciprocal Rank Fusion (RRF) — по умолчанию. Каждая ветвь вносит вклад на основе ранга документа в этой ветви, поэтому абсолютные значения оценок (которые несопоставимы между ветвями) не имеют значения.
  • Linear — взвешенная сумма оценок ветвей (по умолчанию нормализованных методом min-max).

Веса ветвей, константа RRF и размеры пулов кандидатов настраиваются. Полный синтаксис запроса и список параметров — в разделе Гибридный поиск (HybridRank).

Подробнее: