Il recupero a modalità singola fallisce sui casi limite: i vettori densi mancano token e ID rari; il lessicale puro manca parafrasi e somiglianza semantica. Il recupero ibrido fonde segnali complementari, semantica densa, lessicale sparso, metadati strutturati e freschezza temporale, per produrre insiemi candidati stabili e ad alta precisione. Questo articolo dettaglia architettura, normalizzazione, fusione dei punteggi, gestione dei fallimenti e valutazione.
Motivazione
Scenari di fallimento:
- Nomi propri / codici SKU mancati dal modello denso.
- Query su cambi di prezzo che recuperano snapshot obsoleti senza boost temporale.
- Domande lunghe in linguaggio naturale sovrappesate su stopword in un sistema solo sparse.
- Falsi positivi vettoriali su pagine semanticamente ampie, come testo marketing generico, senza ancoraggio lessicale.
L’ibrido mitiga catturando dimensioni ortogonali di evidenza.
Stratificazione dei componenti
Flusso consigliato:
- Query Embedding → ricerca ANN (k_vec)
- Ricerca lessicale (BM25 / SPLADE / Elasticsearch) (k_lex)
- Unione → normalizzazione punteggi (scaling per fonte)
- Passaggio filtro metadati (locale, access_tier, page_type)
- Aggiustamenti di diversità e freschezza
- Cross/Mono Re-Ranker opzionale
- Troncamento finale (top K)
Mantieni i punteggi grezzi pre-fusione per audit.
Normalizzazione della query
Passaggi:
- Normalizza Unicode NFKC
- Minuscolo, preservando uno snapshot del casing per formattare la risposta se necessario
- Tokenizza e conserva le stopword, perché gli embedding semantici possono sfruttare il contesto
- Espansione sinonimi / alias: aggiungi token alternativi per mappare codename interni di prodotto, non inseriti nel prompt del modello e usati solo per recupero sparse.
- Estrazione numerica e versione: cattura pattern X.Y.Z per scoring lessicale mirato.
Metadati e filtri attributo
I filtri applicati dopo l’unione iniziale dei candidati minimizzano la perdita di recall. Campi comuni: locale, access_tier, page_type, product_area, updated_bucket. Applica i filtri di sicurezza, tenant / tier, PRIMA della fusione dei punteggi per impedire che leakage influenzi il re-ranking. Fornisci una modalità debug che restituisca l’insieme filtered_out per ispezione.
Strategia di re-ranking
Usa un cross-encoder leggero, modello distillato, sui primi N candidati, 10-20. Se la latenza supera il budget, degrada: salta il re-rank O riduci il numero di candidati aumentando il peso lessicale. Traccia re_rank_delta = MRR_post - MRR_pre per giustificare il costo. Metti in cache i risultati di re-rank per insiemi di unione identici entro un TTL breve.
Freschezza e segnali temporali
Calcola freshness_weight = exp(-lambda * age_days) con lambda tarata per tipo di contenuto, più alta per pricing, più bassa per API stabili. Combina: final_score = w_sem * sem_score + w_lex * lex_score + w_fresh * freshness_weight + w_meta * meta_priors. Normalizza prima ogni componente, z-score o min-max, per evitare dominanza.
Modalità di fallimento
| Fallimento | Causa | Mitigazione |
|---|---|---|
| Bias di popolarità | tf-idf lessicale sovrappesato | Limita il contributo della frequenza dei termini |
| Risultati obsoleti | Peso di freschezza mal tarato | Ricalibra lambda usando il set di valutazione |
| Leakage di locale | Applicazione tardiva dei filtri | Sposta prima i filtri di sicurezza |
| Drift semantico | Upgrade del modello di embedding | Dual-index e confronto A/B prima del rollout |
| Rumore da over-fusion | Dimensione unione non limitata | Limita l’unione, pruning di diversità |
Framework di valutazione
Esperimenti:
- Ablation: misura Recall@k e MRR per vector only, lexical only, hybrid senza rerank, full.
- Tuning pesi di fusione: grid search dei pesi usando un validation gold set.
- Budget di latenza: traccia media + P95 della latenza di recupero per configurazione.
- Drift: monitora il cambiamento relativo settimanale del recall per query head e tail.
Mantieni un manifest di valutazione con hash di configurazione.
Ciclo di ottimizzazione
Ciclo:
- Registra tracce di recupero: query, candidati, punteggi, source_tag.
- Identifica mis-hit, bassa fedeltà a valle o basso conteggio citazioni, e classifica la causa radice: candidato lessicale mancante, falso positivo semantico, contenuto obsoleto.
- Regola pesi / soglie; esegui la suite offline.
- Metti in canary i nuovi pesi di fusione dietro feature flag.
- Promuovi su miglioramento statisticamente significativo.
Punti chiave
- Il recupero ibrido è un sistema di manopole tarabili: strumenta senza sosta.
- Applica presto i filtri di sicurezza e accesso; evita leakage nello scoring.
- Il re-ranking deve giustificare la latenza tramite aumento misurabile di MRR / Recall.
- Il decadimento temporale impedisce a pagine obsolete ma autorevoli di dominare.
- Tratta i cambi di fusione come codice: versiona, valuta, porta avanti o indietro.