L'accord inter-annotateurs pour les objets 3D, les segments temporels et les traces d'agents
Réduire les annotations structurées aux noms d'étiquettes met tout le monde d'accord. Appariez boîtes 3D et segments par IoU, et notez les traces étape par étape.
Pour mesurer l'accord sur des annotations structurées, comparez les structures elles-mêmes. Appariez les boîtes 3D ou les segments temporels de chaque annotateur à ceux de l'autre par IoU, comptez les objets non appariés comme des désaccords, et notez une trace d'agent étape par étape, de sorte que chaque étape soit une unité pour le kappa ou l'alpha.
L'accord inter-annotateurs est facile à définir quand chaque item reçoit une seule étiquette. Beaucoup de tâches actuelles donnent plutôt à un item un ensemble d'éléments, comme des cuboïdes autour des voitures d'un balayage lidar, des segments qui indiquent quand parle chaque locuteur, ou un verdict pour chaque étape d'un agent. Une mesure conçue pour une étiquette par item doit réduire ces structures à quelque chose qu'elle peut comparer, et la réduction facile, aux noms d'étiquettes, met d'accord toutes les paires d'annotateurs.
Un accord parfait à partir des noms d'étiquettes
Cette réduction garde les noms d'étiquettes et jette tout le reste. Deux annotateurs qui ont chacun dessiné trois boîtes étiquetées « voiture » sur un balayage lidar se réduisent tous deux à « voiture », et ils sont parfaitement d'accord même si leurs boîtes se trouvent à des endroits différents.
La route d'accord par schéma de Potato, /admin/api/agreement, procédait ainsi pour les schémas structurés avant la version 2.11, et sur les traces d'agents, les segments, les régions et les objets 3D, toutes les paires d'annotateurs ressortaient parfaitement d'accord. Un score parfait sur une tâche spatiale ou temporelle difficile signifie en général que la mesure a perdu la structure. Dans la 2.11, cette route ne rend plus compte des schémas structurés et renvoie au rapport d'accord complet à /admin/iaa, qui compare les structures.
Apparier les objets 3D et les segments temporels
L'accord sur un ensemble d'objets commence par l'appariement. Chaque objet d'un annotateur est associé à au plus un objet de l'autre selon une mesure de recouvrement, et une paire ne compte comme le même objet qu'au-dessus d'un seuil. Les segments temporels utilisent l'IoU temporel (intersection sur union), la longueur du recouvrement divisée par la longueur de l'union, et les objets 3D l'IoU 3D, le même rapport appliqué aux volumes. Potato apparie les segments à 0,5 et les objets 3D à 0,25, parce qu'un petit décalage coûte plus d'IoU en trois dimensions qu'en deux. Une boîte décalée de 10 % de sa taille le long de chaque axe garde un IoU 2D d'environ 0,68 et un IoU 3D d'environ 0,57 seulement.
Après l'appariement, chaque paire appariée apporte son IoU, une paire appariée dont les étiquettes diffèrent apporte la moitié de son IoU, et chaque objet non apparié, d'un côté comme de l'autre, apporte zéro. L'accord de l'item est ce total divisé par le nombre d'objets, chaque paire appariée étant comptée une fois. Un annotateur qui manque la moitié des objets obtient donc un score faible même quand les objets qu'il a marqués sont parfaits, et deux annotateurs qui ne marquent rien sont d'accord.
/admin/iaa rapporte deux chiffres par schéma pour les objets 3D (spatial_annotation) et pour les segments temporels sous temporal_grounding et tiered_annotation :
mean_agreement, la moyenne de ce score par item sur toutes les paires d'annotateurs, pour chaque item qui compte deux annotateurs ou plus ; etmean_object_count_diff, l'écart moyen entre les nombres d'objets que les deux annotateurs ont marqués.
L'écart de nombre sépare les deux façons dont un ensemble peut diverger. Un accord faible avec un écart de nombre proche de zéro signifie que les personnes ont trouvé les mêmes objets et les ont placés différemment. Un grand écart de nombre signifie qu'un annotateur trouve des objets que l'autre manque, ce qui renvoie à ce que les consignes comptent comme un objet.
Aucun de ces deux chiffres n'est corrigé du hasard. Une référence de hasard pour l'accord spatial exige un modèle de l'endroit où tombent les objets quand les annotateurs divergent au hasard, et Potato n'en construit un que pour les boîtes et les polygones 2D, comme le décrit l'accord sur la géométrie. Pour les segments temporels, la même approche échoue, parce qu'un segment issu d'un autre extrait n'est pas une comparaison aléatoire pertinente quand les extraits n'ont pas la même longueur, ce qu'explique l'accord dans le temps. Comparez ces chiffres entre des pilotes de la même tâche, où la difficulté de placer un objet reste la même.
Un cas limite a changé dans la 2.11. Deux segments identiques de longueur nulle, un instant marqué par les deux annotateurs au même moment, ont un IoU de 0 divisé par 0. Ils comptaient auparavant comme un désaccord complet, et ils comptent désormais comme concordants.
L'accord par étape pour les traces d'agents
Une trace d'agent est une suite d'étapes, et les schémas de traces (process_reward, trajectory_eval, tool_call_review, failure_attribution, gui_trajectory) demandent une étiquette pour chaque étape. Noter une trace par son ensemble d'étiquettes reproduit le problème des noms d'étiquettes, et la noter par un verdict global jette les étapes.
/admin/iaa traite chaque étape de chaque trace comme une unité à part. Deux annotateurs qui notent l'étape 4 de la trace 12 apportent une paire, et l'alpha de Krippendorff nominal et le kappa de Cohen sont calculés sur toutes ces unités, avec le pourcentage d'accord. Contrairement aux mesures d'ensemble ci-dessus, les deux coefficients sont corrigés du hasard, si bien qu'un alpha par étape de 0,6 sur une tâche de récompense de processus se lit sur la même échelle que l'alpha de n'importe quelle tâche catégorielle. Le moteur d'étiquetage analyse les étiquettes d'étape de la même façon quand il note un juge LLM par rapport à une personne, et son score est la part des étapes communes que les deux ont étiquetées différemment.
Attribuer deux annotateurs par item
/admin/iaa ne demande aucune configuration. Il note chaque item auquel deux annotateurs ou plus ont répondu, donc le travail porte sur l'attribution. Pour donner deux annotateurs à chaque item, fixez deux annotateurs par item et distribuez d'abord les items les moins annotés :
assignment_strategy: least_annotated
num_annotators_per_item: 2Deux annotateurs par item est le minimum dont le rapport a besoin. Sur un petit ensemble en recouvrement, une seule trace ou un seul balayage lidar inhabituel peut déplacer la moyenne assez pour changer votre conclusion : prévoyez donc le recouvrement avant le début de l'annotation plutôt qu'après. L'ancien bloc agreement_metrics configure les chiffres par schéma du tableau de bord, qui depuis la 2.11 ignorent ces schémas et renvoient à /admin/iaa.
Accord et écart de nombre d'un tour pilote à l'autre
Lisez mean_agreement avec l'écart de nombre et le nombre de paires que /admin/iaa affiche à côté. Une baisse entre deux tours pilotes avec un écart de nombre stable renvoie au placement, et ce sont alors les consignes sur l'ajustement des boîtes ou les bornes des segments qu'il faut retravailler. Une hausse de l'écart de nombre renvoie à ce qui compte comme un objet ou un événement. Pour les traces d'agents, comparez l'alpha par étape à l'alpha que les mêmes annotateurs atteignent sur une question catégorielle plus simple dans la même étude, ce qui aide à distinguer des étiquettes d'étape difficiles d'annotateurs peu fiables.
Pour aller plus loin
- L'accord inter-annotateurs expliqué, pour les coefficients et le moment d'utiliser chacun
- L'accord sur la géométrie, pour l'accord corrigé du hasard sur les boîtes et polygones 2D
- L'accord dans le temps, pour les segments et les points de rupture en audio et en vidéo
- L'IoU brut n'est pas un accord, sur les raisons pour lesquelles l'IoU moyen seul surestime l'accord spatial