Reranking
iaDéfinition
Le Reranking est une etape cruciale d'optimisation dans les pipelines RAG qui ameliore la qualite du retrieval en reclassant les chunks initialement recuperes par un modele de scoring plus precis. La ou le retrieval initial utilise des embeddings bi-encoder (rapide, scalable mais moins precis), le reranking utilise un cross-encoder (lent, precis) pour evaluer la pertinence. Le pipeline two-stage : (1) Fast Retrieval — recuperer les top-50 ou top-100 chunks via embeddings vectoriels ou BM25. (2) Reranking — un cross-encoder evalue chaque paire (requete, chunk) en les traitant conjointement via l'attention complete, produisant un score de pertinence precis. (3) Top-k — les k chunks avec les meilleurs scores sont passes au LLM. La difference fondamentale entre bi-encoder et cross-encoder : le bi-encoder encode requete et document separement (pas d'interaction directe entre eux, necessaire pour la scalabilite). Le cross-encoder encode la paire ensemble via le Self-Attention, permettant aux tokens de la requete de 'voir' directement les tokens du document. Des modeles de reranking populaires : Cohere Rerank (API commerciale), bge-reranker-v2-m3 (BAAI, multilingue excellent), Jina Reranker v2, et ms-marco-MiniLM-L-6-v2 (small, rapide). Ces modeles sont entraines specifiquement pour le passage ranking. Pour les systemes RAG enterprise, l'ajout du reranking apres un retrieval top-50 est l'une des ameliorations les plus impactantes : +10-20% de precision sur les benchmarks RAG comme RAGAS ou BEIR, pour +50-200ms de latence supplementaire.
Implementation reranking
from sentence_transformers import CrossEncoder
reranker = CrossEncoder('BAAI/bge-reranker-v2-m3', max_length=1024)
def rerank_chunks(query, chunks, top_k=4):
pairs = [(query, chunk.page_content) for chunk in chunks]
scores = reranker.predict(pairs)
ranked = sorted(zip(scores, chunks), key=lambda x: x[0], reverse=True)
return [chunk for _, chunk in ranked[:top_k]]
# Pipeline complet avec reranking
initial_chunks = retriever.invoke(query, k=50) # Retrieval large
final_chunks = rerank_chunks(query, initial_chunks, top_k=4) # Reranking precisAvec Cohere Rerank (API)
import cohere
co = cohere.Client('YOUR_API_KEY')
results = co.rerank(
query=question,
documents=[c.page_content for c in initial_chunks],
top_n=5,
model='rerank-multilingual-v3.0' # Support francais natif
)
reranked_docs = [initial_chunks[r.index] for r in results.results]Impact sur les benchmarks RAG
Sur BEIR, bge-reranker-v2-m3 ameliore le NDCG@10 de +8 a +15 points vs retrieval vectoriel seul. ROI tres favorable : +50-200ms de latence, +10-20% de qualite.
Articles liés
Expert en cybersécurité offensive et intelligence artificielle. Pentest, audit et développement IA sur-mesure.
Services
- Audit Infrastructure
- Audit Kubernetes
- Audit Microsoft 365
- Audit Sécurité Réseau
- Analyse de Risques
- Audit Active Directory
- Audit Application Web
- Audit Cloud (AWS/Azure/GCP)
- Audit Messagerie
- Audit API (OWASP Top 10)
- Audit DevSecOps & CI/CD
- Audit Code Source (SAST)
- Audit Postes de Travail
- Audit Sauvegarde & Résilience
- Audit OT/SCADA (IEC 62443)
- Développement IA
- Formations
Ressources
Projets & Outils
© 2026 Ayi NEDJIMI Consultants. Tous droits réservés. 2.1.7
Un projet cybersécurité ?
Expert dispo · Réponse 24h