Aller au contenu principal

Chapitre 1 : Mesures d'évaluation RAG

Deux domaines d'évaluation​

DomaineCe qu'il mesurePrincipales mesures
RécupérationQualité des documents récupérésPrécision, Rappel, MRR
GénérationQualité de la réponse du LLMFidélité, Pertinence

Mesures de récupération​

Précision@K​

def precision_at_k(retrieved_ids, relevant_ids, k):
"""Quel % des documents récupérés sont pertinents ?"""
retrieved_k = set(retrieved_ids[:k])
relevant = set(relevant_ids)
return len(retrieved_k & relevant) / k

# Récupérés : [A, B, C, D, E], Pertinents : [A, C, F]
# Précision@5 = 2/5 = 0.4

Rappel@K​

def recall_at_k(retrieved_ids, relevant_ids, k):
"""Quel % des documents pertinents ont été récupérés ?"""
retrieved_k = set(retrieved_ids[:k])
relevant = set(relevant_ids)
return len(retrieved_k & relevant) / len(relevant)

# Récupérés : [A, B, C, D, E], Pertinents : [A, C, F]
# Rappel@5 = 2/3 = 0.67

MRR (Mean Reciprocal Rank)​

def reciprocal_rank(retrieved_ids, relevant_ids):
"""À quelle hauteur se trouve le premier document pertinent ?"""
for i, doc_id in enumerate(retrieved_ids):
if doc_id in relevant_ids:
return 1 / (i + 1)
return 0

# Si le premier pertinent est à la position 3 : RR = 1/3 = 0.33

Mesures de génération​

Fidélité​

La réponse utilise-t-elle UNIQUEMENT les informations du contexte ?

# Haute fidélité :
# Contexte : "La politique permet des retours sous 30 jours"
# Réponse : "Vous pouvez retourner les articles sous 30 jours"

# Faible fidélité (hallucination) :
# Contexte : "La politique permet des retours sous 30 jours"
# Réponse : "Vous pouvez retourner les articles sous 60 jours pour un remboursement complet"

Pertinence de la réponse​

La réponse répond-elle réellement à la question ?

Pertinence du contexte​

Les segments récupérés sont-ils pertinents pour la question ?

Résumé des mesures​

MesureCe qu'elle mesureCible
Précision@KPertinence récupérée>0.8
Rappel@KCouverture>0.9
MRRQualité du classement>0.7
FidélitéPas d'hallucinations>0.9
PertinenceQualité de la réponse>0.8