Skip to main content

Wyszukiwanie hybrydowe (Dense + Sparse Search)

DLA AGENTÓW AIChatGPTClaude

Architektura retrievalu w nowoczesnych systemach RAG, łącząca semantyczne wyszukiwanie wektorowe (Dense Embeddings) z klasycznym indeksowaniem pełnotekstowym opartym na słowach kluczowych (Sparse / BM25) za pomocą algorytmów fuzji rankingów (RRF).

1. Przegląd koncepcji i problem systemowy

Na etapie tworzenia systemów RAG inżynierowie często polegają wyłącznie na bazach danych wektorowych: tekst jest dzielony na chunki, przepuszczany przez model embeddings i zapisywany w indeksie HNSW.

W środowisku produkcyjnym takie podejście nieuchronnie napotyka „ślepotę wektorową”:

  1. Porażka przy dokładnych identyfikatorach: Gdy inżynier szuka kodu błędu ERR_CONNECTION_REFUSED, wyszukiwanie wektorowe zwraca ogólne artykuły o sieciach, ale pomija dokładną linię w logach.
  2. Porażka przy rzadkich nazwach własnych: Nowe nazwy frameworków, unikalne nazwiska czy specyficzne stałe projektowe nie mają gęstego reprezentowania w wagach modelu embeddings.
  3. Ograniczenia klasycznego wyszukiwania pełnotekstowego (BM25): Klasyczne wyszukiwanie, odwrotnie, nie jest w stanie zrozumieć abstrakcyjnych koncepcji, synonimów ani parafraz.

Hybrid Search syntetyzuje to, co najlepsze z obu światów: równolegle wyszukuje dokumenty po dokładnych słowach kluczowych (Sparse/BM25) oraz po znaczeniu semantycznym (Dense/Vectors), a następnie łączy wyniki w jeden zrównoważony zestaw wyników.

2. Taksonomia architektoniczna i model mentalny

System wyszukiwania hybrydowego składa się z trzech kluczowych bloków architektonicznych:

  • 1. Warstwa wyszukiwania rozrzedzonego (Sparse / Lexical Retrieval): Algorytm BM25 lub TF-IDF nad indeksem odwróconym. Oblicza dokładną częstotliwość występowania terminów z uwzględnieniem długości dokumentu. Gwarantuje znajdowanie dokładnych dopasowań słów, numerów katalogowych, zmiennych i kodów błędów.
  • 2. Warstwa wyszukiwania gęstego (Dense / Semantic Retrieval): Wyszukiwanie wektorowe oparte na odległości euklidesowej lub kosinusowej (HNSW/IVF). Odpowiada za wyodrębnianie dokumentów o podobnej treści, nawet jeśli w zapytaniu i tekście nie ma żadnego wspólnego słowa.
  • 3. Warstwa fuzji rankingów (Fusion Layer):
    • Reciprocal Rank Fusion (RRF): Nie zależy od skal punktacji, operuje wyłącznie na pozycjach (rankingach) w każdej liście. Najbardziej stabilny standard.
    • Linear Weighted Fusion (Alfa-fuzja): Normalizacja punktów i ważone sumowanie: $\text{Score} = \alpha \cdot S_{\text{dense}} + (1 - \alpha) \cdot S_{\text{sparse}}$.
  • 4. Nauczone modele rozrzedzone (Learned Sparse / SPLADE): Współczesny kierunek łączący analizę sieci neuronowych ze strukturą indeksu odwróconego, samodzielnie rozszerzający zapytanie o ważne słowa kluczowe.

3. Pipeline techniczny i mechanika wewnętrzna

Cykl życia zapytania hybrydowego w silniku wyszukiwania:

  1. Dual Query Dispatch (Równoległe dystrybuowanie): Przychodzące zapytanie użytkownika jest jednocześnie przekształcane na wektor (przez API embeddings) oraz na zapytanie tekstowe dla parsera pełnotekstowego (FTS query).
  2. Concurrent Index Lookup (Równoległe wyszukiwanie):
    • Ścieżka A: Silnik wektorowy skanuje graf HNSW i zwraca top-50 kandydatów według podobieństwa kosinusowego.
    • Ścieżka B: Indeks odwrócony znajduje top-50 kandydatów według formuły BM25.
  3. Score Normalization & RRF Aggregation (Fuzja): Listy kandydatów są deduplikowane po ID dokumentu. Każdemu kandydatowi przypisywany jest integralny wynik RRF na podstawie jego pozycji w obu zestawach wyników.
  4. Final Cutoff & Re-ranking (Końcowa selekcja): Top-$K$ dokumentów o najwyższym rankingu jest przekazywanych do końcowego etapu rerankingu krzyżowego enkoderem (Re-ranker) lub bezpośrednio do kontekstu LLM.

4. Praktyczne scenariusze inżynierskie w produkcji

01. Inteligentne wyszukiwanie w repozytoriach kodu

Programista wpisuje: „gdzie zaimplementowano cache sesji redis”.

  • BM25 natychmiast znajduje pliki, w których wspomniana jest stała 'REDIS_SESSION_KEY'.
  • Wyszukiwanie Dense podciąga moduł autoryzacji, gdzie opisano strategię unieważniania sesji bez bezpośredniego użycia słowa „cache”.
  • RRF umieszcza na pierwszym miejscu plik auth/session-cache.ts, który występuje w obu zestawach wyników.

02. Wyszukiwanie E-Commerce z mieszanką cech i nazw

Użytkownik szuka: „cichy odkurzacz bezprzewodowy v15”. BM25 znajduje dokładny model Dyson V15, a wyszukiwanie Dense filtruje modyfikacje pod kątem semantyki niskiego poziomu szumów, zapewniając idealną precyzję konwersji.

03. Referencje medyczne i farmaceutyczne

Wyszukiwanie po objawach („ciężkość w prawym podżebrzu”) w połączeniu z dokładną łacińską nazwą substancji czynnej preparatu lub kodem diagnozy medycznej wg ICD-10.

5. Pułapki, typowe błędy i bezpieczeństwo

  • Niespójność skal surowych punktów (Score Incommensurability): Najgrubszy błąd – bezpośrednie dodawanie bliskości kosinusowej (od 0 do 1) do wyniku BM25 (który może wynosić 25 i więcej). To całkowicie niweluje komponentę wektorową. Zawsze stosuj RRF lub normalizację Min-Max.
  • Podwójne obciążenie infrastruktury (Latency Overhead): Sekwencyjne wykonywanie najpierw BM25, a potem wyszukiwania wektorowego podwaja opóźnienie. Oba zapytania muszą być wykonywane ściśle asynchronicznie przez Promise.all() lub równoległe wątki bazy danych.
  • Przechylenie wagi $\alpha$ ku wartościom skrajnym: Ustawienie wagi $\alpha = 0.9$ zamienia wyszukiwanie hybrydowe w zwykłe wyszukiwanie wektorowe, niwelując koszty utrzymania indeksu odwróconego.
/ Najczęściej zadawane pytaniaSchema.org FAQPage

FAQ: Wyszukiwanie hybrydowe (Dense + Sparse Search)

Modele wektorowe mapują treść do przestrzeni ciągłej i doskonale rozumieją synonimy („samochód” ≈ „auto”). Jednak są praktycznie „ślepe” na dokładne sekwencje alfanumeryczne: numery katalogowe części, kody błędów (np. `0x80070005`), nazwy funkcji kodu (`getUserBySessionId`) czy hasze commitów Git, gdzie wymagane jest 100% dokładne dopasowanie znaków.
/ Linki wewnętrzne
Wszystkie hasła