TGViewer
Eli Rum - Tech & Ai Eli Rum - Tech & Ai @somecrazyhands · 462 subscribers
Post #30 113
📝 Пост #4. Гибридный поиск для RAG

Первый пост - что такое RAG
Второй пост - чанки для RAG
Третий пост - Router-LLM

💡Один вектор — хорошо, а два + reranker — точнее и быстрее


Hybrid search — объединение плотных (dense) эмбеддингов и разрежённых (BM25/SPLADE) счётчиков — даёт заметный прирост recall/precision для RAG-систем: лично мои бенчмарки показывают +8-25 % recall и –40 % галлюцинаций по сравнению с чистым векторным поиском. Ключ к успеху — правильно объединить два ранжирования и добавить лёгкий cross-encoder reranker (например BGE-Reranker-m3-v2 или Cohere v3) для последней сортировки топ-кандидатов

💬 - На первом скрине нарисован pipeline как делаем запросы с помощью гибрида.
💬 - А на втором то как я делаю с гибридной норрмализацией и fusion

Почему одного метода мало
- BM25/SPARSE отлично ловят точные идентификаторы и редкие термины (“TS-12345”, NullPointerException) а в случае с SPARSE и семантические синонимы— dense-вектор их часто игнорирует.
- Dense эмбеддинги спасают, когда формулировки различаются (“график продаж” vs “trend of revenue”).
- Reranker (cross-encoder) умеет видеть полный токен-в-токен контекст и поднимает действительно релевантные чанки вверх.

Базовый pipeline
- Query → получаем sparse-вектор (BM25 или SPLADE) и dense-вектор (BGE-M3).
- Hybrid retrieve: объединяем топ-k (например k=50) из обеих выборок. Milvus и Qdrant умеют делать это за один hybridSearch вызов.
- Rerank (k≈80 → 15 шт.) Reciprocal Rank Fusion или BGE-Reranker-v2-m3.
- LLM получает уже «вычищенный» контекст.

Практические советы
- Нормализуйте веса: score = 0.7*dense + 0.3*sparse, либо используйте встроенный RRF — не зависите от абсолютных шкал.
- Перед rerank’ом фильтруйте дубликаты по ID чанка, иначе cross-encoder впустую тратит время.
- Для кода полезно поднять вес BM25: точный токен (.env, rm -rf) важнее общей семантики и можно заморочиться с SPARSE, но это нужно уметь
- Multi-vector (Chroma, Milvus и тп) — храните рядом эмбеддинг summary и сырых чанкoв, повышает отзыв на диалогах.


Еще раз чтобы лучше запомнить:

Зачем скрещивать методы?
- BM25 ловит точные ID и редкие термины (`TS-12345`, `NPE`).
- Dense понимает смысл, даже если слова другие.
- Reranker (cross-encoder) ставит на верх то, что отвечает правде.

Как это работает
- Из запроса делаем *два* вектора: sparse и dense.
- Гибридный retriever берёт top-50 из каждого → объединяет.
- RRF или bge-reranker пересортировывает топ-15.
- LLM получает чистый контекст — меньше токенов, выше точность.

Настройка на практике
- Вес по умолчанию: 0.7*dense + 0.3*sparse.
- Если запрос содержит точный номер или код → 0.4/0.6.
- k для rerank: 80 (хватает, чтобы не упустить редкий факт).
- Удаляйте дубликаты по chunk\_uid до rerank’а.

Что почитать
- Milvus HybridSearch + RRF Ranker
- Weaviate «Hybrid search explained»
- BGE-Reranker v2-m3 (HF)
- Qdrant tutorial по rerank’у

💬 Следующй пост: Graph RAG — когда простого поиска недостаточно.

Люблю репосты и лайки 🥰
  • 🔥 5
  • ❤ 4
  • 👍 1
More from @somecrazyhands
  1. Aug 18, 2026v0️⃣.3️⃣4️⃣.0️⃣ ForgePlan v0.34 - что нового. Главное: инструмент перестал врать. Версия п…
  2. Aug 18, 2026Давненько не было релизов в ForgePlan, вчера задеплоил новую версию.
  3. Aug 14, 2026Всем привет! Ваш покорный весной записывал курс для Hitch (red_mad_robot) https://ai.hitch…
  4. Aug 7, 2026Пока технологии несутся а люди борются за еду наперегонки с тостерами и кофемолками ИИ Я р…
  5. Aug 5, 2026Без ИИ как без рук. Назад больно Поделюсь историей, которая случилась со мной на прошлой н…
  6. Aug 4, 2026Про вайб кодинг на удаленке. 🔹 Многие наверное видели вот эти посты из каждого утюга где…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →