Skip to content

Moteur psychométrique

La théorie de la réponse à l'item appliquée à l'annotation. Chaque étiquette reçoit une probabilité a posteriori et un intervalle de confiance au lieu d'un simple vote majoritaire, et le modèle s'ajuste sans étiquettes étalons ni LLM.

Nouveau dans la v2.7.0

Potato peut traiter votre étude d'annotation pour ce qu'elle est vraiment : un instrument de mesure. La couche psychométrique ajuste un modèle de théorie de la réponse à l'item (TRI) en direct, au fil de l'arrivée des annotations, en estimant conjointement l'étiquette vraie de chaque élément sous forme de probabilité, l'aptitude de chaque annotateur avec son erreur type, la difficulté de chaque élément, et un diagnostic de discrimination par élément qui signale les problèmes probables de livre de codes.

Aucune étiquette étalon n'est nécessaire et aucun LLM n'intervient. Le modèle (une généralisation multiclasse de GLAD, Whitehill et al. 2009) part du seul motif des accords, comme un test standardisé apprend quelles questions sont difficiles sans que personne ne le lui dise. Les ajustements sont déterministes et prennent quelques millisecondes à l'échelle d'une étude d'annotation.

L'aptitude des annotateurs estimée en direct, avec intervalles de confiance, si bien que chaque étiquette reçoit une probabilité a posteriori plutôt qu'un simple vote.

Configuration

yaml
# Adaptive routing is opt-in via the standard assignment strategy key.
# Omit this line to keep your existing strategy and use psychometrics
# as a pure analytics layer.
assignment_strategy: psychometric
 
# Give items a redundancy target so early-stopped items translate into
# concrete saved judgments on the dashboard.
num_annotators_per_item: 4
 
psychometrics:
  enabled: true
  schema: sarcasm            # scheme to model; default: first radio/likert scheme
  refit_interval: 5          # refit after this many new labels (fits are ~ms)
  min_observations: 20       # cold-start gate before adaptive routing engages
  min_annotators_per_item: 2 # never early-stop an item below this many annotators
  confidence_threshold: 0.95 # posterior at which an item counts as resolved
  cost_per_judgment: 0.08    # optional: expresses savings in currency
  discrimination_flag_threshold: -0.2  # codebook-bug flag sensitivity

Les schémas pris en charge sont catégoriels à choix unique : radio et likert (les points d'une échelle de Likert sont traités comme des catégories nominales). Les schémas à choix multiples ne sont pas modélisés.

Des étiquettes avec barres d'erreur

Au lieu de sarcastic (2 of 3 votes), l'export indique sarcastic, p = 0.94 [0.88 – 0.97]. La probabilité est celle du modèle a posteriori, qui pèse qui a voté et pas seulement combien de personnes ont voté, et l'intervalle est une bande de sensibilité de ±1 erreur type sur les estimations d'aptitude.

En aval, vous pouvez entraîner sur des étiquettes souples, filtrer les jeux d'évaluation pour ne garder que les éléments à forte confiance, ou traiter les éléments à faible probabilité comme réellement ambigus plutôt que comme du bruit. Voir l'annotation en étiquettes souples pour l'approche complémentaire, qui consiste à recueillir des distributions directement auprès des annotateurs.

L'aptitude des annotateurs, présentée honnêtement

L'aptitude θ est estimée à partir des motifs d'accord. Une valeur de 1.0 est la valeur a priori d'un nouvel annotateur, 0 signifie que ses étiquettes ne portent aucune information, et les valeurs négatives signifient qu'il se trompe systématiquement. Chaque estimation est livrée avec une erreur type : un annotateur qui n'a que 12 étiquettes a une longue moustache, et le tableau de bord le dit.

Ne prenez pas de décisions concernant les personnes sur la foi d'une longue moustache. Les erreurs types sont approximatives (information de Fisher au mode) et légèrement optimistes par construction.

Le détecteur de problèmes de livre de codes

La difficulté des éléments est estimée conjointement avec l'aptitude, mais le signal le plus utile est la discrimination : la corrélation, sur chaque élément, entre l'aptitude de l'annotateur et la justesse de sa réponse.

Quand la discrimination est fortement négative, c'est-à-dire quand ce sont vos meilleurs annotateurs qui s'écartent du consensus de la foule, ce sont en général les consignes qui sont fausses ou ambiguës pour cet élément, pas les annotateurs. Le tableau de bord regroupe ces cas sous « Problèmes probables du livre de codes ». Corrigez les consignes, puis revenez-y. C'est dans les salles multijoueur que les équipes vont d'ordinaire les résoudre.

Aiguillage adaptatif

Avec assignment_strategy: psychometric, quand un annotateur demande du travail, les éléments restants sont classés selon le gain d'information attendu exact, à un pas, que produirait l'étiquetage de cet élément par cet annotateur. Les éléments à forte incertitude vont d'abord aux annotateurs les plus aptes, et les éléments dont la probabilité a posteriori dépasse déjà confidence_threshold (avec au moins min_annotators_per_item annotateurs) cessent de consommer du budget. Par rapport à un plan à N annotateurs fixes par élément, les jugements économisés sont comptés sur le tableau de bord, et chiffrés si vous définissez cost_per_judgment.

Deux remarques pratiques :

  • Démarrage à froid. Tant que min_observations étiquettes n'existent pas, l'attribution retombe sur du tirage aléatoire, car le modèle a besoin d'annotateurs qui se recoupent avant de pouvoir séparer l'aptitude de la difficulté. Le tableau de bord affiche un indicateur de préchauffage pendant cette phase.
  • Lots. L'attribution a lieu quand la file d'un utilisateur se remplit. Le classement est le plus frais quand les files sont courtes ; de très gros lots par utilisateur diluent l'adaptativité.

Analyse de puissance avant de dépenser

Tout projet d'annotation devine sa réponse à « combien d'annotateurs par élément ? ». Le concepteur d'étude y répond par une simulation de Monte-Carlo à graine fixée :

bash
python -m potato.psychometrics.design --items 500 --accuracy 0.75 \
    --classes 3 --target-ci 0.10 --cost 0.08
text
ann/item   alpha     95% interval   width  majority acc  judgments       cost
       2   0.392 [ 0.330,  0.439]   0.109         0.751       1000      80.00
       3   0.388 [ 0.338,  0.431]   0.093         0.864       1500     120.00  <- recommended

La recommandation est la plus petite redondance dont l'intervalle à 95 % sur l'α de Krippendorff est plus étroit que --target-ci, autrement dit le plan le moins cher qui donne encore une estimation d'accord suffisamment précise pour être défendue. L'entrée --accuracy se mesure au mieux sur un petit pilote. La même analyse est disponible sur le tableau de bord et comme API d'administration (GET /psychometrics/api/design).

Vous pouvez aussi la lancer de façon interactive dans le navigateur avec le calculateur de puissance d'annotation.

Points de terminaison

Tous les points de terminaison exigent un accès administrateur (RBAC VIEW_ADMIN_DASHBOARD ; le mode debug et la clé d'API d'administration partagée passent).

Point de terminaisonObjet
GET /psychometrics/dashboardTableau de bord en direct
GET /psychometrics/api/statsAgrégats du tableau de bord (force un nouvel ajustement)
GET /psychometrics/api/exportExport enrichi : probabilités a posteriori, bandes, aptitudes
GET /psychometrics/api/designAnalyse de puissance

Rapport avec MACE

Potato propose aussi MACE, qui estime la compétence des annotateurs et les étiquettes prédites en analyse a posteriori. Les deux sont cousins, issus de la même littérature, mais font des travaux différents.

MACEPsychométrie
Modèle d'annotateurcompétence « compétent » ou « devineur »aptitude continue avec erreurs types
Modèle d'élémentaucundifficulté + discrimination (signalement des problèmes de livre de codes)
Moment d'exécutionanalyse par lots après N annotationsen direct, dans la boucle d'attribution
Pilote l'attributionnonoui, par aiguillage au gain d'information et arrêt anticipé
Incertitude sur les étiquettesentropieprobabilité a posteriori + intervalle de sensibilité
Planification avant l'étudenonanalyse de puissance de Monte-Carlo

Utilisez MACE pour un relevé rapide de compétence sur n'importe quel schéma catégoriel (il couvre aussi multiselect). Utilisez la psychométrie quand vous voulez une mesure sensible à la difficulté, qui agit sur l'étude pendant qu'elle se déroule.

Dépannage

  • Le tableau de bord reste indéfiniment en « préchauffage ». Le modèle a besoin d'au moins deux étiquettes distinctes et d'annotateurs qui se recoupent. Avec un seul annotateur ou des étiquettes unanimes, l'ajustement est dégénéré par construction. Ajoutez des annotateurs ou abaissez min_observations.
  • assignment_strategy: psychometric est défini mais l'aiguillage a l'air aléatoire. C'est le repli du démarrage à froid. Regardez l'indicateur de préchauffage et min_observations.
  • Toutes les aptitudes sont proches de 1.0 avec de longues moustaches. Le recoupement est encore insuffisant. Les aptitudes se séparent à mesure que les annotateurs accumulent des éléments communs.
  • 404 sur /psychometrics/.... Le bloc psychometrics.enabled: true manque dans la configuration.

Pour aller plus loin