IRCNF

Le RAG hybride surpasse la recherche vectorielle pure — ce que disent les données

Partager:
Le RAG hybride surpasse la recherche vectorielle pure — ce que disent les données

La recherche vectorielle pure est le choix par défaut pour la plupart des implémentations RAG — et c'est un problème. La récupération basée sur les embeddings présente un écart de précision bien documenté : elle excelle dans la similarité sémantique mais échoue systématiquement sur les correspondances exactes, les termes rares et les noms propres. Sur les benchmarks standards, la récupération hybride combinant BM25 et embeddings denses surpasse la recherche vectorielle pure de 15 à 40 % selon le dataset et la distribution des requêtes. La plupart des équipes ne mesurent jamais cet écart car elles ne benchmarkent pas d'alternatives. Cet article détaille la mécanique, les chiffres et l'implémentation.

Le piège de la recherche vectorielle

Les embeddings denses fonctionnent en projetant le texte dans un espace vectoriel de haute dimension où les contenus sémantiquement similaires se regroupent. C'est puissant pour la récupération au niveau conceptuel — chercher « déploiement de modèles de Machine Learning » remontera correctement des documents sur le MLOps même s'ils n'utilisent jamais l'expression exacte. Mais cette même propriété devient un handicap pour les requêtes exigeant de la précision.

Imaginons une recherche dans une base de connaissances techniques pour « GPT-4o ». Un modèle d'embedding représente ce Token en fonction de sa distribution d'entraînement — et peut classer des documents sur « GPT-4 », « GPT-4 Turbo » ou des comparaisons générales de modèles OpenAI plus haut qu'un document contenant la chaîne exacte « GPT-4o » mais traitant d'un sujet différent. Le score de similarité de l'embedding n'a aucun concept de la limite entre « GPT-4 » et « GPT-4o ». Le même schéma d'échec apparaît avec les SKU de produits (rechercher « WD-40 » remonte du contenu proche du lubrifiant plutôt que le produit exact), les numéros de version (« Python 3.12 » vs « Python 3.1 »), les citations juridiques et les codes de médicaments.

La cause racine : les embeddings denses sont entraînés sur des motifs de co-occurrence, pas sur l'identité au niveau du caractère. Un terme rare dans le corpus d'entraînement — un nouveau nom de modèle, une méthode API obscure, un nom de personne — obtient un embedding bruité ou générique qui détruit la précision de la récupération. Ce n'est pas un bug du modèle d'embedding, c'est une contrainte architecturale de l'approche.

Comment BM25 comble le fossé

BM25 (Best Match 25) est une fonction de scoring probabiliste basée sur la fréquence des termes qui constitue l'épine dorsale des moteurs de recherche depuis plus de 30 ans. Elle score les documents selon deux facteurs : la Term Frequency (TF) — la fréquence du terme de requête dans un document — et l'Inverse Document Frequency (IDF) — la rareté de ce terme dans l'ensemble du corpus. Les documents contenant des termes de requête rares reçoivent un fort bonus de score ; les termes courants comme « le » ou « est » ne contribuent presque rien.

Pour « GPT-4o », BM25 score presque parfaitement un document contenant « GPT-4o » si le terme est rare dans le corpus (ce qui sera le cas pour la plupart des bases de connaissances d'entreprise). Peu importe la similarité sémantique — ce qui compte c'est l'identité du terme. Cela rend BM25 quasiment imbattable pour les scénarios de correspondance exacte : identifiants de produits, extraits de code, messages d'erreur, clauses juridiques, formules chimiques, et tout domaine où la précision prime sur le rappel.

BM25 gère aussi bien les requêtes multi-termes grâce à la pondération IDF. Dans une requête comme « Python asyncio event loop timeout », BM25 pondère fortement « asyncio » et « timeout » (termes rares) et réduit « Python » (terme courant). La recherche vectorielle, en revanche, mélange tous les termes en un seul embedding et peut perdre le signal des termes rares mais critiques.

Le scoring hybride en pratique

La méthode standard pour combiner les résultats BM25 et vectoriels est le Reciprocal Rank Fusion (RRF). Le RRF prend les listes classées des deux récupérateurs et calcule un score fusionné pour chaque document avec la formule : RRF_score = Σ 1 / (k + rank_i) où k est une constante (généralement 60) et rank_i la position du document dans chaque liste classée. Les documents bien classés dans les deux listes obtiennent les scores fusionnés les plus élevés ; les documents forts dans un seul classeur contribuent mais sont pénalisés.

Le RRF est préféré à l'interpolation linéaire des scores car il évite les problèmes de normalisation — BM25 et la similarité cosinus opèrent sur des échelles différentes, et leur normalisation introduit une complexité de réglage des hyperparamètres. Le RRF est léger en paramètres et robuste quel que soit le type de requête.

Voici une configuration minimale de récupérateur hybride utilisant EnsembleRetriever de LangChain :


from langchain.retrievers import BM25Retriever, EnsembleRetriever
from langchain_community.vectorstores import Chroma
from langchain_openai import OpenAIEmbeddings

# Build BM25 retriever from document list
bm25_retriever = BM25Retriever.from_documents(docs)
bm25_retriever.k = 10

# Build vector retriever
vectorstore = Chroma.from_documents(docs, OpenAIEmbeddings())
vector_retriever = vectorstore.as_retriever(search_kwargs={"k": 10})

# Combine with equal weights (RRF under the hood)
ensemble_retriever = EnsembleRetriever(
    retrievers=[bm25_retriever, vector_retriever],
    weights=[0.5, 0.5]
)

results = ensemble_retriever.invoke("GPT-4o multimodal capabilities")

LlamaIndex offre une fonctionnalité équivalente avec son QueryFusionRetriever en mode mode="reciprocal_rerank". Ces deux abstractions gèrent la fusion RRF en interne, donc le coût d'implémentation est faible une fois que vous avez un pipeline RAG vectoriel fonctionnel.

Chiffres de performance réels

Sur le benchmark de passage ranking MS-MARCO — le dataset de récupération d'information le plus cité avec 8,8 millions de passages — la récupération hybride BM25+dense obtient systématiquement un NDCG@10 10 à 20 % plus élevé que la récupération dense seule. Le benchmark BEIR 2023 (Benchmarking IR) sur 18 datasets hétérogènes a montré qu'aucune méthode de récupération ne domine : les modèles denses gagnent sur les datasets riches sémantiquement comme FEVER et HotpotQA, tandis que BM25 gagne ou fait jeu égal sur les datasets axés sur la correspondance exacte comme DBPedia et Robust04. Les méthodes hybrides, cependant, se classent systématiquement dans le top tier sur les 18 datasets — la seule approche qui évite les échecs catastrophiques sur un type de dataset particulier.

L'étude de benchmark RAG 2025 d'Elastic a évalué la qualité de récupération sur des datasets de tickets de support entreprise et a constaté que la recherche hybride réduisait les échecs de récupération (requêtes ne retournant aucun document pertinent dans le top-5) de 34 % par rapport à la recherche purement sémantique. Les gains étaient particulièrement marqués pour les requêtes courtes et riches en mots-clés — le type de requête qui domine les cas d'usage support et opérationnel.

L'évaluation de la recherche hybride de Pinecone (utilisant leur index sparse-dense combinant vecteurs épars SPLADE avec embeddings denses) a rapporté des améliorations MRR@10 de 18 à 27 % sur des datasets de catalogues produits et de documents juridiques par rapport à la récupération dense seule. Leur conclusion : les gains de la recherche hybride sont les plus importants lorsque le corpus contient à la fois des identifiants structurés et du texte libre — une description qui correspond à la plupart des bases de connaissances d'entreprise.

Quand utiliser chaque mode

La bonne stratégie de récupération dépend du type de requête et des caractéristiques du corpus. Voici un cadre décisionnel pratique :

  • Recherche vectorielle pure : Idéale pour les requêtes sémantiques de niveau conceptuel, la récupération cross-lingue, et les corpus où la paraphrase est fréquente. Cas d'usage : recherche d'articles de recherche, analyse des retours clients, Q&A général sur des documents narratifs.
  • BM25 pur : Idéal pour les requêtes de correspondance exacte sur du contenu structuré ou technique. Cas d'usage : recherche de produits par SKU, recherche de code par nom de fonction, recherche de textes juridiques par numéro de loi, recherche de dossiers médicaux par code diagnostic.
  • Hybride (BM25 + vectoriel) : Le bon choix par défaut pour la plupart des déploiements RAG en entreprise. Cas d'usage : support client (mélange de requêtes mot-clé comme les codes d'erreur et de requêtes sémantiques comme « comment annuler mon abonnement »), bases de connaissances internes, documentation technique, recherche e-commerce, recherche de politiques RH.

Une heuristique pratique : si plus de 20 % de vos requêtes utilisateur contiennent des identifiants, des noms de modèles, des numéros de version ou d'autres termes de correspondance exacte, la recherche hybride surpassera la recherche vectorielle pure. Testez un échantillon de 50 requêtes réelles avec les deux approches et mesurez la précision@5 — la différence est presque toujours visible en moins d'une heure de test.

Checklist d'implémentation

  • Établissez d'abord une base de référence de votre système actuel. Exécutez 50 à 100 requêtes représentatives via votre RAG vectoriel existant et notez manuellement la précision en top-5. Cette base de référence rend l'amélioration apportée par la récupération hybride mesurable plutôt que supposée.
  • Utilisez un index sparse compatible avec votre stack. Elasticsearch et OpenSearch ont un BM25 natif ; Pinecone supporte sparse-dense ; Weaviate dispose de BM25F ; Qdrant supporte les vecteurs épars. Choisissez l'option qui évite d'ajouter un service de recherche séparé.
  • Ajustez k dans RRF sur un ensemble de requêtes de validation. La valeur par défaut k=60 est robuste mais pas toujours optimale. Une recherche par grille sur k=20, 40, 60, 80 avec 50 requêtes étiquetées prend généralement moins d'une heure.
  • Maintenez les index BM25 et vectoriel synchronisés. Les deux index doivent être mis à jour lors de l'ajout, de la suppression ou de la modification d'un document. Des mises à jour manquantes dans un seul index dégradent silencieusement la qualité de la fusion. Utilisez un pipeline d'ingestion unifié qui écrit sur les deux.
  • Envisagez l'expansion de requête pour BM25. Générer 2 à 3 variantes de requête avec un LLM avant la récupération BM25 (pattern HyDE) améliore considérablement le rappel pour les requêtes conversationnelles que les utilisateurs formulent sous forme de questions plutôt que de mots-clés.
  • Surveillez la qualité de récupération par requête en production. Enregistrez quel récupérateur (BM25 ou vectoriel) a contribué aux documents finaux les mieux classés. Si un classeur domine systématiquement pour certains types de requêtes, ajustez les poids ou acheminez les types de requêtes vers des récupérateurs spécialisés.

Ce qu'il faut retenir

La plupart des équipes qui construisent des systèmes RAG choisissent par défaut la récupération vectorielle pure sans jamais exécuter de benchmark contrôlé. Ajouter BM25 à un pipeline RAG vectoriel existant — avec EnsembleRetriever de LangChain ou QueryFusionRetriever de LlamaIndex — est une tâche d'implémentation d'une journée. Les gains de performance sur la plupart des datasets d'entreprise ne sont pas marginaux : une amélioration de 15 à 40 % de la précision de récupération se traduit directement par moins d'hallucinations, moins de recours du LLM à « Je ne sais pas », et des scores de satisfaction utilisateur plus élevés. Les données sont cohérentes sur MS-MARCO, BEIR et les benchmarks industriels : la récupération hybride n'est pas une optimisation — c'est la base de référence à laquelle tout RAG vectoriel pur devrait être mesuré.

Partager:
Le RAG hybride surpasse la recherche vectorielle pure — ce que disent les données | IRCNF - Intelligent Reliable Custom Next-gen Frameworks