Skip to content

Copertura eterogenea degli annotatori

Assegna numeri diversi di annotatori a elementi diversi. Configura un limite predefinito, un campione di sovrapposizione stratificato per il monitoraggio della qualità, potenziamenti adattivi in caso di disaccordo, quote per annotatore e instradamento automatico all'aggiudicazione.

La copertura eterogenea ti consente di assegnare numeri diversi di annotatori a elementi diversi anziché un limite uniforme. Il disegno di ricerca più comune prevede un annotatore sulla maggior parte degli elementi, con due o tre che si sovrappongono su un campione del 5–10 % per monitorare la qualità. Potato esprime tutto questo tramite i blocchi di configurazione num_annotators_per_item e per_annotator_quota.

Limiti di annotatori per elemento

num_annotators_per_item è la chiave canonica. Accetta un singolo intero per un limite uniforme, oppure una mappatura strutturata con un valore predefinito, un campione di sovrapposizione e un potenziamento adattivo facoltativo:

yaml
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: 1

max_annotations_per_item è ora un alias deprecato di num_annotators_per_item: <int>.

Campione di sovrapposizione

Il blocco overlap_sample alza il limite su un sottoinsieme deterministico di elementi per il monitoraggio della qualità. Il campionamento avviene una sola volta all'avvio, e gli elementi scelti vengono contrassegnati con required_annotations affinché la logica di assegnazione li tratti come ad alta copertura.

CampoTipoDescrizione
fractionfloat in (0, 1]proporzione di elementi da campionare
countint ≥ 2limite di annotatori per gli elementi campionati (deve superare default)
stratify_bystringa (facoltativo)campo dei dati dell'elemento usato per stratificare il campione
seedint (facoltativo)seed dell'RNG; per impostazione predefinita il random_seed globale

Quando stratify_by è impostato, la frazione viene applicata per strato, in modo che ogni categoria contribuisca proporzionalmente.

Potenziamento adattivo

Il potenziamento adattivo amplia il limite di un elemento sul quale i primi annotatori sono stati in disaccordo. Non appena un elemento ha almeno due annotazioni e il suo punteggio di disaccordo supera disagreement_threshold, il suo limite viene alzato a boost_to e l'elemento rientra nella coda di assegnazione. Il potenziamento avviene una sola volta per elemento.

Quota per annotatore

per_annotator_quota controlla quanti elementi vengono assegnati a ciascun annotatore, indipendentemente dai limiti per elemento:

yaml
per_annotator_quota:
  default: 100
  by_user:
    alice: 30
  by_user_role:
    expert: 30
    novice: 200
 
user_roles:
  alice: expert
  carol: novice

Ordine di risoluzione: by_user[uid]by_user_role[user_roles[uid]]default.

Instradamento automatico all'aggiudicazione

Quando il blocco di aggiudicazione è abilitato, gli elementi del campione di sovrapposizione che raggiungono il loro limite vengono valutati automaticamente e spinti nella coda di aggiudicazione se l'accordo scende sotto agreement_threshold. Gli elementi di bassa qualità emergono non appena il campione si satura, anziché quando un aggiudicatore ricostruisce manualmente la coda.

yaml
adjudication:
  enabled: true
  adjudicator_users: [admin]
  min_annotations: 2
  agreement_threshold: 0.75

Ispezione dell'accordo

Una volta che gli elementi del campione di sovrapposizione si saturano, le statistiche di accordo sono disponibili su /admin/iaa, che calcola l'insieme di metriche appropriato per l'annotation_type di ciascuno schema — ad esempio kappa di Cohen e di Fleiss per gli schemi nominali, weighted kappa per quelli ordinali e kappa a livello di token più span F1 per gli span. Consulta la guida all'accordo tra annotatori per capire il significato di queste metriche.

Esempio

Una dimostrazione eseguibile si trova in examples/advanced/heterogeneous-coverage/. Dalla radice del repository:

bash
python potato/flask_server.py start examples/advanced/heterogeneous-coverage/config.yaml -p 8000

Usa 20 elementi distribuiti su due domini, campiona il 20 % per una sovrapposizione a 3 annotatori stratificata per dominio, abilita un potenziamento adattivo a soglia 0.5, definisce due livelli di competenza e instrada gli elementi a basso accordo verso l'aggiudicazione.

Correlati

Per i dettagli di implementazione, consulta la documentazione sorgente.