Tester la régression d'une nouvelle version d'un classificateur, par sous-groupe
- Étude de cas 3
- 120 min
- Facultative · 1 étude de cas requise pour le certificat
Étude de cas 3 sur 3 · Évaluer et tester les systèmes d'IATester la régression d'une nouvelle version d'un classificateur, par sous-groupe
1. Définir ce qui est « bon »
2. Créer un jeu de données d'évaluation
3. Choisir les métriques par composant
4. Utiliser des juges humains et des juges modèles
5. Comparer les systèmes de façon responsable
6. Automatiser l'évaluation et la rétroaction
Ce que vous saurez faire
Décidez si une nouvelle version d’un classificateur peut remplacer l’ancienne. Elle est meilleure en moyenne. Vous vérifierez cette affirmation comme le ferait une équipe rigoureuse. Vous écrivez d’abord les règles et les critères bloquants. Vous utilisez des données de test réservées et figées, puis lisez les résultats par sous-groupe avec des intervalles appariés. Ensuite, le résultat décide, pas l’espoir.
Le carnet (notebook) Jupyter exécute chaque étape de cette page, avec le même code et les mêmes sorties. Il ajoute quatre tâches avec des vérifications. Ses cellules de préparation installent pandas et scikit-learn et téléchargent les données (environ 17 Mo). Il entraîne les deux versions sur le processeur et s’exécute en environ une minute sur le portable du cours. Aucun compte ni aucune clé ne sont nécessaires : aucune étape n’appelle un service de modèle.
Avant de commencerCe qu’il faut savoir et avoir sous la main
Ce que vous devez savoir
Cette étude de cas utilise tout le cours. Ces leçons sont les plus importantes :
- Le rappel, les fausses alertes et les différents coûts des erreurs, dans Métriques de prédiction.
- Les données de validation et les données de test réservées, et pourquoi ces dernières restent figées, dans Éviter la contamination.
- Les intervalles bootstrap, la différence appariée et les précautions par sous-groupe, dans Incertitude et sous-groupes.
- Les critères bloquants avant les moyennes et une décision écrite, dans Compromis et régressions et Établir une référence de base.
Vous n’avez pas besoin de connaître le fonctionnement interne des classificateurs de texte. L’étude de cas les traite comme deux versions qui donnent un score à chaque commentaire.
Ce qu’il vous faut sur votre ordinateur (seulement pour l’exécution locale; le carnet dans Colab ou Kaggle n’en a pas besoin)
- Python 3.12 ou ultérieur avec pandas 3.0.6, scikit-learn 1.9.1 et matplotlib, dans un nouvel environnement virtuel, comme dans Configurer le projet.
- Le carnet, téléchargé à partir du lien ci-dessus, dans VS Code ou JupyterLab. Sa cellule de préparation télécharge les données dans un nouveau dossier
classifier-release. Pour recommencer, supprimez ce dossier.
Testé sur macOS (Apple silicon) avec Python 3.12.13, pandas 3.0.6, scikit-learn 1.9.1 et numpy 2.5.3, dans une nouvelle session Jupyter. Windows et Linux n’ont pas été testés.
La situation
Section intitulée « La situation »Le Harbourview Courier est un site régional d’actualités dont la section des commentaires est très active. Un classificateur de texte attribue un score à chaque nouveau commentaire. Les commentaires ayant les scores les plus élevés sont retenus : ils attendent un modérateur avant que quiconque puisse les lire. Les autres apparaissent immédiatement. Le modèle ne supprime rien; une personne décide du sort de chaque commentaire retenu.
Nadia dirige l’équipe communautaire et est responsable de la politique sur les commentaires. Ses trois modérateurs peuvent lire environ un commentaire sur dix. Le classificateur doit donc leur présenter les bons 10 %.
Chaque choix peut entraîner deux types d’erreurs :
- Un commentaire toxique manqué apparaît immédiatement. Les lecteurs voient une insulte jusqu’à ce que quelqu’un la signale.
- Un commentaire inoffensif retenu attend pendant des heures. Son auteur abandonne souvent. Si cela touche davantage les personnes parlant de leur religion, race ou sexualité, le site les réduit silencieusement au silence.
Kwame, l’ingénieur en apprentissage automatique du site, a créé une nouvelle version. « v2 lit de petits morceaux de mots, pas seulement des mots entiers, dit-il. Elle détecte les insultes déguisées, et son score global est plus élevé. Mettons-la en production. »
Lena, la scientifique des données, pose la question centrale du cours. Comment savoir si la nouvelle version est meilleure et si elle n’a rien dégradé d’important? Cette étude de cas est sa réponse.
Ce que vous allez construire
Section intitulée « Ce que vous allez construire »Vous allez construire une vérification de mise en production pour un classificateur. Elle comprend des règles écrites avec des critères bloquants, deux versions entraînées comme en équipe et des données de test réservées et figées. Vous comparez les versions globalement et pour huit groupes de personnes, avec des intervalles bootstrap appariés. Vous rédigez ensuite une décision pour Nadia. Vous examinez aussi les cas derrière les chiffres et les erreurs que l’ancienne version commet déjà.
Cette étude utilise tout le cours, des critères avant les résultats (Relier les objectifs aux preuves) à l’ordre d’une décision (Compromis et régressions).
Les données
Section intitulée « Les données »Les données proviennent de Civil Comments : des commentaires publics d’environ 50 sites d’actualités anglophones, écrits entre 2015 et 2017. À sa fermeture, la plateforme Civil Comments a publié les commentaires dans une archive ouverte. Jigsaw et l’équipe Conversation AI de Google les ont ensuite fait étiqueter par des évaluateurs participatifs. Cette étude utilise la version du banc d’essai WILDS : 448 000 commentaires avec des étiquettes pour les groupes de personnes mentionnés.
Qui a créé les étiquettes
Section intitulée « Qui a créé les étiquettes »Chaque étiquette provient d’évaluateurs participatifs : des travailleurs rémunérés qui lisent un commentaire et répondent à des questions à son sujet. Ils suivent les consignes d’évaluation de Perspective API. Deux types d’étiquettes comptent ici :
- La toxicité est la proportion d’évaluateurs ayant choisi « Toxique » ou « Très toxique ». Dans cette étude, un commentaire est toxique lorsque cette proportion atteint 0,5 ou plus.
- Les étiquettes d’identité indiquent les groupes de personnes mentionnés dans un commentaire. Un commentaire appartient à un groupe si au moins la moitié des évaluateurs ont choisi ce groupe.
Ce sont les jugements de quelques personnes par commentaire, pas des faits. Les évaluateurs ne sont pas toujours d’accord, et chacun a sa propre idée de ce qui est toxique. L’article indique aussi que des modèles antérieurs ont choisi certains commentaires pour l’étiquetage d’identité. Les évaluateurs voyaient ainsi souvent du contenu lié à l’identité. Gardez ces deux points en tête; les chiffres ci-dessous montrent leur importance.
Premières vérifications
Section intitulée « Premières vérifications »Lena charge l’échantillon et compte les partitions, les évaluateurs et les sous-groupes :
comments = load_sample("data/civil_comments_sample.csv.gz")print(comments.groupby("part").agg(comments=("id", "size"), toxic=("toxic", "sum"), toxic_rate=("toxic", "mean")).round(3))holdout = comments[comments["part"] == "holdout"]print("\nraters per comment (holdout): median", holdout["toxicity_annotator_count"].median(), "| exactly 4 raters:", round((holdout["toxicity_annotator_count"] == 4).mean(), 3), "| toxicity exactly 0.5:", int((holdout["toxicity"] == 0.5).sum()), "of", int(holdout["toxic"].sum()), "toxic")print("\nholdout slices:")print(pd.DataFrame({g: {"comments": int(holdout[g].sum()), "toxic_rate": round(holdout.loc[holdout[g] == 1, "toxic"].mean(), 3)} for g in GROUPS}).T)La sortie :
comments toxic toxic_ratepartdev 10000 1088 0.109holdout 30000 3393 0.113train 60000 6708 0.112
raters per comment (holdout): median 4.0 | exactly 4 raters: 0.57 | toxicity exactly 0.5: 964 of 3393 toxic
holdout slices: comments toxic_ratemale 3270.0 0.158female 3794.0 0.143LGBTQ 999.0 0.269christian 2991.0 0.096muslim 1551.0 0.238other_religions 792.0 0.144black 1093.0 0.314white 1771.0 0.290Ce que cela nous dit. Environ un commentaire sur neuf est toxique, dans chaque partition. La plupart des commentaires n’ont que 4 évaluateurs. Parmi les 3 393 commentaires toxiques des données de test réservées, 964 se situent exactement à 0,5 : souvent 2 évaluateurs sur 4. Pour ceux-là, aucune version ne peut avoir « raison ». Les deux versions sont mesurées avec les mêmes étiquettes, donc la comparaison reste équitable. Mais les chiffres absolus contiennent ce bruit.
Les sous-groupes diffèrent beaucoup. Les commentaires mentionnant des personnes noires ou blanches sont toxiques dans environ 31 % et 29 % des cas, respectivement. C’est 7,6 % pour les commentaires qui ne mentionnent aucun groupe. Chaque sous-groupe compte au moins 792 commentaires dans les données de test réservées. Ils sont donc assez grands pour être analysés avec des intervalles.
Les colonnes utilisées
Section intitulée « Les colonnes utilisées »| Colonne | Signification | Utilisation |
|---|---|---|
comment_text |
Le commentaire | La seule entrée des modèles |
toxicity |
Proportion d’évaluateurs ayant jugé le commentaire toxique | Cible : toxique à partir de 0,5 |
toxicity_annotator_count |
Nombre d’évaluateurs de toxicité | Qualité des étiquettes |
male, female, LGBTQ, christian, muslim, other_religions, black, white |
1 si au moins la moitié des évaluateurs d’identité ont choisi le groupe | Sous-groupes seulement, jamais une entrée |
part |
train, dev ou holdout |
La partition |
Définir le problème
Section intitulée « Définir le problème »Un commentaire est un cas. La décision est « retenir pour un modérateur » ou « afficher maintenant ». Elle se prend à l’arrivée du commentaire, à partir de son texte seulement. Le point de fonctionnement est fixé par le temps des modérateurs. Chaque version retient les 10 % de commentaires ayant ses scores les plus élevés. Chaque version a son propre seuil, établi sur les données de validation.
Les colonnes d’identité sont les données les plus sensibles ici. Elles ne servent jamais d’entrées ni à traiter un commentaire différemment. Elles servent seulement à vérifier les modèles, sous-groupe par sous-groupe.
Lena mesure deux choses par version, globalement et dans chaque sous-groupe :
- Le rappel : parmi les commentaires toxiques, la proportion retenue.
- Le taux de commentaires inoffensifs retenus : parmi les commentaires inoffensifs, la proportion retenue. C’est le taux de fausses alertes de Métriques de prédiction, mesuré dans un sous-groupe.
Voici un petit sous-groupe de 10 commentaires, construit pour montrer les deux mesures. T1 à T3 sont toxiques et B1 à B7 sont inoffensifs.
Description textuelle du diagramme
Dix commentaires dans un sous-groupe : trois toxiques, T1 à T3, et sept inoffensifs, B1 à B7. v1 retient T1, T2 et B1. Son rappel est de 2 sur 3, soit 0,67. Son taux de commentaires inoffensifs retenus est de 1 sur 7, soit 0,14. v2 retient T1, T2, T3, B1, B2 et B3. Son rappel est de 3 sur 3, soit 1,00. Son taux de commentaires inoffensifs retenus est de 3 sur 7, soit 0,43. v2 détecte tous les commentaires toxiques et retient trois commentaires inoffensifs.
v2 est meilleure pour le rappel et moins bonne pour le taux de commentaires inoffensifs retenus. Dans les vrais sous-groupes, les deux mesures peuvent aussi évoluer en sens opposés. Les règles surveillent donc les deux.
Les règles d’abord
Section intitulée « Les règles d’abord »Lena a écrit les règles de mise en production avant que quiconque entraîne un modèle. Elles sont dans release_rules.json. Le commit (enregistrement de modifications) qui les a ajoutées précède le script d’entraînement. Les voici, dans leur ordre fixe :
- B1, un critère bloquant : les phrases d’identité. Le cours a écrit 64 phrases courtes et inoffensives. Il utilise quatre modèles, comme « Je suis une personne… » et « Les personnes… viennent dans ce parc chaque fin de semaine. », chacun avec 16 mots désignant des groupes. Si v2 retient ne serait-ce qu’une phrase que v1 affiche, la mise en production s’arrête.
- B2, un critère bloquant : la régression par sous-groupe. La mise en production s’arrête si, dans l’un des 8 sous-groupes, v2 retient davantage de commentaires inoffensifs et si l’intervalle apparié à 95 % de la différence est entièrement au-dessus de +0,01.
- G1, une barrière : aucune perte globale. La borne inférieure de l’intervalle apparié du rappel, v2 − v1, doit être d’au moins −0,01.
- G2, une barrière : un gain mesurable. Cette borne inférieure doit dépasser 0. L’équipe ne remplace un modèle fonctionnel que pour un gain mesurable.
- O1, une limite : la vitesse. Le calcul des scores doit prendre moins de 1 seconde par 1 000 commentaires.
L’aire sous la courbe ROC globale et par sous-groupe est rapportée, sans servir de barrière. Pourquoi B2 utilise-t-il l’intervalle? Un sous-groupe de quelques centaines de commentaires inoffensifs varie sous l’effet du hasard. Une règle basée seulement sur l’estimation ponctuelle arrêterait de bonnes mises en production au hasard. « L’intervalle entier au-dessus de +0,01 » signifie que nous sommes assez certains d’une hausse réelle. v2 retient alors davantage de commentaires inoffensifs de ce groupe, avec une hausse de plus d’un sur cent.
Description textuelle du diagramme
Cinq étapes dans l’ordre. Étape 1 : écrire les règles, avant qu’un modèle existe. Étape 2 : entraîner v1 et v2 sur 60 000 commentaires; le seul changement est l’ajout de n-grammes de caractères. Étape 3 : un premier aperçu sur 10 000 commentaires de validation. Le seuil de chaque version est fixé pour en retenir 10 %. Étape 4 : examiner une seule fois les 30 000 commentaires de test réservés, globalement et pour 8 sous-groupes, avec des intervalles appariés. Étape 5 : décider selon les règles, dans l’ordre; rien ne change après l’étape 4. Les règles viennent d’abord pour qu’aucun résultat ne puisse les changer. Les données de test réservées viennent en dernier pour qu’aucun choix ne puisse être ajusté sur elles.
Deux versions, un changement
Section intitulée « Deux versions, un changement »Les deux versions transforment un commentaire en nombres avec TF-IDF : chaque mot ou morceau de texte reçoit un poids. Ce poids est élevé quand le morceau est fréquent dans ce commentaire et rare dans les autres. Une régression logistique apprend ensuite un poids par caractéristique et attribue à chaque commentaire un score de 0 à 1. Apprentissage automatique : du problème à un modèle fiable enseigne ces modèles; ici, ce sont simplement v1 et v2.
- v1, utilisée sur le site aujourd’hui, lit des mots et des paires de mots.
- v2 lit les mêmes éléments, plus des n-grammes de caractères : des suites de 2 à 5 lettres, comme
idiooudiot. C’est le seul changement. Il devrait permettre de reconnaître les insultes déguisées ou mal orthographiées.
def build(version): """v1: words and word pairs. v2: the same plus character n-grams. Same model.""" features = words() if version == "v1" else FeatureUnion([("words", words()), ("chars", chars())]) return Pipeline([("features", features), ("model", LogisticRegression(C=4, solver="liblinear"))])Les deux versions s’entraînent sur les mêmes 60 000 commentaires. Sur le portable du cours, le carnet a affiché :
v1: trained in 5 sv2: trained in 32 sSorties enregistrées et identifiants d’exécution
Section intitulée « Sorties enregistrées et identifiants d’exécution »Comme dans Établir une référence de base, l’évaluation ne consulte jamais un modèle en direct. Lena a enregistré une seule fois les scores des deux versions sur les données de validation et de test réservées. Chaque exécution a un identifiant d’exécution stable. Il combine la version et les premiers caractères d’une empreinte de ses scores enregistrés : v1-13f555 et v2-8b2aeb. Le carnet entraîne de nouveau les deux versions et compare ses scores aux scores enregistrés :
v1-13f555: largest difference 0.000000, held/shown decisions that differ: 0 of 40000v2-8b2aeb: largest difference 0.000000, held/shown decisions that differ: 0 of 40000Ce que cela nous dit. L’entraînement est reproductible ici. Sur un autre ordinateur, les derniers chiffres peuvent différer, et un commentaire exactement au seuil pourrait changer de catégorie. Tous les chiffres de cette page proviennent donc des sorties enregistrées.
Une référence de base pour la référence de base
Section intitulée « Une référence de base pour la référence de base »Que ferait-on sans modèle? Retenir 10 % des commentaires au hasard détecte environ 10 % des commentaires toxiques : un rappel de 0,10. Les deux versions devraient être largement au-dessus.
Un premier aperçu sur les données de validation
Section intitulée « Un premier aperçu sur les données de validation »Le seuil de chaque version est le score au-dessus duquel elle retient 10 % des commentaires de validation. Il vaut 0,254 pour v1 et 0,291 pour v2. Lena compare ensuite les versions sur les données de validation avec le bootstrap apparié de Incertitude et sous-groupes. Il utilise 2 000 rééchantillons des commentaires, la graine 2026 et le même rééchantillon pour les deux versions.
thresholds from dev: v1 0.253792 | v2 0.291032
recall (dev) v1 v2 diff 95% intervalall 0.534 0.549 +0.015 [-0.007, +0.036]
ROC AUC (dev)all 0.894 0.905 +0.011 [+0.006, +0.016]Ce que cela nous dit. Les deux versions dépassent largement le rappel aléatoire de 0,10. Sur les données de validation, v2 détecte quelques commentaires toxiques de plus, mais l’intervalle de la différence comprend 0. Son aire sous la courbe ROC est plus élevée, avec un intervalle au-dessus de 0. Dans le sous-groupe LGBTQ des données de validation, le taux de commentaires inoffensifs retenus est passé de 0,148 à 0,193. L’intervalle va de +0,004 à +0,086. C’est un signal d’alerte, mais pas un critère bloquant selon la règle. Lena inscrit les résultats de validation dans le journal d’exécution et ne change aucune règle. La validation sert à observer; les données de test réservées déterminent la décision.
Les données réservées, une seule fois
Section intitulée « Les données réservées, une seule fois »Avant de poursuivre, faites une prédiction. Sur les 30 000 commentaires réservés, le rappel de v2 sera-t-il meilleur, avec un intervalle au-dessus de 0? Chaque sous-groupe s’améliorera-t-il?
hold = holdout.merge(scores[["id", "v1", "v2"]], on="id")result = compare(hold, hold["v1"].to_numpy(), hold["v2"].to_numpy(), t1, t2)for m, title in (("recall", "recall: toxic comments held"), ("benign_held", "benign held: harmless comments held")): print(f"\n{title}\n{'':16s} v1 v2 diff 95% interval") for key in ["all", *GROUPS]: print(row(key, result[key], m))La sortie :
recall: toxic comments held v1 v2 diff 95% intervalall 0.512 0.532 +0.019 [+0.008, +0.031]male 0.545 0.530 -0.015 [-0.045, +0.014]female 0.486 0.523 +0.037 [+0.007, +0.065]LGBTQ 0.506 0.569 +0.063 [+0.027, +0.101]christian 0.411 0.436 +0.024 [-0.006, +0.054]muslim 0.593 0.566 -0.027 [-0.060, +0.005]other_religions 0.474 0.465 -0.009 [-0.072, +0.059]black 0.676 0.650 -0.026 [-0.059, +0.006]white 0.694 0.634 -0.060 [-0.089, -0.033]
benign held: harmless comments held v1 v2 diff 95% intervalall 0.048 0.044 -0.003 [-0.006, -0.002]male 0.080 0.073 -0.008 [-0.015, -0.001]female 0.064 0.062 -0.002 [-0.008, +0.005]LGBTQ 0.160 0.196 +0.036 [+0.015, +0.057]christian 0.041 0.043 +0.001 [-0.004, +0.007]muslim 0.172 0.149 -0.023 [-0.039, -0.007]other_religions 0.080 0.075 -0.004 [-0.021, +0.012]black 0.296 0.233 -0.063 [-0.086, -0.040]white 0.279 0.219 -0.060 [-0.077, -0.042]Description textuelle du graphique
Deux panneaux, une ligne par sous-groupe, avec le nombre de commentaires réservés entre crochets et une ligne pointillée à zéro différence.
En haut, le rappel, v2 moins v1. Tous les commentaires : +0,019, de +0,008 à +0,031. Femmes : +0,037. LGBTQ : +0,063, de +0,027 à +0,101. Personnes blanches : −0,060, de −0,089 à −0,033. Les intervalles des autres sous-groupes traversent 0.
En bas, le taux de commentaires inoffensifs retenus, v2 moins v1, avec une deuxième ligne à +0,01 pour la règle B2. Tous les commentaires : −0,003. Personnes noires : −0,063 et personnes blanches : −0,060, avec des intervalles nettement sous 0 dans les deux cas. Personnes musulmanes : −0,023. Hommes : −0,008. LGBTQ : +0,036, de +0,015 à +0,057, le seul intervalle entièrement au-dessus de +0,01. Les autres traversent 0.
Ce que cela nous dit. Globalement, v2 est meilleur selon les deux mesures. Il retient 1,9 point de plus des commentaires toxiques, et l’intervalle est au-dessus de 0. Il retient aussi moins de commentaires inoffensifs dans l’ensemble. La baisse est nette dans les sous-groupes des personnes noires, blanches, musulmanes et des hommes. C’est un vrai progrès.
Un sous-groupe évolue dans l’autre sens. Dans le sous-groupe LGBTQ, v2 retient 19,6 % des commentaires inoffensifs, contre 16,0 % pour v1. L’intervalle apparié va de +0,015 à +0,057 : entièrement au-dessus de la ligne B2. Et dans le sous-groupe des personnes blanches, v2 détecte moins de commentaires toxiques, soit −0,060. Aucune règle ne couvre ce cas; il est signalé.
Appliquer les règles, dans l’ordre
Section intitulée « Appliquer les règles, dans l’ordre »L’ordre compte. Les critères bloquants passent en premier, car une moyenne ne peut pas les compenser.
B1, les affirmations d’identité. Chaque version attribue un score aux 64 phrases inoffensives :
held by v1: 11 | held by v2: 6 of 64
held by v2 only (B1): text v1 v2I am a Muslim person. 0.248539 0.506179
held by v1 only: text v1 v2 My neighbour is gay, and she grows tomatoes. 0.365081 0.164753 Gay people come to this park every weekend. 0.513222 0.215809Muslim people come to this park every weekend. 0.261671 0.112739My neighbour is Black, and she grows tomatoes. 0.255615 0.175698 Black people come to this park every weekend. 0.515198 0.222521 White people come to this park every weekend. 0.350157 0.113373Sur cet ensemble, v2 est meilleur globalement : il retient 6 phrases, contre 11 pour v1. Mais v2 retient « Je suis une personne musulmane. », que v1 affiche, juste sous son seuil de 0,254. Selon la règle, une seule phrase suffit. B1 se déclenche.
Cette règle est-elle trop stricte, maintenant que v2 libère six autres phrases? Peut-être. Mais l’équipe l’a écrite avant tout résultat : une personne qui indique sa religion ne devrait jamais être retenue pour cela. Si vous voulez changer une règle après le résultat, faites-le pour la prochaine version. Ce n’est pas une raison de publier celle-ci.
B2, les sous-groupes. Dans le code, B2 tient sur une ligne. C’est la deuxième tâche du carnet (notebook) Jupyter :
b2_slices = [g for g in GROUPS if result[g]["interval"]["benign_held"]["difference"][0] > 0.01]Elle donne ['LGBTQ']. B2 se déclenche.
Les barrières et la limite. Le carnet applique chaque règle :
B1 identity statements BLOCKER ['I am a Muslim person.']B2 slice regression BLOCKER ['LGBTQ']G1 no overall loss passG2 a measurable gain passO1 scoring time pass
Decision: DO NOT SHIPDescription textuelle du diagramme
Les règles, lues de haut en bas sur les 30 000 commentaires réservés. B1, affirmations d’identité : « Je suis une personne musulmane. » est retenue seulement par v2. v1 lui attribue 0,249, sous son seuil de 0,254; v2 lui attribue 0,506, au-dessus de son seuil de 0,291. Critère bloquant. B2, régression par sous-groupe : dans le sous-groupe LGBTQ, le taux de commentaires inoffensifs retenus passe de 0,160 à 0,196. La différence est de +0,036, avec un intervalle de +0,015 à +0,057, entièrement au-dessus de +0,010. Critère bloquant. G1, aucune baisse globale : le rappel passe de 0,512 à 0,532, soit +0,019, avec un intervalle de +0,008 à +0,031. Réussite. G2, un gain mesurable : la borne inférieure, +0,008, est au-dessus de 0. Réussite. O1, temps de calcul des scores : 250 millisecondes pour 1 000 commentaires, contre une limite de 1 000. Réussite. Décision : ne pas publier v2. Deux critères bloquants, malgré un meilleur rappel global.
Lire les cas derrière le sous-groupe
Section intitulée « Lire les cas derrière le sous-groupe »Un intervalle indique votre degré de certitude sur une différence. Il ne dit pas quels commentaires ont changé. Lena ouvre donc le sous-groupe LGBTQ. Sur ses 730 commentaires réservés inoffensifs, v1 et v2 en retiennent tous deux 98 :
harmless LGBTQ comments: 730 | held by both: 98 | newly held by v2: 45 | released by v2: 19newly held with 30% or more raters saying toxic: 14gay newly held 16 | released 17lesbian newly held 5 | released 0homosexual newly held 22 | released 2transgender newly held 8 | released 0Ce que cela nous dit. v2 retient 45 nouveaux commentaires inoffensifs de ce sous-groupe et en libère 19. Les nouvelles rétentions se concentrent sur quelques mots. « Homosexuel » apparaît dans 22 des 45 commentaires, et dans seulement 2 des commentaires libérés. « Transgenre » et « lesbienne » apparaissent seulement dans les nouveaux commentaires retenus. Les fragments de caractères de ces mots portent une partie de la toxicité que v2 a apprise d’autres commentaires. Pour « gay », les deux versions retiennent et libèrent à peu près le même nombre de commentaires.
Chaque nouvelle rétention n’est pas forcément une erreur évidente : dans 14 des 45 cas, au moins 30 % des évaluateurs ont indiqué « toxique ». Dans les 31 autres, peu ou aucun évaluateur ne l’a fait. Voici un exemple; un de ses six évaluateurs l’a jugé toxique :
« Puisque Jésus n’a pas mentionné l’homosexualité, je suppose qu’il se concentrerait sur ce qui comptait : les pauvres, les personnes vulnérables, les exclus. »
v1 lui attribue 0,138 et l’affiche. v2 lui attribue 0,295, juste au-dessus de son seuil, et le retient. C’est le genre de commentaire que le site veut publier immédiatement.
La référence de base n’est pas équitable non plus
Section intitulée « La référence de base n’est pas équitable non plus »Un critère bloquant arrête une mise en production qui aggrave la situation. Il ne dit pas que l’ancienne version est bonne. Lena compare le taux de commentaires inoffensifs retenus par v1 entre les groupes. Elle utilise comme référence les commentaires qui ne mentionnent aucun groupe :
Description textuelle du graphique
Une ligne par groupe, avec le nombre de commentaires réservés entre crochets. Aucun groupe : 0,021. Personnes chrétiennes : 0,041. Femmes : 0,064. Hommes : 0,080. Autres religions : 0,080. LGBTQ : 0,160. Personnes musulmanes : 0,172. Personnes blanches : 0,279. Personnes noires : 0,296. Les quatre derniers sont bien plus à droite que les autres.
Ce que cela nous dit. v1 retient 2,1 % des commentaires inoffensifs qui ne mentionnent aucun groupe. Il retient 9,3 % des commentaires inoffensifs qui en mentionnent au moins un. Il retient aussi 29,6 % de ceux qui mentionnent des personnes noires. Une personne qui écrit sur sa propre identité attend beaucoup plus souvent un modérateur. Le modèle a appris que ces mots apparaissent souvent dans des commentaires toxiques. Les étiquettes des évaluateurs peuvent refléter en partie cette même perception.
C’est l’effet que les auteurs des données voulaient mesurer. Le résumé honnête : « v2 est meilleur que v1 pour la plupart des groupes et pire pour un groupe. Les deux retiennent beaucoup trop souvent des commentaires inoffensifs sur l’identité. »
La décision
Section intitulée « La décision »Lena écrit à Nadia en quatre parties, comme dans Compromis et régressions :
Décision : ne pas publier v2. Garder v1 sur le site pour le moment.
- Critères bloquants. v2 retient la phrase inoffensive « Je suis une personne musulmane. », que v1 affiche (règle B1). Sur les données réservées, v2 retient davantage de commentaires inoffensifs qui mentionnent des personnes LGBTQ : 19,6 % contre 16,0 %. La différence est de +0,036, avec un intervalle à 95 % de +0,015 à +0,057 (règle B2). Parmi ses 45 nouveaux commentaires retenus dans ce sous-groupe, 22 contiennent « homosexuel ».
- Preuves. v2 est meilleur globalement : rappel de 0,532 contre 0,512, soit +0,019 (intervalle de +0,008 à +0,031), sur 30 000 commentaires réservés. Il retient aussi moins de commentaires inoffensifs globalement et pour les auteurs noirs, blancs, musulmans et masculins.
- Exploitation. v2 attribue des scores à 1 000 commentaires en environ 250 millisecondes, contre environ 30 pour v1. Cela respecte la limite.
- Prochaine étape. Conserver les gains de v2 et corriger sa régression. Entraîner le prochain candidat avec davantage de commentaires étiquetés qui mentionnent des personnes LGBTQ et sont inoffensifs. Puis appliquer les mêmes règles. Ajouter des insultes déguisées comme « 1d1ot » aux phrases de test, puisque c’était l’objectif de v2.
Une prédiction sur de nouveaux commentaires
Section intitulée « Une prédiction sur de nouveaux commentaires »La dernière étape de tout modèle est une nouvelle entrée. L’équipe du cours a écrit six nouveaux commentaires, et les deux versions entraînées leur attribuent des scores :
text v1 held_v1 v2 held_v2 Thanks for the clear report on the new bike lanes. 0.009 False 0.004 False As a gay man, I think the council made the right call. 0.165 False 0.159 FalseMy wife and I are Muslim, and we loved the food festival. 0.126 False 0.091 False The council should publish the budget before the vote. 0.030 False 0.012 False You are an idiot and nobody wants to read your garbage. 0.998 True 1.000 True What an 1d1ot. Go away. 0.124 False 0.033 FalseCe que cela nous dit. Les deux versions affichent les quatre commentaires inoffensifs et retiennent l’insulte explicite. Aucune ne retient « Quel 1d1ot. Va-t’en. », même si les mots déguisés étaient la raison d’être de v2. Un exemple ne prouve rien. Mais il montre que l’équipe n’a jamais testé la promesse de v2; la prochaine évaluation devrait le faire.
Erreur courante
L'AUC globale a augmenté, publions la version
Symptôme : Kwame montre un seul nombre : AUC ROC de 0,887 → 0,902 sur les données réservées, avec un intervalle de +0,012 à +0,017. « Ce n’est pas du bruit. Publions la version. » Deux semaines plus tard, des lecteurs écrivent : leurs commentaires sur le mariage entre personnes de même sexe attendent pendant des heures.
Cause : le nombre est juste, mais répond à la mauvaise question. Il fait la moyenne sur 30 000 commentaires; le sous-groupe LGBTQ en compte 999. Un gain sur la plupart des commentaires masque une perte sur quelques-uns. Personne n’a examiné les sous-groupes ni les critères bloquants.
Correction : décidez dans l’ordre fixé : critères bloquants pour chaque règle, puis sous-groupes avec intervalles appariés, puis gain global. Écrivez les règles avant les résultats. Présentez l’AUC dans la fiche de résultats comme preuve, jamais comme barrière.
Constats et limites
Section intitulée « Constats et limites »- Meilleur en moyenne ne veut pas dire meilleur pour tout le monde. v2 améliore le rappel globalement et pour la plupart des groupes, mais il est pire pour un groupe d’auteurs. Seule l’analyse par sous-groupe le montre.
- Les règles écrites d’avance protègent la décision. L’examen des données de développement a révélé le signal d’alerte LGBTQ. Sans règles fixes, l’équipe aurait pu le minimiser ou ajuster une règle jusqu’à ce que v2 réussisse.
- Le point de fonctionnement fait partie du résultat. Dans la tâche « changer une chose » du carnet, une file de 5 % augmente les deux seuils. La différence LGBTQ diminue alors à +0,004 (intervalle de −0,009 à +0,018), et B2 ne se déclenche pas. Un résultat vaut pour le point de fonctionnement auquel il a été mesuré.
- Les étiquettes reflètent le jugement de quelques personnes. La comparaison est équitable, mais un rappel absolu d’environ 0,5 reflète en partie le bruit des étiquettes, pas seulement les modèles.
- L’échantillon n’est pas un vrai flux de commentaires. WILDS conserve seulement les commentaires avec des étiquettes d’identité. Des modèles antérieurs en ont choisi certains pour leur contenu lié à l’identité. Dans ces données réservées, 40 % des commentaires mentionnent un groupe. Sur un vrai site, les taux globaux seraient différents.
- Seulement 8 groupes. Les personnes handicapées, par exemple, n’ont pas de sous-groupe ici, et « autres religions » regroupe de nombreuses croyances. La vérification ne peut pas voir ce qu’elle ne mesure pas.
- Une seule exécution, des commentaires en anglais de 2015 à 2017. La langue change, et un modèle entraîné sur ces années rencontre de nouveaux mots.
Utilisation responsable
Section intitulée « Utilisation responsable »Cette étude de cas traite d’étiquettes sur la religion, la race, le genre et la sexualité. Elle traite aussi de commentaires qui attaquent des personnes pour ces raisons. Certaines précautions font partie de la méthode :
- Les étiquettes d’identité servent à vérifier, jamais à décider. Elles ne sont pas des entrées du modèle. Aucun commentaire ne reçoit un seuil différent selon le groupe qu’il mentionne. Sur un vrai site, les nouveaux commentaires n’ont pas ces étiquettes. Vous les obtenez d’un jeu de données d’évaluation étiqueté, comme ici.
- Retenir, pas supprimer. Les deux versions envoient seulement les commentaires à une personne. Un modèle qui supprime des commentaires ou bannit des auteurs exige des critères beaucoup plus stricts. Une personne doit toujours décider.
- Protéger les personnes dont on parle et celles qui en parlent. Un filtre de toxicité qui retient « Je suis une personne noire. » réduit au silence les personnes qu’il doit protéger. Mesurez le taux de commentaires inoffensifs retenus par groupe, pas seulement le rappel.
- Ne pas lire le tableau des sous-groupes comme des faits sur les groupes. « Les commentaires qui mentionnent des personnes noires sont toxiques dans 31 % des cas » décrit cet échantillon et ces évaluateurs. Cela ne dit rien sur un groupe de personnes.
- Nommer les limites des étiquettes. Des évaluateurs participatifs ont étiqueté chaque commentaire, généralement à quatre par commentaire, chacun avec son propre point de vue. Reconnaissez leur contribution et ne traitez pas leur majorité comme la vérité.
- Présenter les données avec soin. Ne publiez pas d’exemples toxiques dans un portfolio ou une diapositive. Les décomptes et les exemples inoffensifs suffisent.
En faire un projet de portfolio
Section intitulée « En faire un projet de portfolio »Cette étude de cas montre à un employeur que vous savez tester une nouvelle version comme une équipe rigoureuse. Personnalisez-la avec un changement, par exemple vos propres phrases d’identité ou un neuvième sous-groupe. Puis publiez-la et rendez-la facile à lire en cinq minutes.
Quoi mettre dans le dépôt :
README.md, avec le modèle ci-dessous.release_rules.json, enregistré dans un commit (enregistrement dans le dépôt) avant vos résultats, pour que l’historique montre l’ordre.- Le carnet, exécuté de haut en bas, avec ses sorties.
- Les scores sauvegardés avec leurs identifiants d’exécution, et
RUNS.md: ce que vous avez exécuté, quand et les résultats obtenus. DECISION.md: la décision en quatre parties, comme ci-dessus.- La source des données et la licence. CC0 n’exige aucune attribution. Reconnaissez tout de même la contribution des auteurs des commentaires, des évaluateurs participatifs et des auteurs du jeu de données. Ajoutez un lien vers les données et la somme de contrôle, plutôt que de copier 17 Mo.
Un modèle de README :
# Regression test of a comment classifier, by slice
## QuestionCan v2 (words + character n-grams) replace v1 (words) on a review queue that holds 10% of comments?
## Data and licenceCivil Comments with identity labels, WILDS version (Borkan et al. 2019; Koh et al. 2021), CC0.Fixed sample: 60,000 train, 10,000 dev, 30,000 holdout. Labels by crowd raters (median 4 per comment).
## MethodRules and blockers written first (release_rules.json). Thresholds from dev. Holdout read once.Recall and benign-held rate, overall and for 8 identity slices, paired bootstrap 95% intervals(2,000 resamples, seed 2026). Run IDs v1-13f555 and v2-8b2aeb.
## ResultDo not ship. v2 is better overall (recall +0.019 [+0.008, +0.031]) and fails two blockers:a harmless identity sentence newly held, and more harmless LGBTQ comments held(+0.036 [+0.015, +0.057]).
## LimitsNoisy labels, a sample rich in identity content, 8 groups only, one operating point.Comment le décrire en entrevue, en deux phrases : « J’ai testé la régression d’une nouvelle version d’un classificateur de toxicité par rapport à celle en production. J’avais écrit les critères bloquants et les règles par sous-groupe avant tout résultat; la version était meilleure en moyenne, mais retenait plus de commentaires inoffensifs d’auteurs LGBTQ, alors j’ai recommandé par écrit de ne pas la publier. »
Aller plus loin :
- Entraînez une v3 qui corrige la régression, par exemple avec davantage de commentaires LGBTQ inoffensifs dans les données d’entraînement. Utilisez les données de développement pour la développer. Expliquez comment vous préserveriez l’intégrité des données réservées pour une deuxième décision.
- Répétez la décision avec trois tailles de file, 5 %, 10 % et 15 %, et décrivez comment le point de fonctionnement la modifie.
- Comparez avec l’étude de cas sur le juge, Calibrer un juge modèle par rapport à des notes humaines. Là aussi, les étiquettes sont des jugements humains.
Vérification des connaissances
Section intitulée « Vérification des connaissances »Vérifiez votre compréhension
v2 retient 6 des 64 phrases identitaires et v1 en retient 11, mais la règle B1 bloque v2. Est-ce une mauvaise règle? Que devrait faire l'équipe?
Afficher la réponse
B1 pose une question précise : le candidat retient-il une phrase identitaire inoffensive que la référence de base affiche? Oui, v2 retient : « Je suis une personne musulmane. » B1 se déclenche donc, même si v2 est meilleur sur l’ensemble des données. La règle est peut-être trop stricte. L’équipe peut discuter d’un changement, par exemple : « ne pas retenir plus de phrases que la référence de base ». Mais elle doit modifier la règle par écrit pour la prochaine version, avant d’en connaître les résultats. Modifier une règle après avoir vu le résultat qu’elle bloque revient à ne pas avoir de règle. Pour cette version, l’équipe conserve B1; B2 bloquerait v2 de toute façon.
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
Sur les données de développement, le taux de commentaires LGBTQ inoffensifs retenus a augmenté de +0,045, avec un intervalle de +0,004 à +0,086. B2 ne s'est pas déclenchée. Sur les données réservées, la hausse était de +0,036, avec un intervalle de +0,015 à +0,057. B2 s'est déclenchée. Expliquez pourquoi, et pourquoi l'équipe n'a pas agi après le résultat sur les données de développement.
Afficher la réponse
B2 se déclenche seulement lorsque tout l’intervalle dépasse +0,01. Sur les données de développement, le sous-groupe compte 243 commentaires inoffensifs. L’intervalle est donc large, et sa borne inférieure, +0,004, est sous la limite. Sur les données réservées, le sous-groupe compte 730 commentaires inoffensifs. L’intervalle est donc plus étroit, et sa borne inférieure, +0,015, dépasse la limite. L’estimation ponctuelle était même un peu plus élevée sur les données de développement, mais les preuves étaient plus faibles. L’équipe n’a rien changé après avoir examiné les données de développement. Ces données servent à examiner les résultats; les données réservées servent à prendre la décision. Elle a consigné l’avertissement dans le journal d’exécution et a attendu.
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
Nadia demande : « v2 retient moins de commentaires inoffensifs au total, et pour les personnes noires, blanches, musulmanes et les hommes. Alors, ce n'est pas plus équitable que v1? » Que répondez-vous?
Afficher la réponse
v2 est meilleur pour la plupart des groupes, et c’est un vrai gain : les intervalles de ces sous-groupes sont sous 0. Mais il est moins bon pour un groupe. Il retient plus de commentaires inoffensifs sur les personnes LGBTQ : 19,6 % contre 16,0 %. L’intervalle dépasse la limite convenue. Une version qui aide la plupart des auteurs, mais nuit à un groupe, n’est pas « plus équitable ». Elle déplace le préjudice. De plus, les deux versions retiennent beaucoup trop souvent les commentaires inoffensifs qui mentionnent un groupe. v1 en retient 9,3 %, contre 2,1 % pour les commentaires sans mention de groupe. La bonne réponse est une v3 qui conserve les gains de v2 sans la régression pour les personnes LGBTQ. Il faut aussi un plan pour réduire l’écart pour chaque groupe.
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
- Vous avez écrit les règles avant qu’un modèle existe : deux critères bloquants, deux barrières, une limite et un point de fonctionnement fixe.
- Vous avez entraîné deux versions avec un seul changement et enregistré leurs scores avec des identifiants d’exécution. Vous avez fixé chaque seuil sur les données de développement.
- Sur les données réservées figées, v2 était meilleur dans l’ensemble : rappel de +0,019, intervalle de +0,008 à +0,031.
- Deux critères bloquants l’ont arrêté. Il retenait une nouvelle phrase inoffensive : « Je suis une personne musulmane. » Il retenait aussi plus de commentaires LGBTQ inoffensifs : +0,036, intervalle de +0,015 à +0,057.
- Les cas du sous-groupe ont fait ressortir quelques mots. La référence de base elle-même retient beaucoup plus souvent les commentaires inoffensifs sur des groupes que les autres commentaires.
- Vous avez écrit une décision dictée par le résultat : ne pas publier v2 et préciser ce que le prochain candidat doit corriger.
Ensuite, le travail final : construisez le banc d’évaluation complet de l’assistant de soutien, du jeu de données d’évaluation à la décision de publication.
Leçon suivante : Travail final