Exercices IA & Data Science Evaluer un retriever RAG
🎉

Bravo!

Avancé 🧠 Fondamentaux 40 XP 0 personnes ont réussi

Evaluer un retriever RAG

Construire un système RAG c'est bien, mais comment savoir s'il marche correctement ? Il faut l'evaluer avec des metriques. Les deux metriques de base sont la precision et le recall.

La precision repond a la question : parmi les documents que j'ai recuperes, combien sont reellement pertinents ?

precision = nombre de docs pertinents recuperes / nombre total de docs recuperes

Le recall repond a la question : parmi tous les documents pertinents qui existent, combien j'en ai récupère ?

recall = nombre de docs pertinents recuperes / nombre total de docs pertinents

Le F1-score combine les deux en une seule metrique :

f1 = 2 * precision * recall / (precision + recall)

Si precision ou recall vaut 0, le f1 vaut 0.

Écris une fonction evaluate_retriever(retrieved, relevant) qui :
- prend retrieved : la liste des indices des documents recuperes par le système
- prend relevant : la liste des indices des documents reellement pertinents
- renvoie un dict avec les clés "precision", "recall", "f1" (des floats arrondis a 2 decimales)

Exemple :

evaluate_retriever([0, 1, 2], [0, 2, 5])
renvoie {"precision": 0.67, "recall": 0.67, "f1": 0.67}

Tests (1/1)

Tests
# Cas parfait
r = evaluate_retriever([0, 1, 2], [0, 1, 2])
assert r['precision'] == 1.0, f'Precision doit etre 1.0, got {r["precision"]}'
assert r['recall'] == 1.0
assert r['f1'] == 1.0
# Cas partiel
r2 = evaluate_retriever([0, 1, 2], [0, 2, 5])
assert r2['precision'] == 0.67, f'Precision doit etre 0.67, got {r2["precision"]}'
assert r2['recall'] == 0.67
# Aucun résultat pertinent
r3 = evaluate_retriever([0, 1], [5, 6])
assert r3['precision'] == 0.0
assert r3['recall'] == 0.0
assert r3['f1'] == 0.0
# Liste vide de retrieved
r4 = evaluate_retriever([], [0, 1])
assert r4['precision'] == 0.0
assert r4['recall'] == 0.0
# Haute precision, faible recall
r5 = evaluate_retriever([0], [0, 1, 2, 3])
assert r5['precision'] == 1.0
assert r5['recall'] == 0.25

Indices (3 disponibles)

solution.py