Что такое гибридный поиск в Retrieval‑Augmented Generation
Retrieval‑Augmented Generation (RAG) сочетает два подхода: традиционный полнотекстовый поиск по ключевым словам и векторный поиск по эмбеддингам. Гибридный поиск объединяет их, позволяя использовать сильные стороны каждого метода. Ключевой поиск быстро отбирает документы, содержащие нужные термины, а векторный модуль уточняет их релевантность с учётом семантики. Такая комбинация повышает точность ответов генеративных моделей, особенно в больших корпоративных базах знаний, где полнотекстовые индексы уже построены.
Ключевой поиск: базовые принципы
Ключевой поиск — это классический метод, построенный на индексации токенов (слов, лемм) и подсчёте их встречаемости в документе. При запросе система ищет документы, в которых встречаются те же токены, что и в запросе. Наивный подход — простое совпадение по частоте (raw term frequency). Однако такой метод игнорирует важность слов и их распространённость в корпусе, что приводит к переоценке часто встречающихся терминов (например, «данные», «система») и недооценке редких, но информативных.
Для исправления этой проблемы применяются взвешивающие схемы: TF‑IDF и BM25. Они учитывают как локальную частоту термина в документе, так и глобальную частоту в коллекции, позволяя более адекватно ранжировать результаты.
TF‑IDF: взвешивание терминов
TF‑IDF (Term Frequency–Inverse Document Frequency) — одна из самых известных метрик в информационном поиске. Формула выглядит так:
[ \text{TF‑IDF}(t, d) = \text{tf}(t, d) \times \log\frac{N}{\text{df}(t)} ]
- tf(t, d) — частота появления термина t в документе d. Часто используется логарифмическое преобразование, чтобы смягчить влияние повторов.
- df(t) — число документов, содержащих термин t.
- N — общее количество документов в коллекции.
Инвертированная частота документа (IDF) резко снижает вес часто встречающихся слов и повышает значение редких, но характерных для темы. После вычисления TF‑IDF для всех терминов документа формируется вектор, который сравнивается с запросом (тоже представляемым вектором) с помощью косинусного сходства. Чем выше косинус, тем более релевантным считается документ.
TF‑IDF прост в реализации, не требует обучения и работает эффективно в системах, где размер словаря ограничен. Однако он не учитывает позицию термина, длину документа и другие контекстные факторы, что иногда приводит к неточным ранжировкам.
BM25: улучшенный ранжирующий алгоритм
BM25 (Best Matching 25) — развитие модели Okapi, которое вводит несколько поправок к TF‑IDF, делая ранжирование более стабильным для разнообразных коллекций. Основная формула:
[ \text{BM25}(q, d) = \sum_{t \in q} \underbrace{\log\frac{N - \text{df}(t) + 0.5}{\text{df}(t) + 0.5}}_{\text{IDF}} \times \frac{\text{tf}(t, d) \times (k_1 + 1)}{\text{tf}(t, d) + k_1 \times \left(1 - b + b \times \frac{|d|}{\text{avgdl}}\right)} ]
- k₁ (обычно 1.2–2.0) регулирует влияние частоты термина.
- b (0 ≤ b ≤ 1, часто 0.75) учитывает длину документа относительно среднего.
- |d| — длина документа в токенах.
- avgdl — средняя длина документов в коллекции.
BM25 вводит нормализацию длины, благодаря чему длинные документы не получают нечестного преимущества в счёте. Параметры k₁ и b позволяют адаптировать модель под конкретные данные: при большом разнообразии длины документов рекомендуется увеличить b, а при высоком уровне шумовых токенов — уменьшить k₁.
Практика показывает, что BM25 стабильно превосходит базовый TF‑IDF в задачах веб‑поиска, корпоративных систем и даже в некоторых сценариях вопрос‑ответ, где важна точность ранжирования.
Интеграция традиционного и векторного поиска
Гибридный поиск в RAG использует два независимых индекса:
- Полнотекстовый индекс (например, Elasticsearch, Apache Lucene) реализует BM25/TF‑IDF. При получении запроса система быстро извлекает топ‑k документов по ключевым словам.
- Векторный индекс (FAISS, Milvus, Annoy) хранит эмбеддинги, полученные из нейросетевых моделей (BERT, Sentence‑Transformers). После предварительного отбора документы проходят сквозную проверку по семантическому сходству.
Алгоритм обычно выглядит так:
- Шаг 1. По запросу вычисляются TF‑IDF/BM25‑оценки, выбираются, скажем, 100‑200 самых релевантных документов.
- Шаг 2. Для этих документов извлекаются эмбеддинги, сравниваются с эмбеддингом запроса, и отбираются топ‑N (10‑20) по косинусному сходству.
- Шаг 3. Выбранные фрагменты передаются в генеративную модель (GPT‑4, LLaMA), которая генерирует ответ, используя контекст из найденных источников.
Такой подход сохраняет скорость ключевого поиска (BM25 работает за миллисекунды) и добавляет семантическую точность векторного этапа. При этом гибридный режим позволяет динамически регулировать баланс: в задачах, где важна строгая терминальная точность, можно увеличить вес BM25; в более свободных запросах — усилить векторный компонент.
Практические аспекты внедрения
- Токенизация и нормализация. Для BM25 критически важна согласованная предобработка: стемминг, лемматизация, удаление стоп‑слов. Несовпадения в токенизации между полнотекстовым и векторным индексом могут привести к потере релевантных документов.
- Обновление индексов. При добавлении новых документов необходимо синхронно обновлять оба индекса. Многие системы позволяют выполнять инкрементальную индексацию без полной перестройки.
- Параметры BM25. Рекомендуется провести небольшую гиперпараметрическую оптимизацию (grid search) на репрезентативном наборе запросов, чтобы подобрать k₁ и b под конкретный корпус.
- Размер топ‑k. Выбор количества документов, подаваемых на векторный этап, компромисс между скоростью и качеством. При ограничениях по времени (реальное время ответа) часто используют 50‑100 документов.
- Кеширование запросов. Часто повторяющиеся запросы можно кешировать на уровне BM25, что дополнительно ускоряет работу гибридного пайплайна.
Гибридный поиск в RAG уже доказал свою эффективность в чат‑ботах, системах поддержки клиентов и аналитических платформах. Тщательная настройка TF‑IDF/BM25‑модулей и правильное взаимодействие с векторными эмбеддингами позволяют достичь высокой точности и низкой латентности, делая генеративные ответы более достоверными и контекстно обоснованными.