Controle de qualidade para anotação por crowdsourcing
Combine verificações de atenção, itens padrão-ouro, sobreposição entre anotadores e dados de tempo para detectar anotações de baixa qualidade, com as chaves de configuração do Potato para cada um e o que elas reportam.
Nenhuma verificação sozinha pega todo tipo de anotação ruim, então combine quatro: verificações de atenção para anotadores que não estão lendo, itens padrão-ouro para anotadores que leem e mesmo assim erram, sobreposição para itens ambíguos e tempo para trabalhos enviados rápido demais para terem sido feitos. Cada uma tem sua própria chave de configuração no Potato, e cada uma reporta separadamente no painel de administração.
O controle de qualidade é mais barato antes da coleta e mais caro depois dela. Uma verificação de atenção que bloqueia um anotador na quinta falha não custa nada para configurar e poupa os itens que ele teria preenchido; o mesmo problema encontrado por um script depois do fato custa uma nova coleta. Os controles abaixo estão ordenados pelo momento em que atuam.
Controle de qualidade ao longo do projeto
O que cada controle detecta
Os quatro controles falham em direções diferentes, e é por isso que vale a pena usar mais de um.
| Controle | Detecta | Não detecta |
|---|---|---|
| Verificações de atenção | Anotadores que não leem o item | Um anotador cuidadoso que entende mal as diretrizes |
| Itens padrão-ouro | Anotadores que leem e respondem errado | Itens sem uma única resposta correta |
| Sobreposição e concordância | Itens e rótulos ambíguos | Anotadores que concordam porque usam a mesma fonte |
| Tempo e telemetria | Trabalho enviado rápido demais para ter sido feito | Trabalho rápido em um corpus realmente fácil |
A concordância, em especial, não pega tudo. Quando os anotadores revisam pré-rótulos gerados por um modelo, aceitar uma sugestão sem lê-la aumenta a concordância em vez de diminuí-la, de modo que o anotador que aprova sem olhar parece o melhor nessa medida. A concordância não detecta a aprovação automática explica o que registrar no lugar.
Verificações de atenção
Verificações de atenção são itens com resposta conhecida, inseridos no fluxo de anotação em intervalos definidos, que confirmam que o anotador está lendo antes de responder. O Potato os insere, corrige, avisa o anotador e o bloqueia ao atingir o limite que você define, então todo o ciclo roda no servidor em vez de em um script posterior.
Defina a frequência de acordo com o tempo que seus itens levam. Uma verificação a cada 10 itens é frequente o bastante para pegar um anotador que perde o foco dentro de uma sessão sem gastar muito do orçamento em itens que não são dados. O piso min_response_time é o que detecta quem clica em vez de ler, e uma resposta mais rápida que ele falha, seja qual for o conteúdo:
attention_checks:
enabled: true
items_file: "data/attention_checks.json"
frequency: 10 # one check every 10 items
min_response_time: 3.0 # seconds; faster than this fails the check
failure_handling:
warn_threshold: 2
warn_message: "Please read items carefully before answering."
block_threshold: 5
block_message: "You have been blocked due to too many incorrect responses."O arquivo de itens dá a cada verificação um id, o texto que o anotador vê e a resposta esperada para cada esquema:
[
{
"id": "attn_001",
"text": "Please select 'Positive' for this item to verify you are reading carefully.",
"expected_answer": {
"sentiment": "positive"
}
}
]Os resultados sobrevivem a uma reinicialização. O Potato os grava em quality_control_results.json no diretório de saída à medida que são registrados e os lê de volta na inicialização, então um deploy não apaga o histórico de falhas de um anotador nem desbloqueia alguém que estava bloqueado.
Itens padrão-ouro
Itens padrão-ouro (gold standards) são itens rotulados por especialistas e misturados ao fluxo para medir acurácia, não atenção. Por padrão eles são silenciosos, ou seja, os resultados vão para o painel de administração e o anotador não recebe nenhum retorno, o que mede a qualidade sem alterar o comportamento que está sendo medido. Ative o retorno quando estiver treinando, e não selecionando, anotadores.
Os itens padrão-ouro são inseridos a cada frequency itens, então essa configuração equilibra a precisão da medição com a parte do orçamento que vai para itens cujos rótulos você já tem. Um a cada 20 dá cerca de 25 itens corrigidos em um turno de 500 itens:
gold_standards:
enabled: true
items_file: "data/gold_standards.json"
mode: mixed # mixed injects into the stream; this is the implemented mode
frequency: 20
accuracy:
min_threshold: 0.7 # annotators below this are named in the dashboard
evaluation_count: 10 # evaluate once an annotator has seen 10 gold items
feedback:
show_correct_answer: false
show_explanation: falseO arquivo de itens traz a anotação correta para cada esquema, mais uma explicação opcional para o caso com retorno:
[
{
"id": "gold_001",
"text": "The service was absolutely terrible and I will never return.",
"gold_label": {
"sentiment": "negative"
},
"explanation": "Strong negative language indicates negative sentiment.",
"difficulty": "easy"
}
]Escolha itens padrão-ouro que não sejam ambíguos para um especialista. Um item sobre o qual sua própria equipe discute mede as diretrizes, não o anotador, e vai empurrar anotadores competentes para baixo do limite. O Potato também pode promover itens a padrão-ouro quando os anotadores concordam de forma unânime sobre eles, por meio de gold_standards.auto_promote, o que aumenta o conjunto sem mais rotulagem especializada.
A acurácia por anotador aparece em /admin/api/quality_control, que reporta configured_correct e configured_total ao lado dos totais. Use os números configurados ao comparar anotadores, porque o conjunto configurado é o mesmo para todos, enquanto o conjunto promovido automaticamente depende de quando cada anotador chegou.
Sobreposição e concordância
Vários anotadores por item é o controle que encontra itens ambíguos, e não anotadores ruins. Três por item é o padrão comum, porque três dão uma maioria para a agregação e sobreposição suficiente para um coeficiente. Defina a meta e ative o relatório:
num_annotators_per_item: 3
agreement_metrics:
enabled: true
min_overlap: 2
refresh_interval: 60O alfa de Krippendorff passa então a aparecer no painel de administração à medida que as anotações chegam, por esquema. Medindo a concordância entre anotadores explica qual coeficiente reportar e o que os limites significam.
Tempo e telemetria
O Potato registra quanto tempo cada item levou, não apenas o que foi respondido. Cada instância carrega um objeto behavioral_data cujo total_time_ms é o tempo gasto naquele item, junto com os eventos de interação, o histórico de alterações da anotação e o ciclo de vida das sugestões de IA. É esse campo que permite separar um anotador que é rápido porque o corpus é fácil de um que é rápido porque não está olhando:
def flag_fast_annotations(export, min_seconds=2.0):
"""Instances submitted faster than a floor, from an exported annotation file."""
flagged = []
for instance in export:
bd = instance.get("behavioral_data") or {}
seconds = bd.get("total_time_ms", 0) / 1000
if seconds < min_seconds:
flagged.append((instance["id"], seconds))
return flaggedLeia o tempo como uma distribuição dentro do seu próprio projeto, e não contra um número fixo de segundos, já que o mesmo limite que pega a aprovação automática em um corpus difícil pega a competência em um corpus fácil. Para anotações desenhadas, annotation_telemetry registra a mesma ideia em um nível mais fino. Seu sinal mais forte é a latência entre o aparecimento de uma sugestão de IA e a aceitação dela pelo anotador. Rastreamento comportamental e telemetria de desenho descrevem os campos e os alertas que eles alimentam.
Uma configuração com os quatro controles
As quatro chaves são independentes, então um projeto pode adotá-las uma de cada vez. Juntas, ficam assim:
annotation_task_name: "Sentiment Annotation with Quality Control"
task_description: "Classify the sentiment of short texts."
data_files:
- data/items.json
item_properties:
id_key: id
text_key: text
annotation_schemes:
- annotation_type: radio
name: sentiment
description: "What is the sentiment of this text?"
labels:
- Positive
- Negative
- Neutral
num_annotators_per_item: 3
attention_checks:
enabled: true
items_file: data/attention_checks.json
frequency: 15
min_response_time: 3.0
failure_handling:
warn_threshold: 2
block_threshold: 5
gold_standards:
enabled: true
items_file: data/gold_standards.json
mode: mixed
frequency: 25
accuracy:
min_threshold: 0.7
evaluation_count: 10
agreement_metrics:
enabled: true
min_overlap: 2
refresh_interval: 60
output_annotation_dir: annotation_outputComece com limites tolerantes. Um limite de bloqueio de 5 e um piso de acurácia de 0.7 permitem ver a distribuição real do seu grupo de anotadores antes de decidir o que conta como falha, e endurecê-los depois não custa nada. Defini-los rígidos no primeiro dia expulsa anotadores com base em diretrizes que ainda não passaram por um piloto.
Controles no nível da plataforma
As plataformas de crowdsourcing filtram o grupo antes que alguém chegue à sua tarefa. É um trabalho diferente do das verificações acima, e vale a pena fazê-lo além delas.
- Pré-seleção. Tanto o Prolific quanto o MTurk filtram por taxa de aprovação e trabalhos concluídos anteriormente, e ambos oferecem filtros de localidade. No MTurk, uma taxa de aprovação de 97% ou mais com 500 ou mais HITs aprovados é um filtro inicial comum.
- Testes de qualificação. O MTurk aceita qualificações personalizadas, então um teste curto pode controlar o acesso à tarefa principal.
- Revisão antes do pagamento. Aprove rápido quando o trabalho estiver bom, já que a demora na aprovação é a maior reclamação dos anotadores, e use a rejeição com moderação, porque ela prejudica a reputação do trabalhador na plataforma.
A pré-seleção da plataforma e as verificações do próprio Potato se complementam. A pré-seleção decide quem chega à tarefa; as verificações de atenção e os itens padrão-ouro medem o que essas pessoas fizeram depois de chegar.
Antes de coletar qualquer coisa
Duas decisões são difíceis de reverter depois que a coleta começa, então tome-as primeiro. Decida de quais campos você precisa na exportação, porque uma análise de tempo planejada depois do fato exige que behavioral_data tenha sido registrado durante a execução. E faça um piloto com algumas dezenas de itens e todos os controles ativados, já que é no piloto que você descobre que suas verificações de atenção são ambíguas ou que seus itens padrão-ouro são contestados, e isso custa uma tarde em vez de um conjunto de dados.
Leitura adicional
- Padrão-ouro e verificações de atenção
- Referência do recurso de controle de qualidade
- Fase de treinamento para preparar os anotadores antes da tarefa real
- Como escrever diretrizes de anotação eficazes
- Como conduzir um estudo no Prolific e no MTurk
- A documentação-fonte de controle de qualidade do Potato