Mesurer la récupération
- Leçon 13
- 50 min
- Module 5 : Évaluer et déboguer le pipeline
Leçon 13 sur 18 · RAG : créer une IA qui utilise vos donnéesMesurer la récupération
1. Définir le problème de connaissances
2. Ingérer les documents de façon reproductible
3. Créer et comparer la récupération
4. Construire des réponses fondées sur les sources
5. Évaluer et déboguer le pipeline
6. Maintenir et protéger la base de connaissances
Ce que vous saurez faire
Mesurez avec plusieurs nombres à quel point la recherche trouve les preuves. Le rappel à k indique quelle part des preuves atteint le modèle. La précision à k indique quelle part du contexte est du bruit. La moyenne des rangs réciproques indique à quel point les preuves sont près du début.
Avant de commencerCe qu’il faut savoir et avoir sous la main
Ce que vous devez savoir
- hit@5, la proportion de questions avec un passage pertinent parmi les 5 premiers résultats, dans Une référence de base par mots-clés.
- precision@k et recall@k sur une liste classée, dans Le compromis entre précision et rappel du cours Apprentissage automatique : du problème à un modèle fiable.
- Les méthodes de récupération (BM25, dense, hybride, reclassement) et la reformulation des requêtes, dans Recherche lexicale, dense et hybride et Reclassement et reformulation des requêtes.
Ce qu’il vous faut sur votre ordinateur
~/projects/policy-assistantà la fin du module 4, avec.venvactif :python -m pytestaffiche74 passed, 1 deselected(74 tests réussis, 1 exclu). Si votre projet ne fonctionne plus, copiez l’instantanéend-of-m04du dépôt des exercices, comme l’explique son README.- L’index
index.sqliteproduit parpython -m policy_assistant ingest.
Aucun compte ni clé. Testé avec Python 3.12.13 sur macOS (Apple silicon). Les commandes Windows ne sont pas testées. Les nombres de cette leçon sont un instantané de cette date. Les modèles et les outils changent vite; la façon de les mesurer reste valable.
Une pile de livres de bibliothèque
Section intitulée « Une pile de livres de bibliothèque »Vous écrivez un texte sur les abeilles. Vous demandez des livres à une bibliothécaire, qui vous en apporte une pile de cinq. Cette pile est-elle bonne? Une seule question ne suffit pas pour le dire.
- Y a-t-il au moins un livre utile dans la pile?
- Vous aviez besoin de trois livres : un sur la biologie des abeilles, un sur le miel, un sur les pesticides. Combien des trois sont dans la pile?
- Combien des cinq livres sont utiles, et combien ajoutent seulement du poids?
- Un livre utile est-il sur le dessus, ou devez-vous chercher jusqu’au fond?
Une pile peut satisfaire la première question et échouer aux autres. Elle contient le livre sur le miel, donc elle n’est « pas vide ». Mais les deux autres livres nécessaires manquent, et vous devez ouvrir quatre livres pour trouver celui qui est utile.
Le problème : hit@5 indique « trouvé » quand des preuves manquent
Section intitulée « Le problème : hit@5 indique « trouvé » quand des preuves manquent »Depuis le module 1, le projet a une seule mesure de récupération : hit@5. Elle pose seulement la première question. Regardez Q46 : « La FAQ du centre d’aide dit que les remboursements prennent 3 jours ouvrables. Est-ce exact? »
Pour bien répondre, le modèle a besoin de trois passages. La FAQ indique 3 jours ouvrables. La politique de remboursement et de paiement indique 5 à 10 jours ouvrables. La règle de gouvernance dit qu’une politique a priorité sur un article d’aide. La recherche avec reclassement place la FAQ au rang 1, donc hit@5 compte Q46 comme une réussite. Mais les deux autres passages ne sont pas parmi les 5 premiers. La réponse enregistrée pouvait seulement dire que la FAQ n’était pas confirmée.
hit@5 ignore aussi l’ordre. Trois méthodes de récupération de Larkfield ont exactement le même hit@5, soit 0,898. Sont-elles aussi bonnes? Cette leçon répond avec des mesures qui permettent de les distinguer. Découper de façon réfléchie a montré un autre angle mort : un segment peut compter comme un résultat pertinent sans contenir la réponse. Ces mesures ne corrigent pas ce problème. La dernière leçon de ce module montre comment le repérer.
L’idée : des étiquettes de pertinence et trois mesures
Section intitulée « L’idée : des étiquettes de pertinence et trois mesures »Chaque mesure doit savoir quels passages sont les bons. Une étiquette de pertinence indique, pour une question, quels passages contiennent les preuves. Grace les a rédigées pour les 67 questions en lisant les documents. Pour chaque question, elle a noté le document, sa version et sa section. Un script a ensuite vérifié chaque étiquette : le passage existe, est en vigueur à la date de la question et est public si la question est publique. Aucun modèle n’a rédigé ni étiqueté de question. C’est la lecture d’une seule personne, et vous pouvez vérifier chaque étiquette dans questions/questions.jsonl.
Avec ces étiquettes, le projet mesure trois choses pour chaque question, puis calcule la moyenne sur les questions.
- Rappel à k (recall@k) : la proportion des passages pertinents pour la question que couvrent les k premiers résultats. Q46 en exige trois, et les 5 premiers en couvrent un : recall@5 = 1 ÷ 3 = 0,33. Il répond à « quelle part des preuves atteint le modèle? »
- Précision à k (precision@k) : la proportion des k premiers segments qui sont pertinents. Elle répond à « quelle part du contexte est une preuve, et quelle part est du bruit? »
- Rang réciproque : 1 ÷ le rang du premier segment pertinent. Le rang 1 donne 1, le rang 3 donne 1/3, et aucun segment pertinent parmi les k premiers donne 0. Sa moyenne sur les questions est la moyenne des rangs réciproques (MRR). Elle répond à « à quel point les preuves sont-elles près du début? »
Ce sont les mesures precision@k et recall@k du cours d’apprentissage automatique, calculées pour chaque question, puis moyennées. hit@k reste la forme la plus simple du rappel : « au moins un ». Les questions sans réponse possible n’ont aucun passage pertinent. Elles sont donc exclues des quatre mesures.
Les moteurs de recherche utilisent aussi le nDCG (gain cumulé actualisé normalisé). Il accorde un crédit partiel aux passages partiellement pertinents, et moins de crédit aux passages plus bas dans la liste. Les étiquettes de Grace indiquent seulement « pertinent » ou « non pertinent », donc ce cours n’en a pas besoin.
Un petit exemple détaillé : cinq questions
Section intitulée « Un petit exemple détaillé : cinq questions »Prenez cinq questions inventées, de A à E, et les 3 premiers résultats de chacune (k = 3). Ces cinq questions forment le test dans tests/test_evaluate.py, donc vous pouvez vérifier chaque valeur.
Description textuelle du diagramme
Un tableau de cinq lignes. A : résultat 1 pertinent, résultats 2 et 3 non pertinents; hit 1, rappel 1 sur 1 = 1, précision 1 sur 3, rang réciproque 1. B : seul le résultat 3 est pertinent; hit 1, rappel 1, précision 1 sur 3, rang réciproque 1/3. C exige deux passages, et le résultat 1 est l’un d’eux. C : hit 1, rappel 1 sur 2 = 0,5, précision 1 sur 3, rang réciproque 1. D n’a aucun résultat pertinent, donc chaque valeur est 0. E n’a aucun passage pertinent, donc elle est exclue. Sous les lignes figurent les moyennes de A à D : hit@3 0,75, recall@3 0,625, precision@3 0,25, MRR 0,583.
Calculez maintenant les moyennes sur les quatre questions qui ont des passages pertinents :
| Mesure | A | B | C | D | Moyenne de A à D |
|---|---|---|---|---|---|
| hit@3 | 1 | 1 | 1 | 0 | 3 ÷ 4 = 0,75 |
| recall@3 | 1 | 1 | 0,5 | 0 | 2,5 ÷ 4 = 0,625 |
| precision@3 | 1/3 | 1/3 | 1/3 | 0 | 1 ÷ 4 = 0,25 |
| rang réciproque | 1 | 1/3 | 1 | 0 | 2,333 ÷ 4 = 0,583 |
Lisez les colonnes. A et B ont les mêmes valeurs de hit, de rappel et de précision. Seul le rang réciproque montre que B vous a fait lire deux résultats inutiles avant le bon. C et A ont le même hit, mais le rappel montre qu’il manque la moitié des preuves de C. hit@3 donne un seul nombre pour tout cela; les trois autres mesures indiquent où sont les problèmes.
Mise en pratique : les mesures complètes dans le projet
Section intitulée « Mise en pratique : les mesures complètes dans le projet »Le nouveau evaluate.py du projet calcule recall@k, precision@k et MRR. Le nouveau __main__.py les affiche dans eval (évaluation). evaluate.py contient aussi les vérifications des réponses de la prochaine leçon. Copiez les trois fichiers de l’instantané end-of-m05.
-
Copiez
evaluate.py,__main__.pyet le nouveau test. Sur macOS et Linux :Fenêtre de terminal cp ../nextia-learning-labs/C09/snapshots/end-of-m05/policy_assistant/evaluate.py policy_assistant/cp ../nextia-learning-labs/C09/snapshots/end-of-m05/policy_assistant/__main__.py policy_assistant/cp ../nextia-learning-labs/C09/snapshots/end-of-m05/tests/test_evaluate.py tests/Sur Windows, dans PowerShell :
Fenêtre de terminal Copy-Item ..\nextia-learning-labs\C09\snapshots\end-of-m05\policy_assistant\evaluate.py policy_assistant\Copy-Item ..\nextia-learning-labs\C09\snapshots\end-of-m05\policy_assistant\__main__.py policy_assistant\Copy-Item ..\nextia-learning-labs\C09\snapshots\end-of-m05\tests\test_evaluate.py tests\ -
Ouvrez
policy_assistant/evaluate.py. Trouvezretrieval_scores, puis les quatre lignes qui calculenthit,recall,precisionetrrpour une question. -
Exécutez les tests. Vous voyez
77 passed, 1 deselected(77 tests réussis, 1 exclu) :Fenêtre de terminal python -m pytestLe nouveau test
test_five_questions_by_handest l’exemple détaillé ci-dessus. -
Mesurez la méthode par défaut du cours, la recherche avec reclassement, avec les 5 premiers résultats :
Fenêtre de terminal python -m policy_assistant evalLa commande charge d’abord les deux modèles locaux, ce qui prend environ 30 secondes. La sortie :
rerank, top 5, audience staff: 59 questions with relevant passageshit@5 0.898 | recall@5 0.856 | precision@5 0.231 | MRR 0.831 | staff passages shown to a public audience: 0 | wrong versions: 0kind n hit recall MRRanswerable 18 0.889 0.833 0.889contradiction 4 1.000 0.625 1.000exact-code 11 1.000 1.000 1.000injection-bait 3 0.333 0.333 0.333staff-only 7 1.000 1.000 1.000table 8 0.875 0.875 0.729version 8 0.875 0.875 0.525
Lisez d’abord la ligne sous le titre. hit@5 vaut 0,898, comme au module 3. recall@5 est plus faible, à 0,856, car certaines questions exigent deux ou trois passages et n’en reçoivent qu’une partie. Les deux dernières valeurs vérifient les filtres du module 3. Aucune mauvaise version n’atteint les 5 premiers résultats. Le nombre de fuites reste toujours à 0 pour le personnel; il compte seulement avec --audience public, utilisé au module 6.
Lisez ensuite le tableau par type. Les questions de contradiction ont un hit de 1,000 et un rappel de 0,625. Les 5 premiers résultats contiennent toujours un côté du conflit, mais souvent pas l’autre côté ou la règle. Les questions de version ont un rappel de 0,875 et une MRR de 0,525 : la recherche trouve la bonne version, mais souvent pas au rang 1. hit@5 seul ne permettait de voir aucun des deux problèmes.
Pourquoi precision@5 est-elle si faible, à 0,231? La plupart des questions ont une seule section pertinente, contenue dans un seul segment. Alors, au plus 1 des 5 segments peut être pertinent, et precision@5 ne peut pas dépasser 0,2. Une faible precision@5 est normale ici. Elle montre le coût : la plupart des passages que le modèle lit ne sont pas des preuves.
Le rappel à k pour chaque méthode de récupération
Section intitulée « Le rappel à k pour chaque méthode de récupération »Amira a exécuté chaque méthode du module 3 avec k = 1, 3, 5 et 10, et Priya a tracé recall@k. Une liste plus longue ne peut qu’ajouter des preuves, donc chaque courbe monte. La question est de savoir à quelle vitesse.
- Reclassement
- Dense (e5)
- Hybride (RRF)
- BM25
Description textuelle du graphique
Un graphique à quatre courbes. L’axe horizontal est k : 1, 3, 5 et 10. L’axe vertical est recall@k, de 0,4 à 1. Reclassement : 0.641, 0.825, 0.856, 0.921. Dense avec e5 : 0.531, 0.785, 0.862, 0.895. Hybride avec fusion des rangs réciproques : 0.54, 0.743, 0.811, 0.904. BM25 : 0.421, 0.689, 0.771, 0.828. Le reclassement est le plus élevé avec k = 1, 3 et 10; la recherche dense est la plus élevée avec k = 5. BM25 est le plus faible pour chaque k.
Trois points ressortent. Avec k = 1, le reclassement trouve 0.641 des preuves et BM25 0.421 : le travail de l’encodeur croisé paraît au début de la liste. Avec k = 5, la recherche dense a le rappel le plus élevé, 0.862, juste au-dessus du reclassement à 0.856. Avec k = 10, le reclassement atteint 0.921. La meilleure méthode dépend donc du nombre de passages que vous donnez au modèle.
Le tableau avec k = 5, incluant aussi le modèle de plongement hébergé et la reformulation des requêtes :
| Méthode | hit@5 | recall@5 | precision@5 | MRR |
|---|---|---|---|---|
| BM25 | 0.831 | 0.771 | 0.207 | 0.655 |
| Dense (e5, local) | 0.915 | 0.862 | 0.234 | 0.769 |
| Dense (embed-small, hébergé) | 0.881 | 0.836 | 0.231 | 0.827 |
| Hybride (e5, RRF) | 0.864 | 0.811 | 0.220 | 0.745 |
| Hybride (embed-small, RRF) | 0.898 | 0.845 | 0.227 | 0.787 |
| Reclassement (par défaut dans le cours) | 0.898 | 0.856 | 0.231 | 0.831 |
| BM25 + reformulation | 0.898 | 0.825 | 0.227 | 0.745 |
| Reclassement + reformulation | 0.932 | 0.864 | 0.234 | 0.882 |
Revenons à la question du début de la leçon. Trois méthodes ont un hit@5 de 0.898 : BM25 avec reformulation, hybride avec embed-small et reclassement. Leur MRR diffère.
Description textuelle du graphique
Un graphique à trois colonnes, toutes pour des méthodes ayant un hit@5 de 0,898. BM25 avec reformulation des requêtes : MRR 0.745. Recherche hybride avec le modèle hébergé embed-small : 0.787. Reclassement : 0.831.
Chacune des trois trouve des preuves pour 53 des 59 questions. Le reclassement les place plus haut. Une MRR de 0,831 signifie que le premier passage pertinent est généralement au rang 1. Une MRR de 0,745 signifie qu’il est souvent au rang 2 ou 3. L’ordre compte-t-il si le modèle lit les cinq passages? Il compte quand le budget de contexte coupe la liste, quand un agent lit les passages et quand un modèle fait surtout confiance au premier passage.
Priya ajoute un avertissement. Avec 59 questions, une question représente 1 ÷ 59 = 0,017 de hit@5. La recherche dense (0,915) et le reclassement (0,898) diffèrent d’une question. Cela ne prouve pas qu’une méthode est meilleure. Regardez quelles questions ont changé avant de croire à une différence.
Quand utiliser chaque mesure, et ce qu’elle coûte
Section intitulée « Quand utiliser chaque mesure, et ce qu’elle coûte »- recall@k est la principale mesure pour la RAG. Le modèle peut utiliser seulement les preuves qui l’atteignent, donc recall@k limite le nombre de bonnes réponses possibles. Mesurez-le au k que vous envoyez réellement au modèle.
- MRR compte quand l’ordre compte : un petit budget, une personne qui lit les premiers résultats ou un modèle de reclassement à évaluer.
- precision@k mesure le bruit et le coût. Chaque passage qui n’est pas une preuve coûte des jetons (tokens) et peut induire le modèle en erreur. Ne cherchez pas seulement à l’améliorer : k = 1 donne la meilleure précision, mais perd des preuves.
- hit@k reste utile comme première vérification rapide.
Les quatre mesures exigent des étiquettes de pertinence, et ces étiquettes sont la partie coûteuse. Une personne qui connaît les documents doit les rédiger à la main et les mettre à jour quand un document change. Elles reflètent aussi la lecture d’une seule personne. Une deuxième personne peut trouver un passage pertinent que Grace n’a pas listé. Une méthode qui le trouve ne reçoit aucun crédit.
Erreur courante
Le jeu de questions a changé entre deux comparaisons
Symptôme : supposons que Tomás compare les méthodes deux fois, à une semaine d’intervalle. La première fois, le modèle hébergé embed-small offre le meilleur classement : MRR 0.832 contre 0.819 pour le reclassement. La deuxième fois, le reclassement est le meilleur : 0.831 contre 0.827. Personne n’a changé le code de recherche. « Lequel est vrai? »
Cause : le jeu de questions a changé. Les premières exécutions utilisaient 55 questions avec des passages pertinents. Elles ont montré que les codes de produit dans des phrases complètes ne distinguaient pas les recherches par mots-clés et vectorielle. Grace a donc ajouté quatre questions portant seulement sur un identifiant, comme Q64 « Qu’est-ce que LB-1? ». Voici les mêmes résultats enregistrés, mesurés sur les deux jeux :
| Méthode | MRR sur les 55 premières | MRR sur les 59 | hit@5 sur 55 | hit@5 sur 59 |
|---|---|---|---|---|
| BM25 | 0.630 | 0.655 | 0.818 | 0.831 |
| Dense (e5) | 0.809 | 0.769 | 0.927 | 0.915 |
| Dense (embed-small) | 0.832 | 0.827 | 0.891 | 0.881 |
| Reclassement | 0.819 | 0.831 | 0.891 | 0.898 |
La recherche par mots-clés classe les identifiants en premier, et la recherche dense e5 les manque. Les quatre nouvelles questions font donc monter BM25 et baisser la recherche dense. L’ordre des deux meilleures méthodes s’inverse. Les deux classements se jouent à une ou deux questions près, donc aucune comparaison ne prouve grand-chose.
Correction : figez le jeu de questions, ses étiquettes et ses clés avant une comparaison finale, et donnez-lui une version. Mesurez chaque méthode sur la même version. Ajouter des questions pendant le développement est une bonne chose : Grace les a ajoutées parce que les premières exécutions montraient une lacune. Mais un nombre mesuré sur 55 questions ne peut pas être comparé à un nombre mesuré sur 59.
Pour un vrai assistant : notez la version du jeu de questions à côté de chaque nombre dans un rapport. Quand le jeu change, mesurez toutes les méthodes de nouveau.
À vous de jouer : changer k
Section intitulée « À vous de jouer : changer k »Faites une prédiction avant l’exécution : quand k passe de 5 à 1, le rappel monte-t-il ou baisse-t-il? Et la précision? Exécutez ensuite :
python -m policy_assistant eval --k 1python -m policy_assistant eval --k 10Afficher la réponse
La deuxième ligne de chaque sortie :
hit@1 0.797 | recall@1 0.641 | precision@1 0.797 | MRR 0.797 | staff passages shown to a public audience: 0 | wrong versions: 0hit@10 0.966 | recall@10 0.921 | precision@10 0.125 | MRR 0.840 | staff passages shown to a public audience: 0 | wrong versions: 0De k = 1 à k = 10, le rappel monte de 0,641 à 0,921 et la précision baisse de 0,797 à 0,125. C’est le compromis du cours d’apprentissage automatique. Avec k = 1, la précision, hit et MRR ont la même valeur, car un résultat est pertinent ou non. MRR monte seulement un peu avec k = 10, de 0,831 à 0,840. Un passage pertinent au rang 6 à 10 ajoute au plus 1/6. Dans le tableau par type, les questions de version et de tableau atteignent 1,000 avec k = 10. Leurs preuves étaient là, juste sous le rang 5. La dernière leçon de ce module vérifie si 10 passages donnent de meilleures réponses.
Vérification des connaissances
Section intitulée « Vérification des connaissances »Vérifiez votre compréhension
Dans vos mots : que mesure recall@5 que hit@5 ne mesure pas? Utilisez Q46 comme exemple.
Afficher la réponse
hit@5 vérifie si au moins un passage pertinent figure parmi les 5 premiers. recall@5 mesure la proportion de tous les passages pertinents qui s’y trouvent. Q46 nécessite trois passages : la FAQ, la politique de remboursement et la règle de gouvernance. Les 5 premiers résultats contiennent seulement la FAQ. Donc, hit@5 vaut 1, et recall@5 vaut 1 ÷ 3 = 0,33. Le modèle reçoit un seul côté du conflit et aucune règle.
Votre réponse contient-elle les points principaux de la nôtre ?
Connectez-vous et inscrivez-vous au cours pour enregistrer vos réponses. Chaque vérification compte pour le certificat.
Vérifiez votre compréhension
Prédisez : une question a un seul passage pertinent, trouvé au rang 4. Que valent hit@5, recall@5, precision@5 et le rang réciproque?
Afficher la réponse
hit@5 = 1, car le passage figure parmi les 5 premiers. recall@5 = 1 ÷ 1 = 1, car le seul passage pertinent est trouvé. precision@5 = 1 ÷ 5 = 0,2. Le rang réciproque = 1 ÷ 4 = 0,25. Le même passage au rang 1 changerait seulement le rang réciproque, qui passerait à 1.
Votre réponse contient-elle les points principaux de la nôtre ?
Connectez-vous et inscrivez-vous au cours pour enregistrer vos réponses. Chaque vérification compte pour le certificat.
Vérifiez votre compréhension
La recherche dense obtient un recall@5 de 0,862, contre 0,856 pour le reclassement. Mais le reclassement a un MRR supérieur (0,831 contre 0,769). Omar demande lequel utiliser. Que lui dites-vous, et que vérifieriez-vous d'abord?
Afficher la réponse
L’écart de rappel représente moins d’une question sur 59. Il ne prouve donc rien. L’écart de MRR est plus grand : le reclassement place les preuves plus près du début. Gardez le reclassement si l’ordre compte (un petit budget, des agents qui lisent les passages). Il faut aussi que 0,3 seconde de plus par question soit acceptable. D’abord, vérifiez pour quelles questions chaque méthode trouve ou manque les preuves. Deux méthodes ayant la même moyenne peuvent échouer sur des questions différentes.
Votre réponse contient-elle les points principaux de la nôtre ?
Connectez-vous et inscrivez-vous au cours pour enregistrer vos réponses. Chaque vérification compte pour le certificat.
Récapitulatif
- Une étiquette de pertinence indique les passages qui contiennent les preuves pour une question. Grace les a rédigées à la main, et un script les a vérifiées. Toutes les mesures de récupération en dépendent.
- recall@k : la proportion des passages pertinents qui figurent parmi les k premiers. precision@k : la proportion des k premiers passages qui sont pertinents. MRR : la moyenne de 1 ÷ le rang du premier passage pertinent. hit@k est la forme la plus simple du rappel.
- Par défaut, le cours utilise le reclassement avec les 5 premiers résultats : hit@5 0,898, recall@5 0,856, precision@5 0,231, MRR 0,831. Le rappel révèle les preuves manquantes pour les questions sur les contradictions. Le MRR révèle les rangs éloignés du début pour les questions sur les versions.
- Des méthodes ayant le même hit@5 peuvent classer les passages très différemment, et la meilleure méthode dépend de k. Une ou deux questions sur 59 ne constituent pas une preuve.
- Figez et versionnez le jeu de questions avant une comparaison finale : quatre questions ajoutées ont inversé l’ordre des deux meilleures méthodes.
Ensuite, appliquez le même soin aux réponses : exactitude, appui sur les sources, citations et utilité.
Leçon suivante : Mesurer les réponses