Acuerdo para tramos y salidas estructuradas
Por qué la kappa de Cohen y de Fleiss falla en la anotación de tramos, NER y estructuras, y qué usar en su lugar: F1 como acuerdo, coincidencia exacta frente a parcial y alfa unitizada de Krippendorff.
El acuerdo corregido por azar, como la kappa de Cohen, supone que cada anotador etiqueta el mismo conjunto fijo de elementos a partir del mismo conjunto fijo de categorías. La anotación de tramos rompe ese supuesto: los anotadores pueden discrepar sobre dónde empieza un tramo, dónde termina y si existe siquiera. Para los tramos, la medida estándar de fiabilidad es la F1 por pares, no la kappa, y hay que decidir de antemano si un solapamiento parcial de límites cuenta como acuerdo. Esta guía explica por qué las métricas habituales fallan aquí y qué informar en su lugar.
Por qué la kappa no encaja con los tramos
Un coeficiente corregido por azar necesita tres cosas: una lista fija de elementos, una lista fija de etiquetas y la posibilidad de calcular con qué frecuencia los anotadores coincidirían por azar. Las tareas de tramos no aportan ninguna de ellas de forma limpia. No hay una lista predeterminada de "elementos" que etiquetar: el anotador inventa los tramos a medida que lee, de modo que dos personas pueden producir distinta cantidad de tramos sobre el mismo documento. Y no existe una clase negativa con sentido: los "elementos que nadie marcó" son todas las subcadenas posibles, un conjunto astronómicamente grande y mal definido.
Ese último punto es lo decisivo. Hripcsak and Rothschild (2005) demostraron que, cuando la clase negativa es muy grande o indefinida, como en la recuperación de información y la extracción de tramos, la probabilidad de que dos anotadores coincidan en el mismo tramo arbitrario es prácticamente nula, por lo que la corrección por azar apenas cambia nada y dejan de sostenerse los supuestos que hay detrás de la kappa. Su resultado es la justificación estándar de una alternativa más limpia: la propia medida F es el estadístico de acuerdo apropiado. Trata los tramos de un anotador como referencia y los del otro como predicciones, calcula la F1 y promedia sobre todos los pares de anotadores. Como la F1 es simétrica, el orden del par no importa.
Coincidencia exacta o parcial: decídelo antes de medir
El número que informes depende por completo de qué cuenta como acierto, y no hay una respuesta universal, así que declara tu elección.
- Coincidencia exacta: dos tramos coinciden solo si ambos límites son idénticos. Estricta, y la opción correcta cuando los límites tienen significado (citas jurídicas, nombres químicos).
- Coincidencia parcial / por solapamiento: dos tramos coinciden si se solapan en algo, o por encima de cierto umbral. Más permisiva, y razonable cuando importa más la presencia de una entidad que su extensión exacta.
- Límite frente a etiqueta: para tramos tipados (NER), separa dos preguntas: ¿marcaron los anotadores la misma extensión? y ¿le dieron el mismo tipo? Informarlas juntas oculta cuál está causando realmente tu desacuerdo.
Artstein and Poesio (2008) es el estudio de referencia sobre acuerdo en lingüística computacional y trabaja en detalle este problema de "unitización", el desacuerdo sobre cómo segmentar el texto en unidades. Es la referencia que hay que citar cuando necesitas defender una decisión metodológica.
Cuándo sí quieres un número corregido por azar
Si puedes reducir la tarea a un conjunto fijo de unidades, la corrección por azar vuelve a ser válida. Dos reducciones habituales:
- Etiquetado a nivel de token: reformula la tarea de tramos como una etiqueta por token (el esquema BIO). Ahora cada token es un elemento fijo con un conjunto pequeño de etiquetas, y la kappa de Fleiss o el alfa de Krippendorff se aplican directamente. El inconveniente es que el acuerdo a nivel de token parece inflado: la mayoría de los tokens son la clase fácil "exterior", así que un número alto puede ocultar un desacuerdo real sobre los límites.
- Alfa unitizada: Krippendorff (2004) desarrolló una variante del alfa precisamente para el caso en que los anotadores segmentan por sí mismos un continuo. Es la opción con fundamento cuando quieres una única cifra de fiabilidad corregida por azar para la segmentación, a costa de más preparación.
Una vía intermedia práctica: informa juntas la kappa a nivel de token y la F1 a nivel de tramo. La primera te habla de la consistencia de las etiquetas, la segunda de la consistencia de los límites, y la brecha entre ambas te dice qué problema arreglar.
Cómo hacerlo en Potato
Potato calcula automáticamente el alfa de Krippendorff para los esquemas categóricos, pero para un esquema span el número a nivel de documento oculta el desacuerdo sobre los límites, así que mide en el nivel que realmente te importa. La receta fiable es hacer que los anotadores se solapen en un subconjunto compartido, exportar sus tramos y calcular tú mismo la F1 por pares bajo la regla de coincidencia que hayas elegido.
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: 3La exportación conserva los tramos de cada anotador con sus desplazamientos de caracteres y etiquetas, que es todo lo que necesitas para calcular sin conexión la F1 de coincidencia exacta o por solapamiento, y para separar el acuerdo sobre límites del acuerdo sobre tipos. Si tus tramos son tipados, ejecuta la F1 dos veces: una ignorando el tipo (acuerdo de límites) y otra exigiendo que el tipo coincida (acuerdo completo).
Lecturas adicionales
- Explicación del acuerdo entre anotadores, para las métricas corregidas por azar que sí se aplican a las tareas categóricas.
- Anotación de tramos y Reconocimiento de entidades nombradas, para diseñar la tarea en sí.
- Resolución de correferencia, donde el acuerdo tiene sus propias métricas especializadas (MUC, B³, CEAF).
- Exportar anotaciones para ML, para sacar los tramos y calcular la F1.