Couverture hétérogène des annotateurs
Attribuez des nombres d'annotateurs différents à des éléments différents. Configurez un plafond par défaut, un échantillon de recoupement stratifié pour le suivi de la qualité, des renforts adaptatifs en cas de désaccord, des quotas par annotateur et un routage automatique vers l'arbitrage.
La couverture hétérogène vous permet d'attribuer des nombres d'annotateurs différents à des éléments différents plutôt qu'un plafond uniforme. Le schéma de recherche courant consiste à affecter un annotateur à la plupart des éléments, avec deux ou trois annotateurs se recoupant sur un échantillon de 5 à 10 % pour suivre la qualité. Potato exprime cela au moyen des blocs de configuration num_annotators_per_item et per_annotator_quota.
Plafonds d'annotateurs par élément
num_annotators_per_item est la clé canonique. Elle accepte un entier unique pour un plafond uniforme, ou un mappage structuré comportant une valeur par défaut, un échantillon de recoupement et un renfort adaptatif facultatif :
num_annotators_per_item:
default: 1
overlap_sample:
fraction: 0.1
count: 3
stratify_by: domain
seed: 42
adaptive:
enabled: true
disagreement_threshold: 0.5
boost_to: 3
min: 1max_annotations_per_item est désormais un alias obsolète de num_annotators_per_item: <int>.
Échantillon de recoupement
Le bloc overlap_sample relève le plafond sur un sous-ensemble déterministe d'éléments pour le suivi de la qualité. L'échantillonnage a lieu une seule fois au démarrage, et les éléments choisis sont estampillés avec required_annotations afin que la logique d'attribution les traite comme à forte couverture.
| Champ | Type | Description |
|---|---|---|
fraction | flottant dans (0, 1] | proportion d'éléments à échantillonner |
count | int ≥ 2 | plafond d'annotateurs pour les éléments échantillonnés (doit dépasser default) |
stratify_by | chaîne (facultatif) | champ de données de l'élément servant à stratifier l'échantillon |
seed | int (facultatif) | graine du RNG ; par défaut la valeur globale random_seed |
Lorsque stratify_by est défini, la fraction est appliquée par strate, de sorte que chaque catégorie contribue proportionnellement.
Renfort adaptatif
Le renfort adaptatif élargit le plafond d'un élément sur lequel les premiers annotateurs ont été en désaccord. Dès qu'un élément possède au moins deux annotations et que son score de désaccord franchit disagreement_threshold, son plafond est relevé à boost_to et l'élément réintègre la file d'attribution. Le renfort n'a lieu qu'une seule fois par élément.
Quota par annotateur
per_annotator_quota contrôle le nombre d'éléments attribués à chaque annotateur, indépendamment des plafonds par élément :
per_annotator_quota:
default: 100
by_user:
alice: 30
by_user_role:
expert: 30
novice: 200
user_roles:
alice: expert
carol: noviceOrdre de résolution : by_user[uid] → by_user_role[user_roles[uid]] → default.
Routage automatique vers l'arbitrage
Lorsque le bloc d'arbitrage est activé, les éléments de l'échantillon de recoupement qui atteignent leur plafond sont notés automatiquement et poussés dans la file d'arbitrage si l'accord tombe sous agreement_threshold. Les éléments de faible qualité remontent dès que l'échantillon est saturé, plutôt qu'au moment où un arbitre reconstruit manuellement la file.
adjudication:
enabled: true
adjudicator_users: [admin]
min_annotations: 2
agreement_threshold: 0.75Inspection de l'accord
Une fois les éléments de l'échantillon de recoupement saturés, les statistiques d'accord sont accessibles à /admin/iaa, qui calcule l'ensemble de métriques approprié au annotation_type de chaque schéma — par exemple le kappa de Cohen et de Fleiss pour les schémas nominaux, le kappa pondéré pour les schémas ordinaux, et le kappa au niveau du token plus le span F1 pour les empans (spans). Consultez le guide de l'accord inter-annotateurs pour comprendre ce que signifient ces métriques.
Exemple
Une démonstration exécutable se trouve dans examples/advanced/heterogeneous-coverage/. Depuis la racine du dépôt :
python potato/flask_server.py start examples/advanced/heterogeneous-coverage/config.yaml -p 8000Elle utilise 20 éléments répartis sur deux domaines, échantillonne 20 % pour un recoupement à 3 annotateurs stratifié par domaine, active un renfort adaptatif au seuil 0.5, définit deux niveaux d'expertise et route les éléments à faible accord vers l'arbitrage.
Liens connexes
- Attribution des tâches — stratégies d'attribution
- Guide de l'accord inter-annotateurs — les métriques derrière
/admin/iaa - Crowdsourcing — intégration MTurk et Prolific
Pour les détails d'implémentation, consultez la documentation source.