Les 9 264 clips de deBarbaroCry où YAMNet, CLAP ou CED contredisaient l'étiquette du corpus ont été réécoutés à l'aveugle, sur les 3 secondes que les modèles notent. 33,9 % des désaccords venaient de l'étiquette, pas du modèle. Ce rapport dit ce que ça change, ce que ça ne change pas, et ce qui reste faux.
Le consensus des modèles prédit l'erreur d'étiquette, et fortement. Les paliers ci-dessous sont disjoints — exactement n modèles en désaccord avec le corpus — et les intervalles de Wilson ne se chevauchent pas.
L'effet est symétrique : sur P1, 71,9 % des clips étiquetés cry
et 72,3 % des notcry sont infirmés. Ce n'est pas un biais de détection dans un
sens, c'est du bruit d'étiquetage dans les deux.
Corriger les étiquettes déplace aussi le seuil qui atteint un rappel donné — pour CED, de 0,051 à 0,102. Or monter un seuil achète de la précision contre du rappel sur n'importe quel modèle, corrigé ou non. Il faut donc séparer les deux effets, sinon on attribue à la correction ce qui n'est qu'un déplacement le long de la courbe.
À seuil figé, seules les étiquettes changent. Chaque modèle est lu à son propre point de fonctionnement v1 — celui sur lequel les rapports publiés s'appuient.
La précision et le rappel montent tous les deux, au même seuil, sur le même audio. Un déplacement le long de la courbe ne peut pas faire ça : il échange l'un contre l'autre. Ce qui bouge ici, c'est la vérité terrain.
Conséquence pratique : au seuil déjà déployé, CED ne faisait pas 0,798 de rappel pour 0,915 de précision, mais 0,872 pour 0,954. Le système mesurait moins bien qu'il ne marchait.
Déplacez le seuil : à chaque position, les deux jeux d'étiquettes sont évalués sur exactement le même audio et les mêmes scores. L'écart entre le trait plein et le pointillé est ce que le corpus se trompait.
Les effectifs (FP, FN) ne sont pas comparables entre les deux jeux : v2 écarte les 754 clips jugés ambigus, donc son dénominateur est plus petit. Les taux — précision, rappel, taux de fausses alarmes — le sont.
deBarbaroCry fixe le seuil, les autres corpus le subissent. Viser à nouveau 0,80 de rappel sur le corpus corrigé fait monter le seuil, et ce que ça économise en fausses alarmes, ça le paie en rappel sur TheBoby — le seul corpus qui soit de l'audio produit.
Ne remontez pas le seuil. La cible « rappel 0,80 » a été choisie quand le corpus était bruité. Sur les étiquettes corrigées, le seuil déjà déployé délivre 0,85 à 0,87 de rappel pour 0,91 à 0,95 de précision. Le recalibrer pour retomber à 0,80 reviendrait à dégrader un système qui marche afin de faire coïncider un chiffre avec un objectif périmé.
L'annotation a entendu les secondes 0 à 3, la fenêtre que fixed_window note.
Les clips durent 5 s. L'asymétrie n'est pas cosmétique :
Ce n'est pas théorique : parmi les clips étiquetés cry et entendus sans pleur,
29 à 32 % dépassent le seuil sur le clip entier, contre 22 à 29 % des témoins. Quelques-uns
sont bien des pleurs, plus tard. Appliquer les verdicts de fenêtre aux scores de clip entier
n'est pas une erreur conservatrice : elle retire des positifs qui en sont et fabrique des
faux positifs avec. Mesurée ici, elle coûte à CED 0,013 de précision contre la lecture correcte.
Seuls les clips où un modèle se trompait ont été écoutés. Les autres — ceux où les trois modèles étaient d'accord avec l'étiquette — gardent une étiquette que personne n'a vérifiée. S'il y reste du bruit, il est défavorable aux modèles : trois modèles d'accord avec une étiquette fausse, ce sont trois erreurs non comptées.
2 % de bruit résiduel mange la moitié du gain ; 5 % le mange en entier et passe sous les chiffres d'origine. Les nombres corrigés de ce rapport sont donc un plafond, pas une mesure — tant que ce taux n'est pas mesuré, on ne sait pas où l'on se situe entre les deux lignes.
Le combler coûte peu : environ 800 clips tirés au hasard parmi les non examinés, soit ~40 minutes d'écoute, donnent ce taux à ±1,5 % près. L'outil de ré-annotation est déjà en place ; il suffit de générer un lot à sélection aléatoire.
data/deBarbaroCry/label_overrides.csv
porte les verdicts ; aucun scores.csv n'est modifié et aucun modèle n'est
relancé — un score ne dépend que de l'audio.layout.load_scores(root, model, labels="v1"|"v2") pose le calque à la lecture et
ajoute une colonne label_source. Un corpus corrigé par ceux qu'il sert à juger
doit rester lisible comme tel.window_s dit si les scores
couvrent la fenêtre annotée ou davantage, et les verdicts qui ne se transfèrent pas sont
écartés d'eux-mêmes.Le classement des modèles tient. Bootstrap par sujet — les clips d'un même nourrisson ne sont pas indépendants — sur la PR-AUC :
CED devance les deux autres avant comme après, et l'intervalle se resserre. L'écart CLAP–YAMNet n'était déjà pas significatif ; après correction il disparaît (+0,0001). La seule conclusion qui ne survit pas est un micro-avantage qui n'en était pas un. Le choix de modèle était bon ; ce sont les chiffres publiés qui étaient pessimistes.