Concordância para trechos e saídas estruturadas
Por que o kappa de Cohen e de Fleiss falha na anotação de trechos, NER e estruturas, e o que usar em vez disso: F1 como concordância, correspondência exata versus parcial e alfa unitizado de Krippendorff.
A concordância corrigida pelo acaso, como o kappa de Cohen, pressupõe que cada anotador rotula o mesmo conjunto fixo de itens a partir do mesmo conjunto fixo de categorias. A anotação de trechos quebra esse pressuposto: os anotadores podem discordar sobre onde um trecho começa, onde termina e se ele sequer existe. Para trechos, a medida padrão de confiabilidade é a F1 par a par, não o kappa, e você precisa decidir de antemão se uma sobreposição parcial de limites conta como concordância. Este guia explica por que as métricas usuais falham aqui e o que relatar em vez delas.
Por que o kappa não serve para trechos
Um coeficiente corrigido pelo acaso precisa de três coisas: uma lista fixa de itens, uma lista fixa de rótulos e a capacidade de calcular com que frequência os anotadores concordariam por acaso. As tarefas de trechos não fornecem nenhuma delas de forma limpa. Não há uma lista predeterminada de "itens" a rotular: o anotador inventa os trechos à medida que lê, de modo que duas pessoas podem produzir quantidades diferentes de trechos sobre o mesmo documento. E não existe uma classe negativa com sentido: os "itens que ninguém marcou" são todas as subcadeias possíveis, um conjunto astronomicamente grande e mal definido.
Esse último ponto é o decisivo. Hripcsak and Rothschild (2005) mostraram que, quando a classe negativa é muito grande ou indefinida, como na recuperação de informação e na extração de trechos, a chance de dois anotadores concordarem no mesmo trecho arbitrário é praticamente nula, de modo que a correção pelo acaso quase não muda nada e os pressupostos por trás do kappa deixam de valer. Esse resultado é a justificativa padrão para uma alternativa mais limpa: a própria medida F é a estatística de concordância apropriada. Trate os trechos de um anotador como referência e os do outro como previsões, calcule a F1 e faça a média sobre todos os pares de anotadores. Como a F1 é simétrica, a ordem do par não importa.
Correspondência exata ou parcial: decida antes de medir
O número que você relata depende inteiramente do que conta como acerto, e não há resposta universal, então declare sua escolha.
- Correspondência exata: dois trechos concordam apenas se ambos os limites forem idênticos. Estrita, e a escolha certa quando os limites carregam significado (citações jurídicas, nomes químicos).
- Correspondência parcial / por sobreposição: dois trechos concordam se houver qualquer sobreposição, ou acima de algum limiar. Mais tolerante, e razoável quando a presença de uma entidade importa mais do que sua extensão exata.
- Limite versus rótulo: para trechos tipados (NER), separe duas perguntas: os anotadores marcaram a mesma extensão? e deram a ela o mesmo tipo? Relatá-las juntas esconde qual delas está de fato causando a discordância.
Artstein and Poesio (2008) é o levantamento de referência sobre concordância em linguística computacional e trata em detalhe esse problema de "unitização", a discordância sobre como segmentar o texto em unidades. É a referência a citar quando você precisa defender uma escolha metodológica.
Quando você realmente quer um número corrigido pelo acaso
Se você conseguir reduzir a tarefa a um conjunto fixo de unidades, a correção pelo acaso volta a ser válida. Duas reduções comuns:
- Rotulagem em nível de token: reformule a tarefa de trechos como um rótulo por token (o esquema BIO). Agora cada token é um item fixo com um pequeno conjunto de rótulos, e o kappa de Fleiss ou o alfa de Krippendorff se aplicam diretamente. O problema é que a concordância em nível de token parece inflada: a maioria dos tokens pertence à classe fácil "de fora", então um número alto pode esconder uma discordância real sobre os limites.
- Alfa unitizado: Krippendorff (2004) desenvolveu uma variante do alfa exatamente para o caso em que os anotadores segmentam por conta própria um contínuo. É a opção fundamentada quando você quer uma única cifra de confiabilidade corrigida pelo acaso para a segmentação, ao custo de mais preparação.
Um meio-termo prático: relate juntos o kappa em nível de token e a F1 em nível de trecho. O primeiro fala sobre a consistência dos rótulos, a segunda sobre a consistência dos limites, e a diferença entre eles indica qual problema corrigir.
Fazendo isso no Potato
O Potato calcula automaticamente o alfa de Krippendorff para esquemas categóricos, mas para um esquema span o número em nível de documento esconde a discordância sobre os limites, então meça no nível que realmente importa para você. A receita confiável é fazer os anotadores se sobreporem em um subconjunto compartilhado, exportar seus trechos e calcular você mesmo a F1 par a par sob a regra de correspondência que você escolheu.
annotation_schemes:
- name: pii_spans
annotation_type: span
description: "Highlight every span that reveals personal information."
labels:
- name: person
- name: location
- name: org
# Overlap a subset so agreement is measurable
automatic_assignment:
on: true
instance_per_annotator: 100
labels_per_instance: 3A exportação mantém os trechos de cada anotador com seus deslocamentos de caracteres e rótulos, que é tudo o que você precisa para calcular offline a F1 de correspondência exata ou por sobreposição, e para separar a concordância de limites da concordância de tipos. Se seus trechos forem tipados, execute a F1 duas vezes: uma ignorando o tipo (concordância de limites) e outra exigindo que o tipo coincida (concordância completa).
Leitura adicional
- Concordância entre anotadores explicada, para as métricas corrigidas pelo acaso que de fato se aplicam a tarefas categóricas.
- Anotação de trechos e Reconhecimento de entidades nomeadas, para projetar a tarefa em si.
- Resolução de correferência, onde a concordância tem suas próprias métricas especializadas (MUC, B³, CEAF).
- Exportando anotações para ML, para extrair os trechos e calcular a F1.