Deux façons de se tromper
La différence entre précision et rappel est évidente si vous évaluez des modèles de machine learning au quotidien. Pour les autres, beaucoup moins.
Un exemple aide à la comprendre.
Supposons que vous construisiez un pipeline RAG et cherchiez une récupération très fiable dans votre base vectorielle. Une des premières questions est le nombre de fragments à récupérer, votre top_k.
Si vous en récupérez trois, ils seront probablement tous très pertinents. Mais vous risquez de manquer des fragments pertinents classés quatrième ou dixième. Une partie du contenu utile sera donc exclue.
Vous pourriez tenter de corriger cela en portant top_k à 50. Vous récupérez alors tout le contenu pertinent, mais aussi beaucoup de contenu inutile. Le LLM risque davantage de renvoyer une information “bruitée” contenant des éléments non pertinents, même si vous avez bien récupéré tous les fragments utiles de votre base vectorielle.
C’est un compromis entre précision et rappel.
La récupération des trois premiers résultats a une précision élevée, car les résultats obtenus sont très pertinents. Mais son rappel est faible, car elle en manque certains.
À l’inverse, récupérer les 50 premiers donne un rappel élevé, vous avez tout trouvé, mais une précision plus faible, vous avez aussi récupéré beaucoup de bruit.
La précision et le rappel interviennent partout où un système doit détecter quelque chose. La tâche est binaire : détecter X, vrai, ou ne pas le détecter, faux. Dans les deux cas, le système peut avoir raison ou tort.
Nous y reviendrons avec la matrice de confusion.
Oui, cela peut prêter à confusion. Il vaut donc mieux comprendre pourquoi on s’intéresse à la précision et au rappel. La réponse courte est que mesurer uniquement l’exactitude peut tromper.
Pourquoi l’exactitude seule est trompeuse
Supposons qu’un détecteur voie 100 exemples. Dix contiennent l’événement recherché. Mais il répond “aucun événement” à chaque fois, pour les 100 exemples. Il obtient 90 % sur ce test, car il a raison dans 90 % des cas sans événement.
En revanche, il obtient 0 % pour les événements présents qu’il aurait dû détecter.
Prenons un agent de sécurité à l’entrée d’un bâtiment. Si un visiteur sur 100 représente une menace, un agent qui laisse passer tout le monde a “99 % de bonnes réponses” pour les personnes autorisées. Mais si on mesure sa capacité à empêcher les mauvaises personnes d’entrer, il obtient 0 %, car son travail consiste précisément à repérer ce visiteur dangereux.
Lorsque les données favorisent fortement un résultat, un modèle qui devine au hasard à chaque étape peut donc obtenir par chance un score élevé et sembler exact sur le papier. Pourtant, il échoue à prédire ce qu’il est censé prédire.
Identifier l’événement
Pour éviter la confusion, je trouve utile de ne pas analyser la précision et le rappel avant d’avoir défini la tâche de détection. Ces mesures sont propres à la tâche à accomplir.
Commencez par le cas du vrai positif.
Pour un filtre antispam, l’événement est “cet e-mail est un spam”, le vrai positif. Pour un détecteur de fumée, c’est “il y a de la fumée”.
Voilà l’événement à signaler. Jusqu’ici, tout va bien.
Mais si le système a deux tâches ? Pour un modèle de transcription audio qui gère aussi la détection automatique des tours de parole, l’événement à signaler peut être “l’utilisateur a commencé à parler” ou “l’utilisateur a cessé de parler”. Cesser de parler n’est pas la même chose qu’avoir terminé son tour. Chacun de ces événements nécessite ses propres scores de précision et de rappel.
Un positif signifie que le système déclare que l’événement a eu lieu. C’est une étiquette de détection, pas un jugement de valeur.
| Il y a eu de la parole | Il n'y a pas eu de parole | |
|---|---|---|
| Le système signale de la parole | Vrai positif (TP) | Faux positif (FP) |
| Le système ne signale pas de parole | Faux négatif (FN) | Vrai négatif (TN) |
Cette grille est une matrice de confusion. Elle représente chaque résultat possible de détection pour un événement donné, en comparant ce qui s’est réellement passé à ce qu’a déclaré le système.
Posez quatre questions avant de choisir une mesure :
- Quel événement le système doit-il détecter ?
- Qu’est-ce qui compte comme un déclenchement du système ?
- À quoi ressemble un faux positif ?
- À quoi ressemble un faux négatif ?
Commencer par le dénominateur
J’ai trouvé utile de commencer par le dénominateur pour comprendre la différence entre précision et rappel.
Précision
Le dénominateur de la précision contient tout ce que le modèle a prédit comme positif, prédictions correctes et incorrectes. Ce sont les vrais positifs plus les faux positifs.
Au numérateur, comptez combien de prédictions étaient correctes, les vrais positifs.
Ce qui donne la formule suivante :
precision = true positives / (true positives + false positives)
Considérons l’événement “début de parole”. Nous avons 100 échantillons audio. Le filtre en signale 80 comme des débuts de parole, mais seulement 60 contiennent réellement cet événement.
Il y a donc 60 vrais positifs. Les faux positifs sont 80 - 60 = 20. Nous obtenons :
precision = 60 / (60 + 20) = 75%
Une faible précision identifie à tort d’autres sons, ou le silence, comme de la parole.
La précision est donc le rapport entre les bonnes détections du modèle et l’ensemble de ses bonnes et mauvaises détections.
Rappel
Le dénominateur du rappel est le nombre total d’événements positifs réellement présents, trouvés ou manqués. Ce sont les vrais positifs plus les faux négatifs. Il inclut donc tous les événements réels, que le modèle les ait trouvés ou non.
Le numérateur est le même que pour la précision : les vrais positifs.
recall = true positives / (true positives + false negatives)
Le rappel est donc le rapport entre ce que le modèle a correctement détecté et ce qu’il a détecté plus ce qu’il aurait dû détecter, c’est-à-dire ce qu’il a exclu à tort.
Dans le même exemple de détection de parole, il y a 60 vrais positifs. Il n’y a aucun faux négatif, car le modèle les a tous détectés, et même davantage.
Nous obtenons :
recall = 60 / (60 + 0) = 100%
Cela n’illustre pas bien l’intérêt du rappel. Changeons donc d’exemple. Sur 100 échantillons audio, le modèle en signale 50 comme des débuts de parole, alors que 60 contiennent réellement cet événement.
Il y a alors 50 vrais positifs et 60 - 50 = 10 faux négatifs. Ce sont 10 débuts de parole que le modèle a manqués.
Nous obtenons :
recall = 50 / (50 + 10) = 83%
precision = 50 / (50 + 0) = 100%
Dans cet exemple modifié, la précision est de 100 %, car il n’y a aucun faux positif.
Ces mesures diffèrent de la simple exactitude :
accuracy = (true positives + true negatives) / all samples
Utilisez l’exactitude lorsque chaque décision a un coût similaire et que le jeu d’évaluation représente la production. Mais si l’événement cible est rare ou si les deux types d’erreurs ont des coûts différents, la matrice de confusion change toute l’interprétation des performances.
Pour approfondir les formules mathématiques et leurs dérivées, consultez l’article complet de Wikipédia !
Le compromis entre précision et rappel
Les exemples montrent un vrai compromis. Quand l’un monte, l’autre tend à baisser.
L’exemple de récupération du début l’illustre : plus de documents augmentent le rappel mais réduisent la précision. Moins de documents augmentent la précision mais réduisent le rappel.
En pratique, la plupart des modèles attribuent un score de confiance à leurs détections, un nombre entre 0 et 1 représentant leur degré de certitude. Le seuil est la limite que vous choisissez, par exemple “signaler comme positif tout ce qui dépasse 0,7”.
C’est comme le réglage de sensibilité d’un appareil auditif. Augmentez-le et vous entendez chaque conversation, mais aussi la climatisation, la circulation et la télévision du voisin. Diminuez-le et vous n’entendez que les paroles fortes et claires, mais manquez les voix discrètes.
Relever le seuil réduit les faux positifs signalés. La précision augmente.
Abaisser le seuil permet de détecter davantage de cas réels et réduit les faux négatifs. Le rappel augmente.
Les modèles situés sur la frontière de Pareto, comme Ink-2 de Cartesia, équilibrent ces compromis de manière optimale.
Appliquer ces mesures à l’IA vocale
L’IA vocale comprend plusieurs tâches de détection et de prédiction. Ne les évaluez pas toutes avec un seul chiffre d’exactitude.
La détection d’activité vocale, ou VAD, détermine si une fenêtre audio contient de la parole. Un jeu de test peut contenir beaucoup plus de trames de silence que de parole. Prédire le silence à chaque fois paraît exact tout en manquant toute la parole. Mesurez la précision et le rappel de la parole. Indiquez à quelle fréquence le détecteur la signale correctement et à quelle fréquence il la manque.
La détection des tours de parole décide quand une personne prend ou cède la parole. Les événements de début et de fin nécessitent des mesures distinctes. Nous utilisons ci-dessous deux événements de tour ASR d’Ink-2.
turn_start : l’utilisateur a-t-il commencé à parler ?
L’événement cible est “l’utilisateur a commencé à parler”. Le système se déclenche lorsqu’il émet un événement turn_start.
- Faux positif : il émet
turn_startpour un bruit de clavier, une voix en arrière-plan, une fuite audio dans le micro ou le propre audio de l’agent. - Faux négatif : l’utilisateur commence à parler et le système ne le détecte pas.
Une faible précision de turn_start fait réagir le système à un audio qui ne vient pas de l’utilisateur. Si turn_start arrête la lecture, les faux positifs provoquent de fausses interruptions.
Un faible rappel de turn_start signifie que de la vraie parole peut ne pas atteindre le reste du pipeline.
turn_end : la personne a-t-elle terminé ?
L’événement cible est “l’utilisateur a terminé son tour”. Le système se déclenche lorsqu’il émet turn_end, après quoi l’application peut répondre.
- Faux positif : il émet
turn_endalors que l’utilisateur compte continuer. - Faux négatif : l’utilisateur a terminé, mais le système continue d’attendre.
Une faible précision de turn_end peut couper l’utilisateur après une pause pour réfléchir, corriger une phrase ou respirer. Un faible rappel crée un silence après qu’il a terminé.
Pour les deux événements, définissez ce qui constitue une correspondance entre un horodatage prédit et un horodatage annoté. Définissez le locuteur cible, l’annotation de la parole simultanée et de l’audio de fond, ainsi que le sens de “terminé”, avant de calculer les scores.
Choisir la mesure selon l’échec
- Rapportez séparément la précision et le rappel de
turn_startetturn_end. - Choisissez le seuil selon l’erreur la plus coûteuse dans le produit.
- Examinez des exemples de faux positifs et de faux négatifs, pas seulement les scores agrégés.
- Utilisez l’exactitude comme contexte, pas comme évaluation entière.
La prochaine fois qu’un modèle annonce 90 % d’exactitude, demandez ce qu’il a détecté, à quelle fréquence cet événement s’est produit et quelles erreurs le score masque.
