Гибридный поиск
Понятие гибридного поиска
Гибридный поиск объединяет полнотекстовый поиск и векторный поиск в едином ранжированном результате. Вместо выбора одного из сигналов гибридный запрос оценивает каждый документ сразу по двум критериям — насколько его текст соответствует запросу (лексическая релевантность) и насколько его эмбеддинг близок к вектору запроса (семантическая близость) — а затем объединяет два ранжирования в одно.
Эти сигналы дополняют друг друга:
- Полнотекстовый поиск (BM25) точен для конкретных термов, имён, кодов и редких ключевых слов, но пропускает документы, в которых использованы другие формулировки.
- Векторный поиск (поиск ближайших соседей по эмбеддингам) улавливает семантическую близость и перефразирования, но может поставить тематически близкий документ выше того, который содержит точный введённый пользователем терм.
Их объединение даёт результаты, релевантные одновременно и лексически, и семантически. Это распространённый строительный блок для поиска по базам знаний и для этапа извлечения данных в подходе Retrieval-Augmented Generation (RAG).
Гибридный поиск в YDB
В YDB гибридный запрос выполняется по таблице, для которой созданы оба индекса:
- fulltext_relevance по текстовой колонке;
- vector_kmeans_tree по колонке с эмбеддингами.
Объединение задаётся в секции 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).
Подробнее: