Pourquoi un reranker ?
Le retrieval par embeddings (bi-encoder) est rapide mais approximatif. Un reranker (cross-encoder) analyse chaque paire query-document en profondeur pour réordonner les résultats par pertinence réelle. C'est un second filtre qui améliore significativement la précision.
Architecture à deux étapes
Query → Retrieval (top-k=20, rapide) → Reranking (top-n=5, précis) → LLM- Étape 1 : Récupérer un ensemble large de candidats (20-100 documents)
- Étape 2 : Le reranker score chaque document individuellement et retourne les top-n
Options de rerankers
Cohere Rerank
import cohere
co = cohere.Client("API_KEY")
results = co.rerank(
query="Comment fonctionne le RAG ?",
documents=retrieved_docs,
top_n=5,
model="rerank-multilingual-v3.0"
)- API managée, pas d'infra à gérer
- Excellent en multilingue dont le français
- Coût : $2 / 1000 recherches
BGE-Reranker-v2-m3
- Open source (BAAI), self-hostable
- Multilingue, performant sur le français
- Peut tourner sur CPU (lent) ou GPU (rapide)
from FlagEmbedding import FlagReranker
reranker = FlagReranker('BAAI/bge-reranker-v2-m3')
scores = reranker.compute_score([
[query, doc] for doc in retrieved_docs
])Cross-encoder avec sentence-transformers
from sentence_transformers import CrossEncoder
model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-12-v2')
scores = model.predict([(query, doc) for doc in docs])Intégration avec LangChain
from langchain.retrievers import ContextualCompressionRetriever
from langchain_cohere import CohereRerank
compressor = CohereRerank(top_n=5)
retriever = ContextualCompressionRetriever(
base_compressor=compressor,
base_retriever=vector_retriever
)Impact mesuré
- Amélioration typique du recall@5 : +15-30%
- Réduction des hallucinations grâce à des documents plus pertinents
- Compromis latence : +100-300ms par requête
Bonnes pratiques
- Récupérer large (top-20 à top-50) avant de reranker
- Utiliser le reranker en production, pas juste en dev
- Monitorer le score de confiance du reranker pour détecter les queries hors domaine
- Comparer régulièrement avec et sans reranker sur votre dataset d'évaluation