Ga naar inhoud

Hybrid Retrieval: Vector + Keyword + Metadata

Resilient hybrid retrieval engineeren: vector-, lexicale, metadata- en temporele signalen mengen voor website-RAG.

retrieval • hybrid • search • rag

Retrieval met één modaliteit faalt in randgevallen: dense vectors missen zeldzame tokens en IDs; pure lexical mist parafrase en semantische gelijkenis. Hybrid retrieval fuseert complementaire signalen, dense semantic, sparse lexical, structured metadata en temporal freshness, om stabiele candidate sets met hoge precision te produceren. Dit artikel beschrijft architectuur, normalisatie, scorefusie, failure handling en evaluatie.

Motivatie

Faalscenario’s:

  • Eigennamen / SKU-codes gemist door het dense model.
  • Pricing change queries die een oude snapshot ophalen zonder temporal boost.
  • Lange natuurlijke vragen die in een sparse-only systeem te zwaar wegen op stopwords.
  • Vector false positives op semantisch brede pagina’s, zoals marketingfluff, zonder lexicale verankering.

Hybrid beperkt dit door orthogonale bewijsdimensies vast te leggen.

Componentlaagopbouw

Aanbevolen 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)

Bewaar ruwe pre-fusion scores voor audit.

Querynormalisatie

Stappen:

  • Unicode normaliseren naar NFKC
  • Lowercase, maar casing snapshot bewaren voor antwoordformatting indien nodig
  • Tokenizen en stopwords behouden, omdat semantic embeddings context kunnen benutten
  • Synonym / Alias Expansion: alternatieve tokens toevoegen voor interne productcodename mapping, niet in de model prompt plaatsen, alleen gebruiken voor sparse retrieval
  • Numeric & Version Extraction: X.Y.Z-patronen vastleggen voor gerichte lexicale scoring

Metadata- en attributenfilters

Filters toepassen na de initiële candidate union minimaliseert recallverlies. Veelgebruikte velden: locale, access_tier, page_type, product_area, updated_bucket. Dwing security filters (tenant / tier) af VÓÓR scoring fusion om te voorkomen dat leakage reranking beïnvloedt. Bied een debugmodus die de filtered_out set teruggeeft voor inspectie.

Re-rankingstrategie

Gebruik een lichte cross-encoder, bijvoorbeeld een distilled model, op top N (10-20). Als latency boven budget komt, degrade: sla rerank over OF verlaag candidate count terwijl lexical weight stijgt. Volg re_rank_delta = MRR_post - MRR_pre om kosten te rechtvaardigen. Cache rerankresultaten voor identieke union sets binnen een korte TTL.

Freshness en temporele signalen

Bereken freshness_weight = exp(-lambda * age_days) waarbij lambda per contenttype wordt getuned, hoger voor pricing en lager voor stabiele API’s. Combineer: final_score = w_sem * sem_score + w_lex * lex_score + w_fresh * freshness_weight + w_meta * meta_priors. Normaliseer elke component eerst (z-score of min-max) om dominantie te voorkomen.

Failure modes

FailureCauseMitigation
Popularity BiasLexicale tf-idf te zwaarTerm frequency bijdrage begrenzen
Stale ResultsFreshness weight verkeerd getunedLambda opnieuw kalibreren met evaluatieset
Locale LeakageFilters te laat toegepastSecurity filters eerder plaatsen
Semantic DriftEmbedding model upgradeDual-index en A/B vergelijken vóór rollout
Over-fusion NoiseOnbegrensde union sizeUnion beperken, diversity pruning

Evaluatiekader

Experimenten:

  • Ablation: (alleen vector, alleen lexical, hybrid zonder rerank, volledig) meet Recall@k, MRR.
  • Fusion Weight Tuning: grid search weights met validation gold set.
  • Latency Budget: volg gemiddelde + P95 retrieval latency per configuratie.
  • Drift: monitor wekelijks relatieve verandering in recall voor head vs tail queries.

Bewaar een evaluation manifest met config hashes.

Optimalisatielus

Cyclus:

  1. Log retrieval traces (query, candidates, scores, source_tag).
  2. Identificeer mis-hits (lage downstream faithfulness of laag citation count) → classificeer root cause (ontbrekende lexical candidate, semantic false positive, stale content).
  3. Pas weights / thresholds aan; draai offline suite.
  4. Canary nieuwe fusion weights achter feature flag.
  5. Promote bij statistisch significante verbetering.

Belangrijkste lessen

  • Hybrid retrieval is een systeem van tuneable dials, instrumenteer meedogenloos.
  • Pas security- en access filters vroeg toe; voorkom leakage in scoring.
  • Re-ranking moet latency rechtvaardigen met meetbare MRR / Recall lift.
  • Temporal decay voorkomt dat verouderde pagina’s met hoge autoriteit domineren.
  • Behandel fusion changes als code: version, evaluate, roll forward or back.