Best-Worst Scaling
Best-Worst Scaling in Potato. Gli annotatori scelgono l'elemento migliore e il peggiore in ogni tupla, e il conteggio, Bradley-Terry o Plackett-Luce li trasformano in punteggi.
Novità nella v2.3.0
Il Best-Worst Scaling (BWS), noto anche come MaxDiff, mostra all'annotatore una tupla di elementi, di solito quattro, e chiede di indicare il migliore e il peggiore secondo un certo criterio. Due clic per tupla producono più informazione di una valutazione, e poiché il giudizio è comparativo evita il problema per cui il 7 di un annotatore è il 5 di un altro.
Vale la pena configurare il BWS quando:
- Le valutazioni numeriche dirette risentono delle differenze nell'uso della scala tra annotatori
- Serve una classifica affidabile su centinaia o migliaia di elementi
- La dimensione di qualità è per sua natura relativa, ad esempio quale traduzione si legge in modo più scorrevole
Interfaccia Best-Worst Scaling per l'annotazione comparativa in Potato
Configurazione
Un task BWS ha due parti. Lo schema dice che cosa viene chiesto all'annotatore, mentre il blocco di primo livello bws_config dice come vengono costruite e valutate le tuple.
bws_config:
tuple_size: 4 # items shown at once
min_item_appearances: 8 # how often each item must appear across tuples
seed: 42
scoring:
method: counting # counting | bradley_terry | plackett_luce
annotation_schemes:
- annotation_type: bws
name: fluency
description: "Select the BEST and WORST translation by fluency"
tuple_size: 4
best_description: "Most Fluent"
worst_description: "Least Fluent"
sequential_key_binding: true
label_requirement:
required: trueLo schema accetta tuple_size, best_description, worst_description, sequential_key_binding e label_requirement, e nient'altro. Tutto ciò che riguarda la generazione o la valutazione delle tuple va in bws_config.
Uno schema bws senza un blocco bws_config mostra una domanda su un elenco di elementi vuoto. È il motivo più comune per cui un task BWS appare vuoto.
Opzioni di bws_config
| Opzione | Descrizione |
|---|---|
tuple_size | Quanti elementi compaiono in una tupla |
num_tuples | Quante tuple generare in totale |
min_item_appearances | Il numero minimo di tuple in cui compare ciascun elemento |
seed | Fissa il campionamento, così che un'esecuzione sia riproducibile |
scoring.method | counting, bradley_terry o plackett_luce |
Aumentare min_item_appearances rende più preciso il punteggio di ogni elemento, al costo di più confronti. È la leva da usare quando i punteggi risultano rumorosi.
Formato dei dati
Ogni riga del file di dati è un elemento, e Potato campiona le tuple da questo insieme.
{"id": "sys_a", "text": "Le chat s'est assis sur le tapis."}
{"id": "sys_b", "text": "Le chat a assis sur le tapis."}
{"id": "sys_c", "text": "Le chat etait assis sur le mat."}
{"id": "sys_d", "text": "Le chat se tenait sur le tapis."}La generazione delle tuple bilancia il disegno. Ogni elemento compare all'incirca lo stesso numero di volte, e le coppie da confrontare compaiono insieme abbastanza spesso da rendere i punteggi confrontabili. Impostare seed rende riproducibile questa assegnazione.
Calcolo dei punteggi
Il calcolo dei punteggi avviene dopo la raccolta, da riga di comando:
python -m potato.bws_scoring --config config.yaml --method countingIl risultato viene scritto in bws_scores.tsv nella directory di output, a meno che --output non indichi un altro percorso. I tre flag sono --config, --method e --output.
Conteggio
Il metodo predefinito, e quello trasparente. Il punteggio di un elemento è la quota di volte in cui è stato scelto come migliore meno la quota di volte in cui è stato scelto come peggiore, quindi i punteggi vanno da -1,0 a +1,0. Non richiede dipendenze aggiuntive ed è il metodo da riportare quando vuoi che chi legge possa ricalcolarlo a mano.
python -m potato.bws_scoring --config config.yaml --method counting --output scores.tsvBradley-Terry
Adatta un modello ai confronti a coppie implicati da ogni tupla. L'elemento migliore batte ogni altro elemento della sua tupla, e ogni altro elemento batte il peggiore. Gestisce i dati sparsi meglio del conteggio.
python -m potato.bws_scoring --config config.yaml --method bradley_terryPlackett-Luce
Tratta ogni giudizio come due scelte: prima il migliore dall'intera tupla, poi il peggiore tra gli elementi rimasti. È il modello MaxDiff di come si formano i giudizi best-worst. Stima un'utilità per ogni elemento per massima verosimiglianza. Prima della 2.10.2 stimava le stesse coppie di Bradley-Terry e restituiva punteggi identici, quindi se ne hai riportato i risultati ricalcola i punteggi con la 2.10.2 o successiva.
python -m potato.bws_scoring --config config.yaml --method plackett_luceScegliere un metodo
| Metodo | Velocità | Informazione usata | Ideale per |
|---|---|---|---|
counting | Veloce | Conteggi di migliore e peggiore | Analisi esplorative e risultati che si vogliono facili da verificare |
bradley_terry | Media | Confronti a coppie impliciti | La scelta predefinita abituale |
plackett_luce | Più lenta | Ogni scelta del migliore e del peggiore, nell'ordine in cui viene fatta | Un modello di verosimiglianza del giudizio stesso |
bradley_terry richiede pip install choix. plackett_luce usa scipy, che Potato installa già.
Più dimensioni insieme
Due schemi BWS sugli stessi elementi raccolgono due giudizi per tupla, il che costa una coppia di clic in più invece di un secondo passaggio sul corpus:
annotation_schemes:
- annotation_type: bws
name: fluency
description: "Select the BEST and WORST by fluency"
tuple_size: 4
best_description: "Most Fluent"
worst_description: "Least Fluent"
- annotation_type: bws
name: adequacy
description: "Select the BEST and WORST by meaning preservation"
tuple_size: 4
best_description: "Most Accurate"
worst_description: "Least Accurate"Che cosa contiene l'output
Ogni schema registra l'elemento scelto come migliore e quello scelto come peggiore:
{
"fluency": {"best": "sys_d", "worst": "sys_c"},
"adequacy": {"best": "sys_a", "worst": "sys_c"}
}I punteggi non sono in questo file. Vengono calcolati in seguito da potato.bws_scoring, ed è questo che ti permette di ricalcolare i punteggi di uno studio concluso con un altro metodo senza raccogliere di nuovo nulla.
Monitoraggio
La dashboard di amministrazione include una scheda BWS che mostra l'avanzamento dell'annotazione e i punteggi correnti degli elementi, così puoi verificare se la classifica si è stabilizzata prima di decidere di interrompere la raccolta.
Esempio completo
annotation_task_name: "MT System Ranking (BWS)"
task_dir: "."
data_files:
- "data/mt_systems.jsonl"
item_properties:
id_key: id
text_key: text
bws_config:
tuple_size: 4
min_item_appearances: 8
seed: 42
scoring:
method: bradley_terry
annotation_schemes:
- annotation_type: bws
name: overall_quality
description: "Select the BEST and the WORST translation"
tuple_size: 4
best_description: "Best Translation"
worst_description: "Worst Translation"
sequential_key_binding: true
label_requirement:
required: true
output_annotation_dir: "annotation_output/"
export_annotation_format: jsonl
user_config:
allow_all_users: trueRaccogli le annotazioni, poi calcola i punteggi:
potato start config.yaml -p 8000
python -m potato.bws_scoring --config config.yaml --method bradley_terryUlteriori letture
- Confronto a coppie - il caso con due elementi
- Scale Likert - valutazione diretta invece del confronto
- Formati di esportazione - come esportare le annotazioni
Per i dettagli di implementazione, consulta la documentazione sorgente.