1. Главная
  2. Docs
  3. Глоссарий
  4. Гибридный поиск

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

12

Гибридный поиск — одновременное применение двух способов: поиска по смыслу через векторы и обычного поиска по словам. Результаты объединяются в один список.

Смысл в том, что эти способы ошибаются по-разному. Векторный не находит точный артикул, но понимает переформулировку. Словесный находит артикул, но бессилен, если пользователь спросил другими словами.

Что даёт словесная часть

Классический механизм — BM25, ранжирование по частоте слов запроса в документе с поправкой на их распространённость. Он точен там, где важно буквальное совпадение: номера, коды, названия моделей, фамилии, аббревиатуры, редкие термины.

Отраслевая лексика — отдельный довод: слово, которого не было в обучающих данных модели эмбеддингов, для векторного поиска почти не существует, а для словесного это обычное слово.

Параметр k1 — насыщение частоты. Определяет, как быстро повторение слова в документе перестаёт добавлять оценку. При k1, равном нулю, частота игнорируется вовсе: одно вхождение слова и десять весят одинаково. Типичные значения — 1,2–2,0: второе-третье вхождение слова добавляет уже немного, десятое — почти ничего. Это защита от накрутки текстом-простынёй с повторами.

Параметр b — нормализация длины. Насколько штрафуются длинные документы: при нуле длина не учитывается, при единице — учитывается полностью, типичное значение 0,75. Смысл: в длинном документе слова встречаются чаще просто из-за размера, и без поправки он систематически выигрывает у короткого, где искомое слово — суть. Длину игнорируют, когда чанки нарезаны одинаковыми по размеру — тогда b можно снижать.

Редкость слова весит больше. Третий компонент BM25 — поправка на распространённость слова по корпусу: слово, встречающееся в каждом документе, почти не различает их; редкий термин сдвигает оценку сильно. Именно поэтому словесная ветка сильна на артикулах и кодах ошибок — они предельно редки.

Как объединяют результаты

Reciprocal rank fusion. Учитываются не оценки, а места в списках: фрагмент получает тем больший вес, чем выше он в каждой из выдач. Не требует калибровки и потому устойчивее — обычно с него и начинают.

Механика на числах. Вес фрагмента в каждой выдаче — единица, делённая на сумму шестидесяти и его места. Первое место даёт 1/61 ≈ 0,016, десятое — 1/70 ≈ 0,014, сотое — 1/160 ≈ 0,006. Константа 60 подобрана эмпирически и сглаживает разницу между местами: лидер списка весит лишь немного больше десятого. Отсюда поведение метода: фрагмент на десятом месте в обоих списках (сумма ≈ 0,029) обгоняет фрагмент, который первый в одном и сотый в другом (≈ 0,023). RRF награждает согласие двух методов, а не одну яркую победу.

Взвешенная сумма. Оценки обоих способов приводят к сопоставимому виду и складывают с весами. Требует калибровки: шкалы у методов разные, и веса подбираются на данных.

Калибровка весов

Что именно калибруется. Взвешенная сумма опирается на нормализацию оценок — приведение к общему диапазону — и на коэффициент: доля вклада векторной ветки от нуля до единицы, остальное получает словесная. Нормализация чувствительна к выбросам: один аномально близкий вектор сжимает шкалу, и веса перестают означать то, что предполагалось.

Порядок. Старт — равные вклады, дальше перебор коэффициента по сетке с шагом 0,1 на контрольном наборе запросов с эталонами, критерий — полнота и точность выдачи. На типовых корпусах оптимум ложится в диапазон 0,3–0,7; крайние значения — сигнал, что одна из веток не работает и надо разбираться с ней, а не с весами.

Когда пересматривать. При смене состава корпуса: новые типы документов и запросов сдвигают оптимум. Сигнал к пересмотру — падение полноты на контрольном наборе при неизменных настройках, то есть обычный дрейф данных; как строить такой контроль — тема статьи про метрики RAG.

Когда гибрид обязателен

Каталоги товаров с артикулами. Техническая документация с кодами ошибок и версиями. Юридические документы с номерами статей и пунктов. Любая база, где пользователь ищет по конкретному обозначению.

Проверить нужду просто: возьмите двадцать реальных запросов и посмотрите, сколько из них содержат точное обозначение. Если больше трети — чистый векторный поиск будет разочаровывать.

Чем платим

Два индекса вместо одного: больше места, дольше индексация, сложнее эксплуатация. Плюс появляются параметры объединения, которые надо настроить и потом не забыть про них при изменении данных. Часть векторных баз содержит словесный индекс встроенным — тогда плата сводится к памяти и настройке; отдельная поисковая система рядом с базой ради гибрида нужна редко.

Как настроить и не сломать

Начинать стоит с равного вклада обоих способов и смотреть на изменение полноты по проверочному набору. Смещение в сторону словесного поиска улучшает работу с обозначениями и ухудшает понимание переформулировок; смещение в сторону векторного — наоборот.

Настраивать нужно раздельно по типам запросов, если они заметно различаются: у запросов с артикулами и у вопросов обычным языком оптимум разный. Иногда проще определять тип запроса и применять разные веса.

Типичные ошибки

Складывание оценок разных методов напрямую, без приведения к сопоставимому виду: у BM25 и косинусной близости несравнимые шкалы, и результат определяется той, у которой числа крупнее.

Настройка весов на нескольких примерах вместо проверочного набора.

Отсутствие переиндексации словесного индекса при обновлении документов — векторный обновили, а второй забыли.

Частые вопросы

Всегда ли нужен гибридный поиск?

Нет. Если пользователи формулируют вопросы обычным языком и точные обозначения в запросах редки, векторного поиска достаточно, а гибрид добавит сложности без выигрыша. Нужду проверяют на реальных запросах: доля запросов с артикулами, номерами и кодами выше трети — берите гибрид.

Как объединять результаты двух поисков?

Начинать стоит с reciprocal rank fusion: он учитывает места в списках, а не оценки, и потому не требует калибровки шкал. Взвешенная сумма даёт больше контроля, но веса приходится подбирать на данных и пересматривать при их изменении.

Заменяет ли гибридный поиск реранкинг?

Нет, они на разных этапах. Гибрид улучшает полноту — повышает шанс, что нужный фрагмент вообще окажется среди кандидатов. Реранкинг улучшает точность — поднимает нужное наверх. В зрелых системах обычно есть оба.

Какие значения k1 и b ставить в BM25?

Стандартные k1 в диапазоне 1,2–2,0 и b около 0,75 — разумный старт. Менять их стоит только по замеру на контрольном наборе: k1 снижают, когда повторы слов в документах информативны, b снижают при одинаковой нарезке чанков и повышают для неоднородных длинных документов. Влияние этих параметров меньше, чем влияние веса объединения и качества нарезки.

Нужна ли лемматизация для русского языка?

Для словесной ветки — да, иначе «договор», «договора» и «договоры» считаются разными терминами, и совпадения теряются на формах слов. Приведение к начальной форме или стемминг — стандартная часть словесного индекса для русского; без неё гибрид не реализует своё преимущество на точных формулировках.

Часто ли надо пересчитывать веса объединения?

По сигналу, а не по календарю: при появлении новых типов документов или запросов и при падении полноты на контрольном наборе. На стабильном корпусе веса держатся месяцами; регулярный пересчёт без изменений данных даёт шум настройки, а не улучшение.

Что почитать по теме