Aller au contenu principal

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éthodeLatenceQualitéCoût
Pas de réordonnancementFaibleBonneGratuit
Cross-encoderMoyenneMeilleureAuto-hébergé
Cohere RerankMoyenneMeilleureCoût API

Prochaines Étapes​

Testez vos connaissances avec le Quiz du Module 5 !