Skip to content
Guides10 min read

Certifier les étiquettes d'un LLM avec un échantillon humain en aveugle

Gardez les étiquettes d'un LLM seulement si un échantillon humain aléatoire en aveugle place l'erreur sous la cible, et donnez des prévalences à intervalle corrigé.

Potato Team

Pour décider quelles étiquettes d'un LLM garder sans les vérifier une à une, faites étiqueter par des personnes un échantillon aléatoire en aveugle, choisissez un seuil de confiance sur une moitié de cet échantillon, et testez sur l'autre moitié que le taux d'erreur parmi les étiquettes au-dessus du seuil est inférieur à votre cible. Pour les chiffres de prévalence, corrigez l'estimation du modèle par ses erreurs sur ce même échantillon, ce qui donne un intervalle qui reste valide quelle que soit la qualité du modèle.

Une façon courante de vérifier des étiquettes de LLM consiste à lire quelques dizaines de sorties et, si elles semblent justes, à publier le jeu de données avec une phrase comme « un LLM a étiqueté les données et nous les avons vérifiées par sondage ». Cette phrase ne dit pas à quelle fréquence les étiquettes sont fausses, et un relecteur ne peut pas savoir si la vérification aurait repéré un taux d'erreur de 15 %. Une vérification qui étaye un chiffre répond à trois questions : quelles étiquettes machine garder, de combien s'écarte un taux calculé à partir d'étiquettes machine, et si un modèle peut remplacer une personne.

Les biais des vérifications par sondage et des pré-étiquettes relues

Deux habitudes font paraître une étiquette machine meilleure qu'elle ne l'est. La première consiste à vérifier les items sur lesquels le modèle était le moins sûr. Vérifier ces items trouve vite des erreurs, mais les items vérifiés ne sont pas un échantillon du jeu de données, donc leur taux d'erreur n'estime rien sur le reste. La seconde consiste à mesurer l'accord sur des étiquettes que des personnes ont données pendant que la réponse du modèle était à l'écran. Une suggestion tire la réponse vers elle, donc l'accord mesuré sur des pré-étiquettes relues est plus élevé que l'accord mesuré en aveugle. Pré-annotation par LLM traite plus en détail ce biais d'automatisation.

Une vérification qui étaye un chiffre a donc besoin de trois propriétés. Les items vérifiés sont tirés au hasard avec des probabilités d'inclusion connues. Les personnes qui les étiquettent ne peuvent pas voir la réponse du modèle. Les étiquettes qui choisissent une règle sont différentes de celles qui la testent.

Prédiction sélective et risque sélectif

La prédiction sélective signifie qu'un modèle n'étiquette que les items où sa confiance dépasse un seuil et s'abstient sur les autres, qui vont à des personnes. La quantité à contrôler est le risque sélectif, le taux d'erreur parmi les étiquettes que le modèle garde. Par exemple, un seuil qui garde 70 % des items avec un taux d'erreur de 4 % peut être plus utile qu'un modèle qui étiquette tout avec 12 % d'erreur.

Choisir le seuil et le tester sur les mêmes étiquettes surestime son efficacité, c'est pourquoi l'échantillon humain est partagé. Une moitié, la partition dev, choisit le seuil. L'autre moitié, la partition cert, le teste avec un test binomial unilatéral de l'hypothèse selon laquelle l'erreur parmi les étiquettes acceptées dépasse la cible. Si cette hypothèse est rejetée, le seuil est certifié au niveau de confiance énoncé. Le Learn-then-Test (Angelopoulos et al., 2025) traite le choix d'un seuil comme un problème de tests multiples. L'une de ses procédures teste les seuils candidats dans un ordre fixe et s'arrête au premier qui échoue, ce qui lui permet d'essayer plusieurs seuils sans perdre la garantie.

Ces tests demandent des échantillons plus grands que la plupart des vérifications par sondage. Supposons que la cible soit au plus 10 % d'erreurs avec une confiance de 90 %, et qu'il s'agisse du premier test d'un modèle unique sans découpage par classe, que Potato effectue à un niveau d'environ 0,06 (la section suivante explique pourquoi). Avec 100 étiquettes acceptées dans la partition cert, le test ne passe que si au plus 5 sont fausses. Une cible de 5 % exige au plus 1 étiquette fausse sur 100, ou au plus 4 sur 200. Un modèle dont le vrai taux d'erreur est de 7 % passe ce premier test environ 29 % du temps avec 100 étiquettes cert acceptées, et environ 56 % du temps avec 300.

Tests répétés et budget d'erreur

Les personnes continuent d'étiqueter après le premier test, et relancer le test jusqu'à ce qu'il passe transformerait une probabilité de 10 % d'obtenir un certificat erroné en quelque chose de bien plus grand. Une solution consiste à donner à chaque test une part décroissante du budget d'erreur. Potato attribue au test numéro k la part 6 / (pi^2 k^2) de l'erreur autorisée, si bien que le premier test reçoit 61 %, le deuxième 15 %, et que les parts s'additionnent pour former le budget entier sur l'ensemble des tests possibles. Essayer un nouveau prompt ou un nouveau modèle compte comme un nouveau test, parce que c'est une chance de plus de passer par hasard.

La prévalence par inférence assistée par prédiction

Beaucoup d'études ont davantage besoin d'un taux que d'un jeu de données, comme la part des messages toxiques ou la part des exécutions d'agent qui réussissent. Compter les étiquettes machine donne un taux biaisé dès que les erreurs du modèle penchent d'un côté. Ne compter que l'échantillon humain donne un taux sans biais, mais avec un intervalle large.

L'inférence assistée par prédiction (Angelopoulos et al., 2023) combine les deux. Elle calcule le taux à partir des étiquettes machine sur tous les items, puis le corrige par l'erreur moyenne du modèle sur l'échantillon étiqueté par des personnes. L'intervalle est valide quelle que soit la qualité du modèle. PPI++ ajuste le poids accordé aux étiquettes machine, si bien qu'un bon modèle rend l'intervalle plus étroit que ce que les personnes seules obtiendraient, et qu'un mauvais ne l'élargit pas. Quand l'échantillon humain a été tiré avec des probabilités inégales, un estimateur par différence de Horvitz-Thompson joue le même rôle.

Dans l'exemple de traces d'agents fourni avec Potato, un juge LLM a évalué 288 traces d'agents synthétiques écrites pour l'exemple, chacune avec un résultat de référence, et a annoncé que 76 % réussissaient. L'intervalle par inférence assistée par prédiction, obtenu avec le même juge et un échantillon humain, était 0,66 [0,57 ; 0,76], et le taux de référence dans les données était de 0,60. Le juge avait raison sur 80 % des traces prises une à une et surestimait pourtant le taux de 16 points, parce que ses erreurs penchaient vers « succès ».

Le test de l'annotateur alternatif

Une cible d'exactitude fixe peut être la mauvaise question quand les personnes ne sont pas d'accord. Si deux annotateurs attentifs s'accordent sur 85 % des items, on ne peut démontrer qu'un étiqueteur, quel qu'il soit, a « raison » à 95 %, parce que la référence est elle aussi bruitée. Le test de l'annotateur alternatif (Calderon et al., 2025) pose plutôt une question relative. En écartant tour à tour chaque personne, il teste si le modèle s'accorde avec les personnes restantes au moins aussi souvent que la personne écartée, à une marge près. Il lui faut des items étiquetés par plusieurs personnes, et l'implémentation de Potato attend au moins trois annotateurs avec 30 items chacun. Accord des juges LLM présente la version de cette comparaison fondée sur le kappa et la façon de vérifier la calibration d'un juge.

Les contrats du moteur d'étiquetage de Potato

À partir de la version 2.11, le moteur d'étiquetage de Potato exécute ces tests sous forme de contrats. Il tire l'échantillon aléatoire en aveugle, le sert aux annotateurs en masquant toute réponse machine, le partage entre dev et cert, et certifie à mesure que les étiquettes arrivent. Cette configuration garde les étiquettes de sentiment d'un LLM là où au plus 10 % sont fausses avec une confiance de 90 %, et donne la prévalence de chaque étiquette avec un intervalle à 90 % :

yaml
assignment_strategy: engine
 
labeling_engine:
  enabled: true
  sources:
    - id: llm
      kind: llm
      endpoint_type: vllm
      model: google/gemma-4-12B-it-qat-w4a16-ct
      base_url: http://localhost:8001/v1
      confidence: {method: logprob}
  contracts:
    - id: accuracy
      kind: selective_risk
      schema: sentiment
      error: 0.1
      confidence: 0.9
    - id: prevalence
      kind: ppi
      schema: sentiment
      confidence: 0.9
  budgets:
    human_labels: 400

Une confidence de 0.9 est la valeur par défaut de Potato pour tous les contrats. La source lit la confiance dans les log-probabilités des tokens, parce qu'un seuil a besoin d'une confiance qui sépare les bonnes réponses des mauvaises, et qu'une confiance que le modèle énonce en mots est la moins fiable des méthodes que propose Potato. L'exemple textuel de Potato traite 481 critiques avec Laya en premier et ce LLM comme dernier niveau. Dans cette exécution, le contrat à 10 % a été respecté avec 165 étiquettes humaines, et le moteur a accepté 316 étiquettes machine, toutes venues du LLM, car le seuil de Laya n'a jamais été fixé. Leur erreur mesurée par rapport aux étiquettes de référence était de 7,6 %. potato label certificate config.yaml affiche ce qui a été testé, sur combien d'étiquettes, et avec quelles versions de modèle et de prompt.

Les limites de la certification sur échantillon en aveugle

Chacune de ces garanties porte sur l'accord avec les personnes qui ont étiqueté l'échantillon. Si elles sont négligentes ou mal formées, un contrat respecté certifie l'accord avec des personnes négligentes : vérifiez donc les annotateurs par recouvrement et par contrôle qualité avant de vous fier à un certificat.

Une confiance qui ne varie jamais ne donne rien à séparer à un seuil. Le juge de l'exemple de traces d'agents attribuait une confiance de 1,0 à chaque trace, si bien qu'aucun seuil ne pouvait passer, et Potato marque un tel contrat infeasible au lieu de tout accepter. L'intervalle de prévalence fonctionnait quand même sur les mêmes données, parce qu'il ne dépend pas de la confiance.

Sur les tâches subjectives, où les personnes divergent pour des raisons qui ont leur place dans les données, il n'existe pas forcément une seule bonne réponse par item. Comparez plutôt la distribution des étiquettes du modèle à la façon dont les personnes se partagent, ce que le contrat distributional de Potato rapporte par rapport à un plafond de bruit calculé par moitiés. Lancez potato label status config.yaml après le premier passage pour voir combien d'étiquettes humaines il manque encore à chaque contrat avant de pouvoir passer.

Pour aller plus loin

Références

  1. Angelopoulos, A. N., Bates, S., Candès, E. J., et al. (2025). Learn then test: Calibrating predictive algorithms to achieve risk control. The Annals of Applied Statistics. https://doi.org/10.1214/24-AOAS1998
  2. Angelopoulos, A. N., Bates, S., Fannjiang, C., et al. (2023). Prediction-powered inference. Science, 382(6671). https://doi.org/10.1126/science.adi6000
  3. Angelopoulos, A. N., Duchi, J. C., and Zrnic, T. (2023). PPI++: Efficient prediction-powered inference. arXiv. https://arxiv.org/abs/2311.01453
  4. Calderon, N., Reichart, R., and Dror, R. (2025). The alternative annotator test for LLM-as-a-judge: How to statistically justify replacing human annotators with LLMs. Proceedings of ACL 2025. https://aclanthology.org/2025.acl-long.782/