Polydesk-logotype
Polydesk.ai — Header

Reranking (Reclassement)

Le reranking est une étape de post-traitement dans un pipeline de recherche d’information qui reclasse les résultats initiaux d’un retriever en utilisant un modèle plus précis, typiquement un cross-encoder, pour améliorer la pertinence du classement final.

Le problème est simple : votre recherche vectorielle ou votre hybrid search renvoie 50 candidats, mais le classement n’est pas optimal. Des documents vaguement liés se retrouvent avant des documents très pertinents parce que les embeddings compressent le sens en un seul vecteur, ce qui cause inévitablement une perte d’information. Le reranker corrige ce problème en analysant chaque paire requête-document de façon beaucoup plus fine. C’est la différence entre un tri approximatif rapide et un tri précis lent. Le pipeline à deux étages (retrieval rapide → reranking précis) combine le meilleur des deux.

Reranking en bref
Catégorie
Information Retrieval / Post-traitement
Principe
Reclasser les top-k résultats d’un retriever avec un modèle plus précis
Modèle standard
Cross-encoder (encode requête + document ensemble)
Modèles populaires
Cohere Rerank 4, Jina Reranker v3, BGE Reranker, ms-marco-MiniLM, FlashRank, ColBERT
Gain typique
+20-40% de précision sur les top résultats par rapport au retrieval seul
Cas d’usage
RAG, moteurs de recherche, e-commerce, recherche documentaire

Pourquoi le reranking est nécessaire

Le problème du bi-encoder

Les systèmes de recherche vectorielle utilisent des bi-encoders pour encoder séparément la requête et les documents en vecteurs. C’est rapide : les documents sont pré-encodés une seule fois, et seule la requête doit être encodée à chaque recherche. Mais cette vitesse a un coût. Compresser tout le sens d’un document de 500 mots en un seul vecteur de 768 ou 1024 dimensions implique une perte d’information significative.

Concrètement, un bi-encoder ne voit jamais la requête et le document en même temps. Il produit un vecteur « générique » du document qui doit fonctionner pour toutes les requêtes possibles. C’est un compromis raisonnable pour chercher parmi des millions de documents en quelques millisecondes, mais insuffisant pour un classement précis des top résultats.

Des études empiriques montrent que les bi-encoders atteignent typiquement 65 à 80% de précision sur les requêtes complexes. Cela signifie que 20 à 35% de l’information envoyée au LLM dans un pipeline RAG est bruitée ou non pertinente. Le reranking corrige ce problème en poussant la précision à 85-90% sur les top résultats.

L’avantage du cross-encoder

Un cross-encoder fonctionne différemment. Il prend la requête et le document concaténés en entrée et les traite ensemble dans un Transformer. Chaque token de la requête peut « voir » chaque token du document via le mécanisme d’attention. Le modèle produit un score de pertinence unique entre 0 et 1.

Cette architecture capture des relations sémantiques fines que le bi-encoder rate. Par exemple, si la requête est « impact du recycling sur la réduction des risques sanitaires », un bi-encoder peut renvoyer des documents sur le recyclage en général. Un cross-encoder comprend le lien causal entre « recyclage » et « réduction des risques sanitaires » et classe mieux les documents qui traitent spécifiquement de cette relation.

Le revers : un cross-encoder doit évaluer chaque paire requête-document séparément. Pour 50 candidats, c’est 50 passages dans le modèle. C’est beaucoup trop lent pour chercher dans des millions de documents, mais parfaitement faisable sur un ensemble de 20 à 100 candidats pré-filtrés. D’où le pipeline à deux étages.


Le pipeline à deux étages : retrieval + reranking

C’est l’architecture standard de tout système de recherche sérieux en production. Deux étapes complémentaires, chacune optimisée pour un objectif différent.

Étage 1 : Retrieval (rapide, large)

Un bi-encoder ou un hybrid search (BM25 + vecteurs) récupère rapidement les top 50 à 100 candidats parmi des millions de documents. L’objectif est le recall : ne pas rater de documents pertinents. La vitesse est critique, typiquement moins de 50 ms.

Étage 2 : Reranking (lent, précis)

Un cross-encoder ou un modèle de reranking évalue chaque candidat par rapport à la requête et produit un nouveau classement. L’objectif est la precision : s’assurer que les top 3-5 résultats sont les plus pertinents. La latence est de l’ordre de quelques centaines de millisecondes pour 50 candidats.

Ce pattern existe depuis longtemps en search engineering, bien avant les LLM. Google l’utilise depuis des années (retrieval rapide puis re-scoring fin). Son adoption massive dans les pipelines RAG est la tendance marquante de ces dernières années.

Règle pratique : retrieve 50-100, rerank vers 5-10 Récupérez suffisamment de candidats pour maximiser le recall (50 à 100), puis laissez le reranker sélectionner les 5 à 10 plus pertinents. En dessous de 20 candidats, vous risquez de rater des documents pertinents que le bi-encoder a mal classés. Au-dessus de 100, la latence du cross-encoder augmente linéairement sans gain marginal significatif en recall.

Les différents types de rerankers

Cross-encoders

Le type le plus courant. Le cross-encoder encode la requête et le document ensemble dans un Transformer et produit un score de pertinence. Le modèle open source le plus utilisé est cross-encoder/ms-marco-MiniLM-L-6-v2 de Sentence Transformers, entraîné sur le dataset MS MARCO de Bing. Il est léger (environ 22M de paramètres), rapide sur CPU, et offre un bon rapport qualité-latence pour la plupart des cas d’usage.

Les modèles BGE Reranker (de BAAI) sont aussi très populaires en open source, avec des variantes de tailles différentes. bge-reranker-v2-m3 est le modèle recommandé pour un usage multilingue.

Late interaction (ColBERT)

ColBERT (Contextualized Late Interaction over BERT) représente un compromis entre bi-encoder et cross-encoder. Il encode séparément la requête et le document en matrices de vecteurs au niveau des tokens (pas un seul vecteur), puis calcule la similarité via une opération MaxSim entre chaque token de la requête et chaque token du document. L’avantage : les embeddings de documents peuvent être pré-calculés, ce qui rend ColBERT beaucoup plus rapide qu’un cross-encoder classique tout en capturant des interactions fines.

Jina ColBERT v2 est la version multillingue la plus récente, supportant 89 langues avec des contextes jusqu’à 8192 tokens. Jina Reranker v3 pousse le concept plus loin avec son architecture « last but not late interaction » (LBNL) qui traite requête et documents dans la même fenêtre de contexte.

LLM-based rerankers (RankGPT)

Une approche plus récente consiste à utiliser un LLM pour classer les documents. RankGPT utilise GPT-4 (ou un autre LLM) pour évaluer et classer une liste de documents par pertinence. L’avantage est un excellent zero-shot performance : pas besoin de modèle spécialisé. L’inconvénient : c’est nettement plus lent et plus coûteux qu’un cross-encoder dédié. Google Vertex AI RAG Engine permet aussi d’utiliser Gemini comme reranker via son API.

RankZephyr est une alternative open source basée sur Mistral-7B, fine-tuné pour le reranking par distillation de RankGPT. Il offre un bon compromis entre la qualité d’un LLM reranker et le coût d’un modèle plus petit.

FlashRank (léger et rapide)

FlashRank est une bibliothèque Python optimisée pour le reranking rapide sur CPU, utilisant des modèles ONNX compacts. Elle est conçue pour les cas où la latence est critique et les ressources GPU limitées. Le gain de pertinence est moindre qu’un gros cross-encoder, mais significatif par rapport à l’absence de reranking. C’est l’option « mieux que rien » la plus simple à déployer.


Les modèles de reranking en production

Modèle Type Accès Points forts
Cohere Rerank 4 Pro Cross-encoder (API) API managée État de l’art, 100+ langues, contexte 32K, self-learning, variante Fast pour la latence
Cohere Rerank 4 Fast Cross-encoder (API) API managée Optimisé vitesse, bon compromis coût-qualité pour e-commerce et support
Jina Reranker v3 LBNL (late interaction avancé) API + open source (0,6B params) BEIR SOTA (61,94 nDCG@10), listwise, multilingue, compact
Jina ColBERT v2 Late interaction (ColBERT) API + open source 89 langues, 8192 tokens, embeddings pré-calculables, bon pour les longs documents
BGE Reranker v2-m3 Cross-encoder (open source) HuggingFace Multilingue, léger, gratuit, bonne intégration LangChain/LlamaIndex
ms-marco-MiniLM-L-6-v2 Cross-encoder (open source) HuggingFace ~22M params, très rapide sur CPU, baseline fiable, entraîné sur MS MARCO
FlashRank Cross-encoder ONNX Bibliothèque Python Ultra-rapide, CPU-only, minimal overhead, bon « mieux que rien »
RankZephyr LLM listwise (7B) Open source Zero-shot, distillé de RankGPT, pas besoin de données annotées
Cohere Rerank 4 : le nouveau standard commercial Lancé en décembre 2025, Cohere Rerank 4 introduit un contexte de 32K tokens (4x plus que la v3.5) et une capacité de self-learning : le modèle s’adapte à votre domaine sans données annotées supplémentaires. La variante Fast offre des performances proches de Pro avec une latence nettement réduite. C’est le choix par défaut si vous optez pour une API managée.

Implémenter le reranking : exemples concrets

Avec un cross-encoder open source (Python)

from sentence_transformers import SentenceTransformer, CrossEncoder, util

# 1. Retrieval initial avec un bi-encoder
bi_encoder = SentenceTransformer('all-MiniLM-L6-v2')
corpus = [
    "Guide pour protéger vos plantes du gel hivernal",
    "Recette de confiture de fraises maison",
    "Comment isoler votre jardin contre le froid",
    "Les meilleures variétés de tomates résistantes",
    "Protéger les cultures sensibles au gel : méthodes",
]
corpus_embeddings = bi_encoder.encode(corpus, convert_to_tensor=True)

query = "protéger mon jardin du gel"
query_embedding = bi_encoder.encode(query, convert_to_tensor=True)

# Top-5 par recherche vectorielle
hits = util.semantic_search(query_embedding, corpus_embeddings, top_k=5)[0]

# 2. Reranking avec un cross-encoder
cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
rerank_pairs = [(query, corpus[hit['corpus_id']]) for hit in hits]
rerank_scores = cross_encoder.predict(rerank_pairs)

# 3. Trier par score du cross-encoder
results = sorted(
    zip(rerank_scores, [corpus[h['corpus_id']] for h in hits]),
    reverse=True
)
for score, doc in results:
    print(f"Score: {score:.3f} | {doc}")

Ce code illustre le pattern complet : le bi-encoder récupère rapidement les candidats, puis le cross-encoder les reclasse avec une bien meilleure précision. En production, remplacez le bi-encoder par un hybrid search (BM25 + vecteurs) pour un recall encore meilleur.

Avec Cohere Rerank (API)

import cohere

co = cohere.Client("YOUR_API_KEY")

query = "protéger mon jardin du gel"
documents = [
    "Guide pour protéger vos plantes du gel hivernal",
    "Recette de confiture de fraises maison",
    "Comment isoler votre jardin contre le froid",
]

results = co.rerank(
    model="rerank-v3.5",  # ou rerank-v4-pro quand disponible
    query=query,
    documents=documents,
    top_n=3
)

for result in results.results:
    print(f"Index: {result.index} | Score: {result.relevance_score:.3f}")
    print(f"  {documents[result.index]}")

Avec LangChain (intégration pipeline RAG)

from langchain.retrievers import ContextualCompressionRetriever
from langchain.retrievers.document_compressors import FlashrankRerank
from langchain_community.vectorstores import Chroma

# Retriever initial (vectorstore)
vectorstore = Chroma.from_documents(documents, embeddings)
base_retriever = vectorstore.as_retriever(search_kwargs={"k": 20})

# Ajouter le reranking avec FlashRank
compressor = FlashrankRerank(top_n=5)
reranking_retriever = ContextualCompressionRetriever(
    base_compressor=compressor,
    base_retriever=base_retriever
)

# Utilisation
docs = reranking_retriever.invoke("protéger mon jardin du gel")
# Retourne les 5 documents les plus pertinents après reranking

LangChain et LlamaIndex offrent des abstractions qui rendent le reranking trivial à intégrer dans un pipeline RAG existant. ContextualCompressionRetriever wrappe n’importe quel retriever et ajoute un reranker transparent.


Bonnes pratiques du reranking

Récupérez large, rerankez serré. Réglez votre retriever pour renvoyer 50 à 100 candidats, puis laissez le reranker sélectionner les 5 à 10 meilleurs. Plus vous donnez de candidats au reranker, plus il a de chances de trouver les documents réellement pertinents que le bi-encoder a mal classés.

Le reranking ne compense pas un mauvais retrieval. Si vos documents pertinents ne sont pas dans les 100 premiers candidats du retriever, le reranker ne peut rien y faire. Optimisez d’abord votre retrieval (hybrid search, chunking, modèle d’embedding adapté) avant d’ajouter un reranker.

Mesurez l’impact. Comparez les métriques avant et après reranking sur un jeu de test : precision@k, NDCG@10, MRR. Le gain doit justifier la latence supplémentaire. Sur la majorité des datasets, le reranking améliore le NDCG@10 de 20 à 40%.

Batch processing pour la performance. Envoyez toutes les paires requête-document en un seul batch au cross-encoder plutôt qu’une par une. Cela améliore significativement l’utilisation GPU et réduit la latence totale.

Choix du modèle selon vos contraintes. GPU disponible et budget API ? Cohere Rerank 4 ou Jina Reranker v3 via API. CPU-only avec latence serrée ? FlashRank ou ms-marco-MiniLM. Corpus multilingue ? BGE Reranker v2-m3 ou Jina ColBERT v2. Pipeline RAG simple ? ms-marco-MiniLM est le baseline le plus solide.

Attention à la latence en production Un cross-encoder typique ajoute 5 à 10 ms par paire requête-document sur GPU, et 20 à 50 ms sur CPU. Pour 50 candidats sur CPU, comptez 1 à 2,5 secondes de latence supplémentaire. En mode batch sur GPU, c’est ramené à 100 à 300 ms pour 50 candidats. Si votre contrainte de latence est stricte (sous 200 ms au total), considérez FlashRank ou limitez le nombre de candidats à reranker.

Reranking vs autres approches d’amélioration

Le reranking n’est pas la seule façon d’améliorer la qualité du retrieval. Voici comment il se compare aux alternatives.

Reranking vs meilleur modèle d’embedding : Un modèle d’embedding plus puissant (passer de MiniLM à text-embedding-3-large) améliore le retrieval initial mais ne remplace pas le reranking. Le cross-encoder capture des interactions que même le meilleur bi-encoder ne peut pas modéliser. Les deux sont complémentaires.

Reranking vs hybrid search : Le hybrid search améliore le recall (trouver plus de documents pertinents dans les candidats). Le reranking améliore la precision (classer les candidats par ordre de pertinence). Les deux sont des étapes différentes du pipeline et s’additionnent. Le pipeline optimal est : hybrid search → reranking.

Reranking vs fine-tuning de l’embedding : Fine-tuner votre modèle d’embedding sur votre domaine améliore à la fois recall et precision du retrieval initial. C’est plus complexe à mettre en place mais peut réduire la dépendance au reranking. En pratique, les deux se combinent bien : un embedding fine-tuné + un reranker donne les meilleurs résultats.


Verdict

Le reranking est le levier d’amélioration le plus simple et le plus efficace pour tout pipeline de recherche ou de RAG. Si vous n’utilisez pas de reranker aujourd’hui, c’est probablement la prochaine étape qui vous donnera le meilleur ROI en qualité de résultats. L’ajout d’un cross-encoder open source comme ms-marco-MiniLM prend quelques lignes de code et améliore la précision des top résultats de 20 à 40% en moyenne.

Pour la production à grande échelle, Cohere Rerank 4 est le choix le plus complet (performance, multilingue, self-learning, contexte 32K). Pour le self-hosted, BGE Reranker v2-m3 ou Jina Reranker v3 offrent un excellent rapport qualité-coût. Pour le prototypage rapide, FlashRank ou ms-marco-MiniLM suffisent largement.

Le pipeline standard en 2026 est clair : hybrid search (BM25 + vecteurs) → fusion RRF → reranking cross-encoder → top résultats vers le LLM. Chaque étape apporte une amélioration mesurable, et le reranking est celle qui a le meilleur ratio effort/gain.


Questions fréquentes sur le reranking

Quelle est la différence entre un reranker et un retriever ?

Le retriever (bi-encoder, BM25, hybrid search) est conçu pour chercher rapidement parmi des millions de documents et renvoyer un ensemble de candidats. Il privilégie la vitesse et le recall. Le reranker (typiquement un cross-encoder) est conçu pour reclasser un petit ensemble de candidats (20 à 100) avec une précision maximale. Il prend en entrée chaque paire requête-document et produit un score de pertinence fin. Les deux sont complémentaires : le retriever élargit le filet, le reranker affine le tri.

Combien de candidats faut-il passer au reranker ?

La fourchette recommandée est de 20 à 100 candidats. En dessous de 20, vous risquez de ne pas inclure des documents pertinents que le retriever a mal classés. Au-dessus de 100, la latence du cross-encoder augmente linéairement (environ 5-10 ms par paire sur GPU) sans gain marginal significatif. Pour la majorité des cas d’usage RAG, 50 candidats rerankés vers les top 5-10 est le sweet spot. Ajustez selon vos contraintes de latence et la complexité de vos requêtes.

Quel modèle de reranking choisir pour débuter ?

Pour un premier déploiement, commencez avec cross-encoder/ms-marco-MiniLM-L-6-v2 (open source, gratuit, ~22M params, rapide sur CPU). Il donne de bons résultats sur la majorité des corpus anglophones. Pour un corpus multilingue ou français, préférez bge-reranker-v2-m3 de BAAI. Si le budget le permet et que vous voulez le meilleur résultat possible, Cohere Rerank 4 via API est l’état de l’art commercial. FlashRank est le choix minimal si vous avez des contraintes fortes de latence ou de ressources.

Le reranking ralentit-il significativement le pipeline RAG ?

Oui, c’est un compromis latence-qualité. Sur GPU, un cross-encoder comme ms-marco-MiniLM traite 50 candidats en 100 à 300 ms en batch. Sur CPU, comptez 1 à 2,5 secondes pour 50 candidats. Les API comme Cohere Rerank ajoutent typiquement 200 à 500 ms de latence réseau incluse. Pour les applications temps réel, FlashRank réduit cette latence à quelques dizaines de millisecondes. Le gain en qualité (20-40% de NDCG) justifie cette latence dans la majorité des cas, mais évaluez le compromis sur votre cas d’usage.

Peut-on utiliser un LLM comme reranker à la place d’un cross-encoder ?

Oui, c’est l’approche RankGPT. Un LLM comme GPT-4 ou Gemini évalue et classe les documents par pertinence. L’avantage : excellent en zero-shot, sans entraînement spécifique. Les inconvénients : latence élevée (plusieurs secondes), coût significatif (appels API LLM pour chaque requête), et résultats parfois instables (le classement peut varier entre appels identiques). En pratique, un cross-encoder dédié comme Cohere Rerank 4 ou BGE Reranker offre un meilleur rapport qualité-coût-latence pour la majorité des cas. Les LLM rerankers sont intéressants quand vous avez besoin de zero-shot sur des domaines très spécifiques sans données d’entraînement.

Polydesk.ai — Footer