Chapitre 3 : Réordonnancement et Filtrage
Qu'est-ce que le Réordonnancement ?
Le réordonnancement utilise un modèle plus puissant pour réévaluer les résultats de récupération initiaux :
Réordonnancement par Cross-Encoder
Les cross-encoders évaluent directement les paires requête-document :
from sentence_transformers import CrossEncoder
# Charger le réordonnanceur
reranker = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2')
# Récupération initiale
candidates = retriever.get_relevant_documents(query)
# Évaluer les paires
pairs = [(query, doc.page_content) for doc in candidates]
scores = reranker.predict(pairs)
# Trier par scores réordonnés
reranked = sorted(zip(candidates, scores), key=lambda x: x[1], reverse=True)
Réordonnancement Cohere
API de réordonnancement prête pour la production :
import cohere
co = cohere.Client("your-api-key")
# Réordonner les documents
results = co.rerank(
model="rerank-english-v3.0",
query=query,
documents=[doc.page_content for doc in candidates],
top_n=5
)
# Obtenir les documents réordonnés
for result in results.results:
print(f"Score : {result.relevance_score}, Index : {result.index}")
Filtrage par Métadonnées
Filtrer avant ou après la récupération :
# Filtrage avant récupération (plus efficace)
retriever = vectorstore.as_retriever(
search_kwargs={
"k": 10,
"filter": {
"department": "HR",
"year": {"$gte": 2023}
}
}
)
# Filtrage après récupération
results = retriever.get_relevant_documents(query)
filtered = [doc for doc in results if doc.metadata.get('verified')]
Pipeline de Récupération Complet
def advanced_retrieve(query, vectorstore, reranker, k=5):
# Étape 1 : Récupération initiale (plus de candidats)
candidates = vectorstore.similarity_search(query, k=50)
# Étape 2 : Réordonnancement
pairs = [(query, doc.page_content) for doc in candidates]
scores = reranker.predict(pairs)
# Étape 3 : Trier et retourner le top k
ranked = sorted(zip(candidates, scores), key=lambda x: x[1], reverse=True)
return [doc for doc, score in ranked[:k]]
Comparaison
| Méthode | Latence | Qualité | Coût |
|---|---|---|---|
| Pas de réordonnancement | Faible | Bonne | Gratuit |
| Cross-encoder | Moyenne | Meilleure | Auto-hébergé |
| Cohere Rerank | Moyenne | Meilleure | Coût API |
Prochaines Étapes
Testez vos connaissances avec le Quiz du Module 5 !