이질적 어노테이터 커버리지
항목마다 서로 다른 수의 어노테이터를 배정합니다. 기본 상한, 품질 모니터링을 위한 층화 중첩 샘플, 불일치 시 적응형 부스트, 어노테이터별 할당량, 자동 판정 라우팅을 구성합니다.
이질적 커버리지를 사용하면 일률적인 상한 대신 항목마다 서로 다른 수의 어노테이터를 배정할 수 있습니다. 흔한 연구 설계는 대부분의 항목에 한 명의 어노테이터를 두고, 품질을 모니터링하기 위해 5~10% 샘플에 두세 명이 중첩되도록 하는 것입니다. Potato는 이를 num_annotators_per_item 및 per_annotator_quota 구성 블록으로 표현합니다.
항목별 어노테이터 상한
num_annotators_per_item이 정규 키입니다. 일률적인 상한을 위한 단일 정수, 또는 기본값, 중첩 샘플, 선택적 적응형 부스트를 포함하는 구조화된 매핑을 받습니다.
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: 1max_annotations_per_item은 이제 num_annotators_per_item: <int>의 더 이상 사용되지 않는 별칭입니다.
중첩 샘플
overlap_sample 블록은 품질 모니터링을 위해 항목의 결정론적 부분집합에서 상한을 높입니다. 샘플링은 시작 시 한 번 수행되며, 선택된 항목에는 required_annotations가 새겨져 배정 로직이 이를 고커버리지로 취급합니다.
| 필드 | 유형 | 설명 |
|---|---|---|
fraction | (0, 1] 범위의 float | 샘플링할 항목의 비율 |
count | int ≥ 2 | 샘플링된 항목의 어노테이터 상한(default를 초과해야 함) |
stratify_by | 문자열(선택) | 샘플을 층화하는 데 사용되는 항목 데이터 필드 |
seed | int(선택) | RNG 시드. 기본값은 전역 random_seed |
stratify_by를 설정하면 비율이 층별로 적용되어 모든 범주가 비례적으로 기여합니다.
적응형 부스트
적응형 부스트는 초기 어노테이터들이 불일치한 항목의 상한을 확장합니다. 항목에 어노테이션이 최소 두 개 있고 그 불일치 점수가 disagreement_threshold를 넘으면, 상한이 boost_to로 높아지고 그 항목은 배정 큐에 다시 들어갑니다. 부스트는 항목당 한 번만 일어납니다.
어노테이터별 할당량
per_annotator_quota는 항목별 상한과 무관하게 각 어노테이터에게 몇 개의 항목이 배정되는지를 제어합니다.
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 아래로 떨어지면 판정 큐로 보내집니다. 저품질 항목은 판정자가 수동으로 큐를 재구성할 때가 아니라 샘플이 포화되는 즉시 드러납니다.
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/에 있습니다. 저장소 루트에서:
python potato/flask_server.py start examples/advanced/heterogeneous-coverage/config.yaml -p 8000이 데모는 두 도메인에 걸친 20개 항목을 사용하고, 도메인으로 층화한 3-어노테이터 중첩을 위해 20%를 샘플링하며, 임계값 0.5에서 적응형 부스트를 활성화하고, 두 개의 전문성 등급을 정의하며, 일치도가 낮은 항목을 판정으로 라우팅합니다.
관련 문서
- 작업 배정 — 배정 전략
- 어노테이터 간 일치도 가이드 —
/admin/iaa뒤의 지표 - 크라우드소싱 — MTurk 및 Prolific 연동
구현 세부 사항은 소스 문서를 참조하세요.