Przejdź do treści

Hybrid Retrieval: Vector + Keyword + Metadata

Inżynieria odpornego hybrid retrieval: łączenie sygnałów wektorowych, leksykalnych, metadata i temporalnych dla website RAG.

retrieval • hybrid • search • rag

Retrieval jednomodalny przegrywa w przypadkach brzegowych: dense vectors gubią rzadkie tokeny i IDs; czysty lexical gubi parafrazy i podobieństwo semantyczne. Hybrid retrieval łączy komplementarne sygnały, dense semantic, sparse lexical, structured metadata i temporal freshness, aby tworzyć stabilne zbiory kandydatów o wysokiej precision. Ten artykuł opisuje architekturę, normalizację, fuzję scoringu, obsługę awarii i ewaluację.

Motywacja

Scenariusze awarii:

  • Nazwy własne / kody SKU pomijane przez model dense.
  • Zapytania o zmianę cen pobierające przestarzały snapshot bez temporal boost.
  • Długie pytania naturalne nadmiernie ważone na stopwords w systemie sparse only.
  • Vector false positives na semantycznie szerokich stronach, np. marketingowym fluffie, bez leksykalnego zakotwiczenia.

Hybrid ogranicza to, przechwytując ortogonalne wymiary dowodów.

Warstwowanie komponentów

Rekomendowany flow:

  1. Query Embedding → ANN search (k_vec)
  2. Lexical Search (BM25 / SPLADE / Elasticsearch) (k_lex)
  3. Union → Score Normalization (per source scaling)
  4. Metadata Filter Pass (locale, access_tier, page_type)
  5. Diversity & Freshness Adjustments
  6. Optional Cross/Mono Re-Ranker
  7. Final Truncation (top K)

Zachowuj surowe pre-fusion scores dla audytu.

Normalizacja query

Kroki:

  • Normalizacja Unicode NFKC
  • Lowercase, z zachowaniem snapshotu wielkości liter do formatowania odpowiedzi, jeśli potrzebny
  • Tokenizacja i zachowanie stopwords, bo semantic embeddings mogą używać kontekstu
  • Synonym / Alias Expansion: dopisz alternatywne tokeny dla mapowania wewnętrznych codenames produktu, nie wkładaj ich do promptu modelu, używaj tylko dla sparse retrieval
  • Numeric & Version Extraction: wychwyć wzorce X.Y.Z do celowanego scoringu leksykalnego

Filtry metadata i atrybutów

Filtry stosowane po początkowej union kandydatów minimalizują utratę recall. Typowe pola: locale, access_tier, page_type, product_area, updated_bucket. Egzekwuj security filters (tenant / tier) PRZED scoring fusion, aby zapobiec wpływowi leakage na re-ranking. Zapewnij tryb debug zwracający filtered_out set do inspekcji.

Strategia re-rankingu

Użyj lekkiego cross-encodera, np. modelu distilled, na top N (10-20). Jeśli latency > budget, degraduj: pomiń re-rank ALBO zmniejsz candidate count, zwiększając lexical weight. Śledź re_rank_delta = MRR_post - MRR_pre, aby uzasadnić koszt. Cache’uj wyniki re-rankingu dla identycznych union sets w krótkim TTL.

Freshness i sygnały temporalne

Oblicz freshness_weight = exp(-lambda * age_days), gdzie lambda jest dostrajana per typ treści, wyższa dla pricing, niższa dla stabilnego API. Połącz: final_score = w_sem * sem_score + w_lex * lex_score + w_fresh * freshness_weight + w_meta * meta_priors. Najpierw normalizuj każdy komponent (z-score albo min-max), aby uniknąć dominacji.

Failure modes

FailureCauseMitigation
Popularity BiasZbyt duża waga leksykalnego tf-idfOgranicz wkład term frequency
Stale ResultsFreshness weight źle dostrojonyRekalibruj lambda na zbiorze ewaluacyjnym
Locale LeakageFiltry zastosowane zbyt późnoPrzenieś security filters wcześniej
Semantic DriftUpgrade modelu embeddingówDual-index i porównanie A/B przed rollout
Over-fusion NoiseNieograniczony union sizeOgranicz union, diversity pruning

Framework ewaluacji

Eksperymenty:

  • Ablation: (tylko vector, tylko lexical, hybrid bez rerank, full) mierz Recall@k, MRR.
  • Fusion Weight Tuning: grid search weights na validation gold set.
  • Latency Budget: śledź średnią + P95 retrieval latency per konfiguracja.
  • Drift: monitoruj tygodniową względną zmianę recall dla head vs tail queries.

Utrzymuj evaluation manifest z hashami konfiguracji.

Pętla optymalizacji

Cykl:

  1. Loguj retrieval traces (query, candidates, scores, source_tag).
  2. Identyfikuj mis-hits (niska downstream faithfulness albo niski citation count) → klasyfikuj root cause (brakujący lexical candidate, semantic false positive, stale content).
  3. Dostosuj weights / thresholds; uruchom offline suite.
  4. Canary nowych fusion weights za feature flag.
  5. Promote po statystycznie istotnej poprawie.

Najważniejsze wnioski

  • Hybrid retrieval to system strojalnych pokręteł, instrumentuj bezlitośnie.
  • Stosuj security i access filters wcześnie; unikaj leakage w scoringu.
  • Re-ranking musi uzasadniać latency mierzalnym wzrostem MRR / Recall.
  • Temporal decay zapobiega dominacji przestarzałych stron o wysokim autorytecie.
  • Traktuj fusion changes jak kod: version, evaluate, roll forward or back.