Skip to content
Guides7 min read

Rótulos com barras de erro: teoria de resposta ao item para anotação

O voto majoritário joga fora quase tudo o que seus anotadores te disseram. A teoria de resposta ao item dá a cada rótulo uma probabilidade posterior e um intervalo de confiança, estima a habilidade do anotador e a dificuldade do item e encontra entradas quebradas do livro de códigos, sem rótulos-ouro e sem LLM.

Potato Team

O voto majoritário trata todo anotador como igualmente confiável e todo item como igualmente difícil, e reporta uma contagem em vez de uma probabilidade. A teoria de resposta ao item (TRI) abandona as duas suposições: ela estima a habilidade de cada anotador e a dificuldade de cada item apenas pelo padrão de concordância, e então reporta cada rótulo como uma probabilidade posterior com intervalo de confiança. Não precisa de rótulos-ouro nem de LLM. No Potato isso é o motor psicométrico, e ele roda ao vivo conforme as anotações chegam.

Três anotadores rotulam um item. Dois dizem sarcastic, um diz sincere. O voto majoritário chama de sarcastic e segue em frente, e seu conjunto de dados registra isso com exatamente a mesma confiança de um item em que os três concordaram.

Isso é jogar informação fora. Quem discordou pode ser o seu anotador mais confiável. O item pode ser um daqueles que todo mundo acha difícil. Nenhum dos dois fatos sobrevive à contagem.

Habilidade do anotador estimada ao vivo, com intervalos de confiança, de modo que cada rótulo ganha uma posterior em vez de um voto secoHabilidade do anotador com intervalos de confiança

O que é teoria de resposta ao item?

A teoria de resposta ao item vem da psicometria, onde foi criada para pontuar provas padronizadas. A ideia é que uma prova te diz duas coisas ao mesmo tempo: o quanto cada pessoa é capaz e o quanto cada questão é difícil. Dá para estimar as duas em conjunto, a partir apenas do padrão de respostas, porque uma restringe a outra. Uma questão que os alunos capazes erram é uma questão difícil. Um aluno que acerta questões difíceis é um aluno capaz.

A anotação tem o mesmo formato. Anotadores são quem faz a prova, itens são as questões, e ninguém tem o gabarito.

O Potato ajusta uma generalização multiclasse do GLAD (Whitehill et al. 2009), que estima três coisas juntas:

  • o rótulo verdadeiro de cada item, como distribuição de probabilidade
  • a habilidade de cada anotador (θ), com erro-padrão
  • a dificuldade de cada item, e um diagnóstico de discriminação por item

O ajuste é determinístico e leva milissegundos na escala de um estudo de anotação, então pode rodar continuamente em vez de virar um trabalho em lote a posteriori.

Ligando

yaml
psychometrics:
  enabled: true
  schema: sarcasm
  confidence_threshold: 0.95
  min_annotators_per_item: 2

Só isso já te dá a camada de análise. Sua exportação deixa de dizer isto:

text
sarcastic    (2 of 3 votes)

e passa a dizer isto:

text
sarcastic    p = 0.94 [0.88 – 0.97]

A probabilidade é a posterior do modelo, que pesa quem votou e não apenas quantos votaram. O intervalo é uma faixa de sensibilidade sobre as estimativas de habilidade.

Rio abaixo, esse número vale a pena. Você pode treinar com rótulos suaves, filtrar um conjunto de avaliação para os itens acima de um piso de confiança ou tratar itens de baixa probabilidade como genuinamente ambíguos em vez de silenciosamente mal rotulados. A discordância deixa de ser ruído a ser diluído na média, um ponto que vale ler junto com discordância é sinal, não ruído.

Habilidade do anotador, apresentada com honestidade

A habilidade é estimada a partir dos padrões de concordância. O valor 1.0 é a priori de um anotador novo, 0 significa que os rótulos dele não carregam informação e valores negativos significam erro sistemático.

Toda estimativa vem com um erro-padrão, e isso importa mais do que a estimativa pontual. Quem tem doze rótulos tem uma barra larga, e o painel desenha ela larga mesmo. Não tome decisões sobre pessoas com base em uma barra larga. Os erros-padrão são aproximados (informação de Fisher na moda) e um pouco otimistas por construção. Eles estão ali para te impedir de ler demais em um número, não para autorizar demissões.

Se você quer uma leitura mais simples de competência sobre qualquer esquema categórico, o MACE é o primo mais velho e continua sendo uma boa ferramenta. A diferença é que o MACE roda como análise em lote, enquanto a psicometria fica dentro do laço de atribuição e age sobre o estudo enquanto ele acontece.

O detector de bugs no livro de códigos

Esta é a parte que surpreende as pessoas.

Junto com a dificuldade, o modelo estima a discriminação: num dado item, a habilidade do anotador se correlaciona com concordar com o consenso? Normalmente sim. Anotadores capazes concordam com a resposta final mais vezes, que é mais ou menos o que "capaz" quer dizer.

Quando a discriminação fica fortemente negativa, alguma coisa está errada. Seus melhores anotadores estão discordando sistematicamente da multidão naquele item. A explicação mais provável não é que seus melhores anotadores tenham ficado ruins de repente. É que a diretriz é ambígua ou errada para aquele caso, e quem está percebendo isso são os anotadores cuidadosos.

O Potato reúne esses casos em "Prováveis bugs no livro de códigos". Costumam ser os itens de maior valor do estudo inteiro, porque cada um é um defeito no instrumento e não num indivíduo. Corrija a diretriz e reanote. Uma sala de norming é um bom lugar para resolvê-los em equipe.

Gastar orçamento de anotação onde ele compra alguma coisa

A redundância fixa, a regra de "sempre três anotadores por item", gasta o mesmo num item em que todo mundo concorda e num item que divide a equipe ao meio. Isso está de trás para frente.

yaml
assignment_strategy: psychometric
num_annotators_per_item: 4
psychometrics:
  enabled: true
  confidence_threshold: 0.95
  cost_per_judgment: 0.08

Com isso, quando um anotador pede trabalho, o Potato ordena os itens restantes pelo ganho de informação esperado de aquele anotador específico rotular aquele item específico. Itens cuja posterior já ultrapassa confidence_threshold param de ser servidos. O painel conta os julgamentos que você não precisou comprar, e os precifica se você definir cost_per_judgment.

Duas ressalvas que vale conhecer antes de ligar isso:

  • Partida a frio. Enquanto não houver rótulos suficientes, a atribuição volta a ser aleatória. O modelo não consegue separar habilidade de dificuldade sem anotadores sobrepostos, e não vai fingir o contrário. O painel mostra um medidor de aquecimento nesse período.
  • Lotes. A ordenação é mais fresca quando as filas são curtas. Entregar a cada anotador um lote de 200 itens dilui a adaptatividade, porque a ordenação foi calculada antes de a maioria daqueles rótulos existir.

Decidir a redundância antes de gastar qualquer coisa

A pergunta que todo projeto chuta é de quantos anotadores por item ele precisa. O planejador de estudos responde isso com uma simulação de Monte Carlo:

bash
python -m potato.psychometrics.design --items 500 --accuracy 0.75 \
    --classes 3 --target-ci 0.10 --cost 0.08
text
ann/item   alpha     95% interval   width  majority acc  judgments       cost
       2   0.392 [ 0.330,  0.439]   0.109         0.751       1000      80.00
       3   0.388 [ 0.338,  0.431]   0.093         0.864       1500     120.00  <- recommended

A recomendação é a redundância mais barata cujo intervalo de 95% sobre o α de Krippendorff ainda seja mais estreito que a sua meta. A entrada --accuracy é a que você deveria medir com um piloto pequeno em vez de chutar.

O mesmo cálculo roda no seu navegador, se você preferir não instalar nada para responder à pergunta.

O que isso não faz

TRI não é mágica. Alguns limites honestos:

  • Ela modela esquemas categóricos de escolha única, radio e likert. Múltipla seleção não é modelada.
  • Ela precisa de anotadores sobrepostos. Se cada item for rotulado por uma pessoa diferente, não há estrutura de concordância para aprender, e o modelo vai dizer que ainda está aquecendo.
  • Com um único anotador, ou com rótulos unânimes em tudo, o ajuste é degenerado por construção. Isso é comportamento correto, não bug.

O que ela dá em troca é um conjunto de dados em que cada rótulo carrega a própria incerteza, um grupo de anotadores que você entende e uma lista dos pontos em que o seu livro de códigos está quebrado.

Leitura adicional