Réclassement Cross-Encoder pour la Précision RAG
Atteindre 95%+ de précision : utilisez des cross-encoders pour réclasser les documents récupérés et éliminer les faux positifs.
Pourquoi les cross-encoders ?
Les bi-encodeurs (embeddings standards) encodent la requête et le document séparément. Les cross-encoders les traitent ensemble - beaucoup plus précis mais plus lent.
Bi-encodeur : sim(encode(query), encode(doc))
Cross-encodeur : score(query + doc ensemble)
Implémentation
DEVELOPERpythonfrom sentence_transformers import CrossEncoder model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2') def rerank(query, documents, top_k=5): # Créer des paires requête-document pairs = [[query, doc] for doc in documents] # Scorer toutes les paires scores = model.predict(pairs) # Trier par score ranked = sorted(zip(documents, scores), key=lambda x: x[1], reverse=True) return [doc for doc, score in ranked[:top_k]] # Utilisation initial_results = vector_search(query, k=100) final_results = rerank(query, initial_results, top_k=10)
Meilleurs modèles (Novembre 2025)
1. ms-marco-MiniLM-L-12-v2
- Rapide, précis
- Meilleur pour usage général
2. bge-reranker-v2-m3
- Multilingue
- Précision à l'état de l'art
3. jina-reranker-v2-base-multilingual
- 89 langues
- Prêt pour la production
Récupération à deux étapes
DEVELOPERpythondef two_stage_rag(query, vector_db): # Étape 1 : Récupération rapide avec bi-encodeur (100 candidats) candidates = vector_db.search( query_embedding=embed(query), k=100 ) # Étape 2 : Reranking lent mais précis avec cross-encodeur cross_encoder = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-12-v2') pairs = [[query, doc['content']] for doc in candidates] scores = cross_encoder.predict(pairs) # Retourner le top 10 ranked = sorted(zip(candidates, scores), key=lambda x: x[1], reverse=True) return [doc for doc, _ in ranked[:10]]
Optimisation des performances
Les cross-encoders sont lents - optimisez :
DEVELOPERpython# Traitement par batch def batch_rerank(query, documents, batch_size=32): pairs = [[query, doc] for doc in documents] all_scores = [] for i in range(0, len(pairs), batch_size): batch = pairs[i:i+batch_size] scores = model.predict(batch) all_scores.extend(scores) return sorted(zip(documents, all_scores), key=lambda x: x[1], reverse=True)
Quand reranker
Toujours reranker quand :
- La précision est critique
- Le coût des faux positifs est élevé
- Vous avez un budget de calcul
Ignorer le reranking quand :
- Latence < 100ms requise
- QPS élevé (> 1000/sec)
- Budget contraint
Tags
Articles connexes
Reranking : Améliorer la Précision de Récupération
Cross-encoders, reranking basé sur LLM et stratégies de reranking pour optimiser le contexte récupéré et améliorer les réponses RAG.
API Cohere Rerank pour RAG Production
Boostez la Précision RAG de 40% avec l'API Rerank de Cohere : Intégration Simple, Support Multilingue, Prêt pour la Production.
Optimisation des Requêtes : Améliorer l'Efficacité de la Récupération
Techniques pour optimiser les requêtes utilisateur et améliorer la récupération : réécriture de requêtes, expansion, décomposition et stratégies de routage.