Skip to content

스팬 및 구조화 출력의 일치도

스팬, NER, 구조화 어노테이션에서 Cohen과 Fleiss의 kappa가 왜 무너지는지, 그리고 대신 무엇을 써야 하는지 설명합니다. 일치도로서의 F1, 완전 일치 대 부분 일치, Krippendorff의 단위화 알파를 다룹니다.

Cohen의 kappa 같은 우연 보정 일치도는 모든 어노테이터가 동일한 고정된 항목 집합을 동일한 고정된 범주 집합에서 라벨링한다고 가정합니다. 스팬 어노테이션은 이 가정을 깨뜨립니다. 어노테이터들은 스팬이 어디서 시작하고 어디서 끝나는지, 그리고 애초에 존재하는지에 대해서도 의견이 갈릴 수 있기 때문입니다. 스팬에서 표준적인 신뢰도 척도는 kappa가 아니라 쌍별 F1이며, 경계의 부분적 겹침을 일치로 볼지 여부를 미리 정해 두어야 합니다. 이 가이드는 통상적인 지표가 여기서 왜 실패하는지, 그리고 대신 무엇을 보고해야 하는지를 설명합니다.

kappa가 스팬에 맞지 않는 이유

우연 보정 계수에는 세 가지가 필요합니다. 고정된 항목 목록, 고정된 라벨 목록, 그리고 어노테이터들이 우연히 일치할 빈도를 계산할 수 있는 능력입니다. 스팬 과제는 이 중 어느 것도 깔끔하게 제공하지 않습니다. 라벨링할 "항목"의 사전 정의된 목록이 없으며, 어노테이터는 읽어 나가면서 스팬을 만들어 내기 때문에 두 사람이 같은 문서에 대해 서로 다른 개수의 스팬을 생성할 수 있습니다. 그리고 의미 있는 음성 클래스도 존재하지 않습니다. "아무도 표시하지 않은 항목"이란 가능한 모든 부분 문자열이며, 이는 천문학적으로 크고 정의가 모호한 집합입니다.

바로 그 마지막 지점이 결정적입니다. Hripcsak and Rothschild (2005)는 정보 검색이나 스팬 추출처럼 음성 클래스가 매우 크거나 정의되지 않은 경우, 두 어노테이터가 동일한 임의의 스팬에서 일치할 확률이 사실상 0이므로 우연 보정이 거의 아무것도 바꾸지 못하고 kappa의 전제가 더 이상 성립하지 않음을 보였습니다. 이 결과는 더 깔끔한 대안의 표준적 근거가 됩니다. 즉 F-측도 자체가 적절한 일치도 통계량입니다. 한 어노테이터의 스팬을 참조로, 다른 어노테이터의 스팬을 예측으로 취급해 F1을 계산하고, 모든 어노테이터 쌍에 대해 평균을 냅니다. F1은 대칭이므로 쌍의 순서는 중요하지 않습니다.

완전 일치인가 부분 일치인가: 측정 전에 결정하라

보고하는 수치는 무엇을 적중으로 볼지에 전적으로 달려 있고 보편적인 정답은 없으므로, 자신의 선택을 명시하십시오.

  • 완전 일치: 두 스팬은 두 경계가 모두 동일할 때만 일치합니다. 엄격하며, 경계가 의미를 담는 경우(법률 인용, 화학 명칭)에 옳은 선택입니다.
  • 부분 / 겹침 일치: 두 스팬은 조금이라도 겹치거나 어떤 임계값을 넘어 겹치면 일치로 봅니다. 더 관대하며, 개체의 정확한 범위보다 그 존재가 더 중요할 때 합리적입니다.
  • 경계 대 라벨: 유형이 있는 스팬(NER)에서는 두 질문을 분리하십시오. 어노테이터들이 같은 범위를 표시했는가, 그리고 그것에 같은 유형을 부여했는가입니다. 이 둘을 함께 보고하면 실제로 어느 쪽이 불일치를 일으키는지가 가려집니다.

Artstein and Poesio (2008)은 전산언어학에서 일치도에 관한 표준적인 개관 문헌으로, 이 "단위화" 문제, 즉 텍스트를 단위로 어떻게 분할할지에 대한 불일치를 상세히 다룹니다. 방법론적 선택을 옹호해야 할 때 인용할 참고문헌입니다.

우연 보정 수치를 원하는 경우

과제를 고정된 단위 집합으로 환원할 수 있다면 우연 보정이 다시 유효해집니다. 흔한 두 가지 환원 방법이 있습니다.

  • 토큰 수준 라벨링: 스팬 과제를 토큰별 라벨(BIO 스킴)로 재구성합니다. 이제 각 토큰은 작은 라벨 집합을 가진 고정 항목이 되며, Fleiss의 kappa나 Krippendorff의 알파를 직접 적용할 수 있습니다. 문제는 토큰 수준 일치도가 부풀려져 보인다는 점입니다. 대부분의 토큰은 쉬운 "외부" 클래스이므로 높은 수치가 실제 경계 불일치를 가릴 수 있습니다.
  • 단위화 알파: Krippendorff (2004)는 어노테이터가 스스로 연속체를 분할하는 바로 그 경우를 위해 알파의 변형을 개발했습니다. 분할에 대해 우연 보정된 단일 신뢰도 수치를 원할 때의 원칙적인 선택지이며, 그 대가로 준비 작업이 더 많아집니다.

실무적인 절충안은 토큰 수준 kappa 스팬 수준 F1을 함께 보고하는 것입니다. 전자는 라벨 일관성을, 후자는 경계 일관성을 알려 주며, 둘 사이의 격차가 어느 문제를 고쳐야 하는지를 말해 줍니다.

Potato에서 실행하기

Potato는 범주형 스킴에 대해 Krippendorff의 알파를 자동으로 계산하지만, span 스킴에서는 문서 수준 수치가 경계 불일치를 가리므로 실제로 중요한 수준에서 측정하십시오. 신뢰할 만한 방법은 어노테이터들을 공유 부분집합에서 겹치게 하고, 그들의 스팬을 내보낸 뒤, 선택한 일치 규칙에 따라 쌍별 F1을 직접 계산하는 것입니다.

yaml
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: 3

내보내기는 각 어노테이터의 스팬을 문자 오프셋 및 라벨과 함께 보존하며, 이것은 완전 일치 또는 겹침 F1을 오프라인으로 계산하고 경계 일치와 유형 일치를 분리하는 데 필요한 전부입니다. 스팬에 유형이 있다면 F1을 두 번 실행하십시오. 한 번은 유형을 무시하고(경계 일치), 한 번은 유형이 일치하도록 요구해서(완전 일치) 계산합니다.

더 읽을거리