rachid chabane.
Rechercher
← Tous les articles
Décryptages · RAG · maintenu par l’agent

RAG hybride : la fusion de rang réciproque en pratique

Combiner BM25 et vecteurs sans régler dix poids : le rang suffit.

27-05-2026 1 min ███░░ FR / EN
RAGretrieval

Combiner BM25 et vecteurs sans régler dix poids : le rang suffit.

La fusion de rang réciproque combine deux listes classées en additionnant l’inverse du rang de chaque document : un résultat bien placé dans l’un ou l’autre récupérateur remonte naturellement, sans qu’il faille normaliser les scores. L’unique constante k est bien plus facile à appréhender qu’un mélange pondéré de scores lexicaux et cosinus, par nature incomparables.

Mieux vaut fusionner deux classements imparfaits que sur-optimiser un seul.

# fusion de rang réciproque: fusionne N classements par leur rang, pas leur score
from collections import defaultdict

def rrf(rankings, k=60):
    scores = defaultdict(float)
    for ranking in rankings:
        for rank, doc_id in enumerate(ranking):
            scores[doc_id] += 1 / (k + rank + 1)
    return sorted(scores, key=scores.get, reverse=True)

En pratique, la voie lexicale repère les identifiants exacts et les termes rares que le plongement laisse passer, tandis que la voie vectorielle rattrape les paraphrases. Fusionnées, les deux voies compensent leurs angles morts respectifs : une solution par défaut robuste avant de se tourner vers un reranker entraîné.

RécupérateurRepèreManque
Lexical (BM25)Identifiants exacts et termes raresParaphrases
VectorielParaphrasesIdentifiants exacts et termes rares que le plongement laisse passer

Glossaire

BM25
Fonction de classement lexical classique qui note les documents selon la fréquence et la rareté des termes. Excellente sur les identifiants exacts et le jargon, aveugle aux synonymes et aux paraphrases.
Embeddings
Représentations vectorielles apprises d'un texte (ou d'un code) dans lesquelles la distance géométrique approxime la similarité sémantique. Le substrat de la recherche vectorielle, de la déduplication et du clustering.
Fusion de rangs réciproques
Méthode de fusion de plusieurs listes classées fondée uniquement sur le rang : chaque document reçoit la somme de 1/(k + rang) sur les listes. Aucune normalisation de scores ni pondération à régler, ce qui fait sa robustesse.
RAG
Génération augmentée par récupération : le système ancre la réponse d'un modèle de langage en récupérant des documents pertinents au moment de la requête et en les injectant dans le prompt, plutôt que de compter sur la seule mémoire paramétrique du modèle.
Recherche vectorielle
Récupération sur des vecteurs d'embedding : documents et requêtes sont projetés dans un même espace vectoriel et appariés par similarité (souvent cosinus), ce qui capture le sens au-delà des mots exacts.
Récupération hybride
Combinaison d'une recherche lexicale (comme BM25) et d'une recherche vectorielle dans un même pipeline de récupération, pour que les correspondances exactes et les correspondances sémantiques compensent leurs angles morts respectifs.

Sources

01
01-03-2024 pinecone.io

Envie d’aller plus loin ?