エラーバーつきのラベル:アノテーションのための項目反応理論
多数決は、アノテーターが伝えてくれたことのほとんどを捨ててしまいます。項目反応理論を使えば、各ラベルに事後確率と信頼区間がつき、アノテーターの能力とアイテムの難易度が推定され、壊れたコードブックの項目も見つかります。ゴールドラベルもLLMも要りません。
多数決は、どのアノテーターも同じくらい信頼できて、どのアイテムも同じくらい難しいものとして扱い、確率ではなく件数を報告します。項目反応理論(IRT)はその両方の前提を捨てます。一致のパターンだけから各アノテーターの能力と各アイテムの難易度を推定し、そのうえで各ラベルを信頼区間つきの事後確率として報告します。ゴールドラベルもLLMも不要です。 Potatoではこれが心理測定エンジンで、アノテーションが届くのに合わせてライブで動きます。
3人のアノテーターが1つのアイテムにラベルを付けます。2人がsarcastic、1人がsincereと答えました。多数決はこれをsarcasticとして先へ進み、あなたのデータセットには、3人全員が一致したアイテムとまったく同じ確信度でそれが記録されます。
これは情報を捨てています。異を唱えた1人は、いちばん信頼できるアノテーターかもしれません。そのアイテムは、誰にとっても難しいものかもしれません。どちらの事実も件数には残りません。
信頼区間つきのアノテーター能力
項目反応理論とは何か
項目反応理論は心理測定の分野から来たもので、もともとは標準化テストを採点するために作られました。着眼点は、テストが2つのことを同時に教えてくれるという点です。受験者それぞれの能力と、設問それぞれの難しさです。この2つは互いを制約するので、回答のパターンだけから同時に推定できます。できる学生が間違える設問は難しい設問です。難しい設問に正解する学生はできる学生です。
アノテーションも同じ形をしています。アノテーターが受験者、アイテムが設問で、そして誰も答えを持っていません。
PotatoはGLADの多クラス一般化(Whitehill et al. 2009)を当てはめ、次の3つを同時に推定します。
- 各アイテムの真のラベルを、確率分布として
- 各アノテーターの能力(θ)を、標準誤差つきで
- 各アイテムの難易度と、アイテムごとの識別力の診断値
当てはめは決定的で、アノテーション研究の規模ならミリ秒で終わります。だから事後的なバッチ処理ではなく、継続的に走らせられます。
有効にする
psychometrics:
enabled: true
schema: sarcasm
confidence_threshold: 0.95
min_annotators_per_item: 2これだけで分析レイヤーが手に入ります。エクスポートはこれが、
sarcastic (2 of 3 votes)
こうなります。
sarcastic p = 0.94 [0.88 – 0.97]
この確率はモデルの事後確率で、何人が投票したかだけでなく誰が投票したかを重み付けしています。区間は能力推定値に対する感度の幅です。
下流でも、この数字は持っていて損がありません。ソフトラベルで学習する、評価セットを信頼度の下限で絞る、低確率のアイテムをこっそり誤ラベルされたものではなく本当に曖昧なものとして扱う、といった使い方ができます。不一致は平均で消し去るべきノイズではなくなります。この点は不一致はノイズではなくシグナルであると合わせて読む価値があります。
アノテーターの能力を、正直に見せる
能力は一致のパターンから推定されます。1.0は新しいアノテーターの事前値、0はそのアノテーターのラベルが情報を持たないこと、負の値は系統的に誤っていることを意味します。
どの推定値にも標準誤差がついていて、これは点推定値そのものより重要です。ラベルが12件のアノテーターはひげが広く、ダッシュボードも広く描きます。ひげの広い推定値から人事上の判断を下さないでください。 標準誤差は近似(最頻値におけるFisher情報量)であり、作りのうえで多少楽観的です。数字を読み過ぎないようにするためのものであって、誰かを解雇する根拠にするためのものではありません。
カテゴリカルなスキーマ全般でもっと単純に力量を読み取りたいなら、MACEが年上のいとこにあたり、いまも良いツールです。違いは、MACEがバッチ分析として走るのに対して、心理測定は割り当てループの中にいて、進行中の研究に働きかける点です。
コードブックのバグ検出
ここが、みんな驚くところです。
難易度と並んで、モデルは識別力も推定します。あるアイテムについて、アノテーターの能力はコンセンサスとの一致と相関しているか、という値です。普通は相関します。能力の高いアノテーターほど最終的な答えと一致しやすく、それがだいたい「能力が高い」の意味だからです。
識別力が強く負に振れたときは、何かがおかしいということです。最も優秀なアノテーターが、そのアイテムで系統的に多数派と食い違っています。いちばんありそうな説明は、優秀なアノテーターが急に駄目になったことではありません。そのケースについてガイドラインが曖昧か誤っていて、丁寧なアノテーターこそがそれに気づいている、ということです。
Potatoはこれらを「コードブックのバグの疑い」としてまとめます。研究全体の中でも最も価値の高いアイテムであることが多く、それぞれが人の欠陥ではなく計測器の欠陥だからです。ガイドラインを直してから、付け直してください。チームで片付けるならノーミングルームが良い場所です。
効くところにアノテーション予算を使う
「アイテムあたり常に3人」という固定の重複は、全員が一致するアイテムにも、チームが真っ二つに割れるアイテムにも、同じだけ費やします。これは逆です。
assignment_strategy: psychometric
num_annotators_per_item: 4
psychometrics:
enabled: true
confidence_threshold: 0.95
cost_per_judgment: 0.08こう設定すると、アノテーターが作業を要求したとき、Potatoは残りのアイテムを「そのアノテーターがそのアイテムにラベルを付けたときの期待情報利得」で順位付けします。事後確率がすでに confidence_threshold を超えたアイテムは、そもそも配られなくなります。ダッシュボードは買わずに済んだ判断の数を数え、cost_per_judgment を設定すれば金額でも示します。
有効にする前に知っておく価値のある注意が2つあります。
- コールドスタート。 十分なラベルがたまるまで、割り当てはランダムにフォールバックします。アノテーターの重なりがなければモデルは能力と難易度を切り分けられませんし、切り分けられるふりもしません。その間、ダッシュボードにはウォームアップ中のメーターが表示されます。
- バッチ処理。 順位付けが最も新しいのは、キューが短いときです。1人に200件のバッチを渡すと、そのラベルのほとんどが存在しない時点で計算された順位になるので、適応性が薄まります。
何かを費やす前に重複数を決める
どのプロジェクトも当て推量している問いが、アイテムあたり何人のアノテーターが必要か、です。スタディデザイナーは、当て推量の代わりにモンテカルロシミュレーションでそれに答えます。
python -m potato.psychometrics.design --items 500 --accuracy 0.75 \
--classes 3 --target-ci 0.10 --cost 0.08ann/item alpha 95% interval width majority acc judgments cost
2 0.392 [ 0.330, 0.439] 0.109 0.751 1000 80.00
3 0.388 [ 0.338, 0.431] 0.093 0.864 1500 120.00 <- recommended
推奨されるのは、Krippendorff's αの95%区間が目標より狭くなる最小の重複数です。--accuracy の入力値は、当て推量ではなく小さなパイロットで測るべき値です。
同じ計算はブラウザ上でも走ります。この問いに答えるために何もインストールしたくない場合はどうぞ。
これができないこと
IRTは魔法ではありません。正直な限界をいくつか挙げます。
- モデル化できるのは単一選択のカテゴリカルなスキーマ、
radioとlikertです。複数選択はモデル化されません。 - アノテーターの重なりが必要です。すべてのアイテムを別々の人がラベル付けしている場合、学ぶべき一致の構造がないので、モデルはまだウォームアップ中だと答えます。
- アノテーターが1人だけの場合や、どこも全員一致の場合、当てはめは仕様上退化します。これはバグではなく正しい挙動です。
その代わりに得られるのは、各ラベルがそれぞれの不確実性を伴うデータセットと、性質を把握できているアノテーター群と、コードブックの壊れている箇所の一覧です。
参考資料
- 心理測定エンジン — 設定の全リファレンス
- Truth Serum — ゴールドラベルなしで品質を測るもうひとつのやり方
- アノテーターは何人必要か?
- クラウドラベルの集約 — Dawid–Skeneとその仲間
- アノテーター間一致度