Guides4 min read
アノテーター間一致度の測定
アノテーションプロジェクトでのCohenのKappa、FleissのKappa、KrippendorffのAlphaの計算と解釈方法。
Potato Team·
アノテーター間一致度の測定
アノテーター間一致度(IAA)は、異なるアノテーターが同じアイテムにどれだけ一貫してラベルを付けるかを測定します。高い一致度は信頼性の高いアノテーションを示し、低い一致度はガイドラインの不明確さまたはタスクの主観性を示唆します。
なぜ一致度を測定するのか?
- ガイドラインの検証:低い一致度 → 不明確な指示
- タスク難易度の評価:一部のタスクは本質的に主観的
- アノテーターの資格確認:誰がさらなるトレーニングを必要とするかを特定
- 信頼性の報告:学術論文に必要
- ラベルの集約:アノテーションの統合方法を決定
一致度メトリクス
CohenのKappa(2人のアノテーター)
カテゴリカルデータで2人のアノテーターを比較:
text
κ = (Po - Pe) / (1 - Pe)
ここで:
- Po = 観測された一致率
- Pe = 偶然による期待一致率
解釈:
| Kappa | 解釈 |
|---|---|
| < 0 | 偶然以下 |
| 0.01-0.20 | わずか |
| 0.21-0.40 | まずまず |
| 0.41-0.60 | 中程度 |
| 0.61-0.80 | かなり |
| 0.81-1.00 | ほぼ完全 |
FleissのKappa(3人以上のアノテーター)
カテゴリカルデータで複数のアノテーター:
yaml
quality_control:
agreement:
metrics:
- fleiss_kappaCohenのKappaと同じ解釈スケール。
KrippendorffのAlpha
最も柔軟 - 以下に対応:
- 任意の数のアノテーター
- 欠損データ
- 様々なデータタイプ(名義、順序、間隔、比率)
yaml
quality_control:
agreement:
metrics:
- krippendorff_alpha
alpha_level: nominal # or ordinal, interval, ratio解釈:
- α ≥ 0.80:信頼性あり
- 0.67 ≤ α < 0.80:暫定的に許容
- α < 0.67:信頼性なし
Potatoでの一致度設定
基本セットアップ
yaml
quality_control:
agreement:
enabled: true
calculate_on_overlap: true
metrics:
- cohens_kappa
- fleiss_kappa
- krippendorff_alpha
# Per annotation scheme
per_scheme: true
# Reporting
report_interval: 100 # Every 100 annotations
export_file: agreement_report.jsonオーバーラップ設定
yaml
quality_control:
redundancy:
# How many annotators per item
annotations_per_item: 3
# Minimum overlap for calculations
min_overlap_for_agreement: 2
# Sampling for agreement
agreement_sample_size: 100 # Calculate on 100 items
agreement_sample_method: random # or stratified, all一致度の計算
ダッシュボードで
Potatoは管理ダッシュボードに一致度メトリクスを表示:
yaml
quality_control:
dashboard:
show_agreement: true
agreement_chart: true
update_frequency: 60 # secondsAPI経由
bash
# Get current agreement metrics
curl http://localhost:8000/api/quality/agreement
# Response:
{
"overall": {
"fleiss_kappa": 0.72,
"krippendorff_alpha": 0.75
},
"per_scheme": {
"sentiment": {
"fleiss_kappa": 0.78,
"krippendorff_alpha": 0.80
},
"topic": {
"fleiss_kappa": 0.65,
"krippendorff_alpha": 0.68
}
},
"sample_size": 150,
"annotator_pairs": 10
}CLI経由
bash
# Calculate agreement from output files
potato agreement --annotations annotation_output/ --output agreement_report.json
# With specific metric
potato agreement --annotations annotation_output/ --metric krippendorff --level ordinal異なるアノテーションタイプの一致度
カテゴリカル(ラジオ、マルチセレクト)
yaml
quality_control:
agreement:
schemes:
sentiment:
type: nominal
metrics: [cohens_kappa, fleiss_kappa]
urgency:
type: ordinal # Low < Medium < High
metrics: [krippendorff_alpha]リッカートスケール
yaml
quality_control:
agreement:
schemes:
quality_rating:
type: ordinal
metrics: [krippendorff_alpha, weighted_kappa]
# Weighted kappa for ordinal
weighting: linear # or quadraticスパンアノテーション
NERなどのスパンは特別な処理が必要:
yaml
quality_control:
agreement:
schemes:
entities:
type: span
span_matching: overlap # or exact, token
# What to compare
compare: label_and_span # or label_only, span_only
# Overlap threshold for "match"
overlap_threshold: 0.5
metrics:
- span_f1
- span_precision
- span_recallランキング
yaml
quality_control:
agreement:
schemes:
preference_rank:
type: ranking
metrics:
- kendall_tau
- spearman_rhoペアワイズ vs 全体一致度
ペアワイズ(各ペア)
yaml
quality_control:
agreement:
pairwise: true
output_matrix: true # Agreement matrix
# Output:
# annotator1 × annotator2: κ = 0.75
# annotator1 × annotator3: κ = 0.68
# annotator2 × annotator3: κ = 0.82全体(全アノテーター)
yaml
quality_control:
agreement:
overall: true
metrics:
- fleiss_kappa # Designed for 3+ annotators
- krippendorff_alpha低い一致度の対処
問題領域の特定
yaml
quality_control:
agreement:
diagnostics:
enabled: true
# Items with most disagreement
show_disagreed_items: true
disagreement_threshold: 0.5
# Labels with most confusion
confusion_matrix: true
# Annotators with low agreement
per_annotator_agreement: true低一致度への対応
yaml
quality_control:
agreement:
alerts:
- threshold: 0.6
action: notify
message: "Agreement below 0.6 - review guidelines"
- threshold: 0.4
action: pause
message: "Agreement critically low - pausing task"
# Automatic guideline reminders
show_guidelines_on_low_agreement: true
guideline_threshold: 0.5完全な設定
yaml
annotation_task_name: "Agreement-Tracked Annotation"
quality_control:
# Redundancy setup
redundancy:
annotations_per_item: 3
assignment_method: random
# Agreement calculation
agreement:
enabled: true
# Metrics
metrics:
- fleiss_kappa
- krippendorff_alpha
# Per-scheme configuration
schemes:
sentiment:
type: nominal
metrics: [fleiss_kappa, cohens_kappa]
intensity:
type: ordinal
metrics: [krippendorff_alpha]
alpha_level: ordinal
entities:
type: span
span_matching: overlap
overlap_threshold: 0.5
metrics: [span_f1]
# Calculation settings
calculate_on_overlap: true
min_overlap: 2
sample_size: all # or number
# Pairwise analysis
pairwise: true
pairwise_output: agreement_matrix.csv
# Diagnostics
diagnostics:
confusion_matrix: true
disagreed_items: true
per_annotator: true
# Alerts
alerts:
- metric: fleiss_kappa
threshold: 0.6
action: notify
# Reporting
report_file: agreement_report.json
report_interval: 50
# Dashboard
dashboard:
show_agreement: true
charts:
- agreement_over_time
- per_scheme_agreement
- annotator_comparison出力レポート
json
{
"timestamp": "2024-10-25T15:30:00Z",
"sample_size": 500,
"annotators": ["ann1", "ann2", "ann3"],
"overall_agreement": {
"fleiss_kappa": 0.72,
"krippendorff_alpha": 0.75
},
"per_scheme": {
"sentiment": {
"fleiss_kappa": 0.78,
"confusion_matrix": {
"Positive": {"Positive": 180, "Negative": 5, "Neutral": 15},
"Negative": {"Positive": 8, "Negative": 165, "Neutral": 12},
"Neutral": {"Positive": 12, "Negative": 10, "Neutral": 93}
}
}
},
"pairwise": {
"ann1_ann2": 0.75,
"ann1_ann3": 0.70,
"ann2_ann3": 0.72
},
"per_annotator": {
"ann1": {"avg_agreement": 0.73, "items_annotated": 500},
"ann2": {"avg_agreement": 0.74, "items_annotated": 500},
"ann3": {"avg_agreement": 0.71, "items_annotated": 500}
},
"most_disagreed_items": [
{"id": "item_234", "disagreement_rate": 1.0},
{"id": "item_567", "disagreement_rate": 0.67}
]
}ベストプラクティス
- 早期に計算:最後まで待たない
- 適切なメトリクスを使用:名義 vs 順序 vs スパン
- 低い一致度を調査:多くの場合ガイドラインの問題が判明
- 論文で報告:学術研究に必須
- 閾値を設定:許容レベルを事前に定義
次のステップ
- 品質管理で一致度を改善
- キャリブレーションのためにトレーニングフェーズを追加
- 一致度情報付きのデータエクスポートを学ぶ
一致度の完全なドキュメントは/docs/core-concepts/user-managementをご覧ください。