Skip to content

이질적 어노테이터 커버리지

항목마다 서로 다른 수의 어노테이터를 배정합니다. 기본 상한, 품질 모니터링을 위한 층화 중첩 샘플, 불일치 시 적응형 부스트, 어노테이터별 할당량, 자동 판정 라우팅을 구성합니다.

이질적 커버리지를 사용하면 일률적인 상한 대신 항목마다 서로 다른 수의 어노테이터를 배정할 수 있습니다. 흔한 연구 설계는 대부분의 항목에 한 명의 어노테이터를 두고, 품질을 모니터링하기 위해 5~10% 샘플에 두세 명이 중첩되도록 하는 것입니다. Potato는 이를 num_annotators_per_itemper_annotator_quota 구성 블록으로 표현합니다.

항목별 어노테이터 상한

num_annotators_per_item이 정규 키입니다. 일률적인 상한을 위한 단일 정수, 또는 기본값, 중첩 샘플, 선택적 적응형 부스트를 포함하는 구조화된 매핑을 받습니다.

yaml
num_annotators_per_item:
  default: 1
  overlap_sample:
    fraction: 0.1
    count: 3
    stratify_by: domain
    seed: 42
  adaptive:
    enabled: true
    disagreement_threshold: 0.5
    boost_to: 3
  min: 1

max_annotations_per_item은 이제 num_annotators_per_item: <int>의 더 이상 사용되지 않는 별칭입니다.

중첩 샘플

overlap_sample 블록은 품질 모니터링을 위해 항목의 결정론적 부분집합에서 상한을 높입니다. 샘플링은 시작 시 한 번 수행되며, 선택된 항목에는 required_annotations가 새겨져 배정 로직이 이를 고커버리지로 취급합니다.

필드유형설명
fraction(0, 1] 범위의 float샘플링할 항목의 비율
countint ≥ 2샘플링된 항목의 어노테이터 상한(default를 초과해야 함)
stratify_by문자열(선택)샘플을 층화하는 데 사용되는 항목 데이터 필드
seedint(선택)RNG 시드. 기본값은 전역 random_seed

stratify_by를 설정하면 비율이 층별로 적용되어 모든 범주가 비례적으로 기여합니다.

적응형 부스트

적응형 부스트는 초기 어노테이터들이 불일치한 항목의 상한을 확장합니다. 항목에 어노테이션이 최소 두 개 있고 그 불일치 점수가 disagreement_threshold를 넘으면, 상한이 boost_to로 높아지고 그 항목은 배정 큐에 다시 들어갑니다. 부스트는 항목당 한 번만 일어납니다.

어노테이터별 할당량

per_annotator_quota는 항목별 상한과 무관하게 각 어노테이터에게 몇 개의 항목이 배정되는지를 제어합니다.

yaml
per_annotator_quota:
  default: 100
  by_user:
    alice: 30
  by_user_role:
    expert: 30
    novice: 200
 
user_roles:
  alice: expert
  carol: novice

해결 순서: by_user[uid]by_user_role[user_roles[uid]]default.

판정 자동 라우팅

판정 블록이 활성화되면, 상한에 도달한 중첩 샘플 항목은 자동으로 점수가 매겨지고, 일치도가 agreement_threshold 아래로 떨어지면 판정 큐로 보내집니다. 저품질 항목은 판정자가 수동으로 큐를 재구성할 때가 아니라 샘플이 포화되는 즉시 드러납니다.

yaml
adjudication:
  enabled: true
  adjudicator_users: [admin]
  min_annotations: 2
  agreement_threshold: 0.75

일치도 검사

중첩 샘플 항목이 포화되면 일치도 통계를 /admin/iaa에서 확인할 수 있으며, 이는 각 스키마의 annotation_type에 적합한 지표 세트를 계산합니다. 예를 들어 명목형 스킴에는 Cohen's 및 Fleiss' kappa, 순서형에는 weighted kappa, 스팬에는 토큰 수준 kappa와 span F1을 계산합니다. 이러한 지표가 무엇을 의미하는지는 어노테이터 간 일치도 가이드를 참조하세요.

예제

실행 가능한 데모가 examples/advanced/heterogeneous-coverage/에 있습니다. 저장소 루트에서:

bash
python potato/flask_server.py start examples/advanced/heterogeneous-coverage/config.yaml -p 8000

이 데모는 두 도메인에 걸친 20개 항목을 사용하고, 도메인으로 층화한 3-어노테이터 중첩을 위해 20%를 샘플링하며, 임계값 0.5에서 적응형 부스트를 활성화하고, 두 개의 전문성 등급을 정의하며, 일치도가 낮은 항목을 판정으로 라우팅합니다.

관련 문서

구현 세부 사항은 소스 문서를 참조하세요.