La recherche par modalité unique échoue dans les cas limites : les vecteurs denses manquent les tokens rares et les ID ; la recherche purement lexicale manque les paraphrases et la similarité sémantique. La recherche hybride fusionne des signaux complémentaires — sémantique dense, lexical clairsemé, métadonnées structurées, fraîcheur temporelle — pour produire des ensembles de candidats stables et de haute précision. Cet article détaille l’architecture, la normalisation, la fusion des scores, la gestion des défaillances et l’évaluation.
Motivation
Scénarios de défaillance :
- Noms propres / codes SKU manqués par le modèle dense.
- Requêtes sur les changements de prix qui remontent un instantané périmé faute de boost temporel.
- Longues questions en langage naturel surpondérées sur les mots vides dans un système purement clairsemé.
- Faux positifs vectoriels sur des pages sémantiquement larges (remplissage marketing) sans ancrage lexical.
L’approche hybride atténue cela en capturant des dimensions de preuve orthogonales.
Couches de composants
Flux recommandé :
- Plongement de la requête → recherche ANN (k_vec)
- Recherche lexicale (BM25 / SPLADE / Elasticsearch) (k_lex)
- Union → normalisation des scores (mise à l’échelle par source)
- Passe de filtrage par métadonnées (locale, access_tier, page_type)
- Ajustements de diversité et de fraîcheur
- Ré-ordonnanceur croisé/mono optionnel
- Troncature finale (top K)
Conservez les scores bruts d’avant-fusion pour l’audit.
Normalisation de la requête
Étapes :
- Normalisation Unicode NFKC
- Mise en minuscules (conservez un instantané de la casse pour le formatage de la réponse si nécessaire)
- Tokeniser et conserver les mots vides (les plongements sémantiques peuvent exploiter le contexte)
- Expansion des synonymes / alias : ajoutez des tokens alternatifs pour la correspondance des noms de code internes des produits (non insérés dans le prompt du modèle ; utilisés uniquement pour la recherche clairsemée).
- Extraction des nombres et des versions : capturez les motifs X.Y.Z pour un scoring lexical ciblé.
Filtres de métadonnées et d’attributs
Les filtres appliqués après l’union initiale des candidats minimisent la perte de rappel. Champs courants : locale, access_tier, page_type, product_area, updated_bucket. Appliquez les filtres de sécurité (tenant / tier) AVANT la fusion des scores pour empêcher les fuites d’influencer le ré-ordonnancement. Proposez un mode de débogage renvoyant l’ensemble filtered_out à des fins d’inspection.
Stratégie de ré-ordonnancement
Utilisez un cross-encoder léger (modèle distillé) sur les N premiers (10–20). Si la latence > budget, dégradez : sautez le ré-ordonnancement OU réduisez le nombre de candidats en augmentant le poids lexical. Suivez re_rank_delta = MRR_post - MRR_pre pour justifier le coût. Mettez en cache les résultats du ré-ordonnancement pour des ensembles d’union identiques dans un TTL court.
Fraîcheur et signaux temporels
Calculez freshness_weight = exp(-lambda * age_days) où lambda est ajusté par type de contenu (plus élevé pour les prix, plus bas pour une API stable). Combinez : final_score = w_sem * sem_score + w_lex * lex_score + w_fresh * freshness_weight + w_meta * meta_priors. Normalisez d’abord chaque composant (z-score ou min-max) pour éviter qu’un seul ne domine.
Modes de défaillance
| Défaillance | Cause | Atténuation |
|---|---|---|
| Biais de popularité | Surpondération du tf-idf lexical | Plafonner la contribution de la fréquence des termes |
| Résultats périmés | Poids de fraîcheur mal réglé | Recalibrer lambda à l’aide d’un jeu d’évaluation |
| Fuite de locale | Application tardive du filtre | Déplacer les filtres de sécurité plus tôt |
| Dérive sémantique | Mise à niveau du modèle de plongement | Double indexation et comparaison A/B avant le déploiement |
| Bruit de sur-fusion | Taille d’union non bornée | Limiter l’union, élagage par diversité |
Cadre d’évaluation
Expériences :
- Ablation : (vectoriel seul, lexical seul, hybride sans ré-ordonnancement, complet) mesure Recall@k, MRR.
- Réglage des poids de fusion : recherche en grille des poids à l’aide d’un jeu de référence de validation.
- Budget de latence : suivez la latence de recherche moyenne + P95 par configuration.
- Dérive : surveillez la variation relative hebdomadaire du rappel pour les requêtes fréquentes par rapport à la longue traîne.
Maintenez un manifeste d’évaluation avec des hachages de configuration.
Boucle d’optimisation
Cycle :
- Journalisez les traces de recherche (query, candidates, scores, source_tag).
- Identifiez les échecs (faible fidélité en aval ou faible nombre de citations) → classez la cause racine (candidat lexical manquant, faux positif sémantique, contenu périmé).
- Ajustez les poids / seuils ; exécutez la suite hors ligne.
- Déployez en canari les nouveaux poids de fusion derrière un feature flag.
- Promouvez en cas d’amélioration statistiquement significative.
Points clés à retenir
- La recherche hybride est un système de cadrans réglables ; instrumentez sans relâche.
- Appliquez tôt les filtres de sécurité et d’accès ; évitez les fuites dans le scoring.
- Le ré-ordonnancement doit justifier la latence par un gain mesurable de MRR / Recall.
- La décroissance temporelle empêche les pages périmées à forte autorité de dominer.
- Traitez les changements de fusion comme du code : versionnez, évaluez, avancez ou revenez en arrière.