心理測定エンジン
項目反応理論をアノテーションに持ち込みます。各ラベルは素の多数決ではなく事後確率と信頼区間を伴い、モデルの当てはめにゴールドラベルもLLMも必要ありません。
v2.7.0の新機能
Potatoは、アノテーション研究を実際にそうであるもの、つまり測定器として扱えます。心理測定レイヤーは、アノテーションが流れ込むのに合わせて項目反応理論(IRT)のモデルをライブで当てはめ、各アイテムの真のラベルを確率として、各アノテーターの能力を標準誤差つきで、各アイテムの難易度を、そしてコードブックのバグを示唆するアイテムごとの識別力の診断値を、同時に推定します。
ゴールドラベルは不要で、LLMも関与しません。モデル(GLADの多クラス一般化、Whitehill et al. 2009)は、一致のパターンそのものからすべてを立ち上げます。標準化テストが、誰にも宣言されずにどの問題が難しいかを学ぶのと同じ理屈です。当てはめは決定的で、アノテーション研究の規模ならミリ秒で終わります。

設定
# Adaptive routing is opt-in via the standard assignment strategy key.
# Omit this line to keep your existing strategy and use psychometrics
# as a pure analytics layer.
assignment_strategy: psychometric
# Give items a redundancy target so early-stopped items translate into
# concrete saved judgments on the dashboard.
num_annotators_per_item: 4
psychometrics:
enabled: true
schema: sarcasm # scheme to model; default: first radio/likert scheme
refit_interval: 5 # refit after this many new labels (fits are ~ms)
min_observations: 20 # cold-start gate before adaptive routing engages
min_annotators_per_item: 2 # never early-stop an item below this many annotators
confidence_threshold: 0.95 # posterior at which an item counts as resolved
cost_per_judgment: 0.08 # optional: expresses savings in currency
discrimination_flag_threshold: -0.2 # codebook-bug flag sensitivity対応するスキーマは単一選択のカテゴリカルなもの、つまり radio と likert です(likertの各点は名義カテゴリとして扱われます)。複数選択のスキーマはモデル化されません。
エラーバーつきのラベル
エクスポートには sarcastic (2 of 3 votes) ではなく sarcastic, p = 0.94 [0.88 – 0.97] と出ます。この確率はモデルの事後確率で、何人が投票したかだけでなく誰が投票したかを重み付けしたものです。区間は能力推定値に対する±1標準誤差の感度幅です。
下流では、ソフトラベルで学習する、評価セットを高信頼のアイテムに絞る、低確率のアイテムをノイズではなく本当に曖昧なものとして扱う、といった使い方ができます。アノテーターから分布を直接集めるという補完的なやり方については、ソフトラベルアノテーションを参照してください。
アノテーターの能力を、正直に見せる
能力θは一致のパターンから推定されます。1.0は新しいアノテーターの事前値、0はそのラベルが情報を持たないこと、負の値は系統的に誤っていることを意味します。どの推定値にも標準誤差がついていて、ラベルが12件のアノテーターはひげが広く、ダッシュボードもそう表示します。
ひげの広い推定値から人事上の判断を下さないでください。標準誤差は近似(最頻値におけるFisher情報量)であり、作りのうえで多少楽観的です。
コードブックのバグ検出
アイテムの難易度は能力と同時に推定されますが、より使えるシグナルは識別力、つまり各アイテムにおけるアノテーターの能力と回答の正しさの相関です。
識別力が強く負のとき、つまり最も優秀なアノテーターこそが多数派のコンセンサスと食い違っているとき、そのアイテムについては、アノテーターではなくガイドラインのほうが誤っているか曖昧であるのが普通です。ダッシュボードはこれらを「コードブックのバグの疑い」としてまとめます。説明を直してから見直してください。チームがそれを解決する場としてよく使われるのがMultiplayer Roomsです。
適応的な割り当て
assignment_strategy: psychometric を設定すると、アノテーターが作業を要求したときに、残りのアイテムが「そのアノテーターがそのアイテムにラベルを付けたときの1ステップ先の期待情報利得」の厳密な値で順位付けされます。不確実性の高いアイテムは能力の高いアノテーターに優先的に回り、事後確率がすでに confidence_threshold を超えたアイテム(min_annotators_per_item 人以上のアノテーターがついていること)は予算を使わなくなります。アイテムあたりN人固定の設計と比べて節約された判断数はダッシュボードで数えられ、cost_per_judgment を設定すれば金額でも示されます。
運用上の注意が2つあります。
- コールドスタート。 ラベルが
min_observations件たまるまで、割り当てはランダムにフォールバックします。モデルが能力と難易度を切り分けるには、アノテーターの重なりが先に必要だからです。この間、ダッシュボードにはウォームアップ中のメーターが表示されます。 - バッチ処理。 割り当てはユーザーのキューが補充されるときに起きます。キューが短いほど順位付けは新しく、ユーザーあたりのバッチが非常に大きいと適応性は薄まります。
費やす前の検出力分析
どのアノテーションプロジェクトも「アイテムあたり何人のアノテーターか」を当て推量しています。スタディデザイナーは、シード固定のモンテカルロシミュレーションでそれに答えます。
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%区間が --target-ci より狭くなる最小の重複数です。これは、擁護できる程度に精密な一致度の推定値が得られる設計のうち、最も安いものにあたります。--accuracy の入力値は、小さなパイロットで測るのが一番です。同じ分析はダッシュボードからも、管理者APIからも利用できます(GET /psychometrics/api/design)。
アノテーション検出力計算機を使えば、ブラウザ上で対話的に実行することもできます。
エンドポイント
すべてのエンドポイントは管理者アクセスを必要とします(RBACの VIEW_ADMIN_DASHBOARD。デバッグモードと共有の管理者APIキーも通ります)。
| エンドポイント | 目的 |
|---|---|
GET /psychometrics/dashboard | ライブダッシュボード |
GET /psychometrics/api/stats | ダッシュボードの集計値(新しく当てはめ直します) |
GET /psychometrics/api/export | 拡張エクスポート:事後確率、区間、能力 |
GET /psychometrics/api/design | 検出力分析 |
MACEとの関係
PotatoにはMACEも同梱されていて、アノテーターの能力と予測ラベルを事後的な分析として推定します。両者は同じ文献から出た親戚ですが、役割が違います。
| MACE | 心理測定 | |
|---|---|---|
| アノテーターのモデル | 知っている/推測しているという能力 | 標準誤差つきの連続的な能力 |
| アイテムのモデル | なし | 難易度 + 識別力(コードブックのバグのフラグ) |
| 実行タイミング | N件のアノテーション後のバッチ分析 | ライブ、割り当てループの中 |
| 割り当てを動かすか | いいえ | はい。情報利得によるルーティングと早期打ち切り |
| ラベルの不確実性 | エントロピー | 事後確率 + 感度区間 |
| 研究前の計画 | なし | モンテカルロによる検出力分析 |
カテゴリカルなスキーマの能力をさっと読み取りたいときはMACEを使ってください(multiselect にも対応します)。研究の進行中にその研究へ働きかける、難易度を織り込んだ測定がほしいときは心理測定を使ってください。
トラブルシューティング
- ダッシュボードがいつまでも「ウォームアップ中」と出る。 モデルには最低でも2種類のラベルと、重なりのあるアノテーターが必要です。アノテーターが1人だけ、あるいはラベルが全員一致の場合、当てはめは仕様上退化します。アノテーターを増やすか
min_observationsを下げてください。 assignment_strategy: psychometricを設定したのに、割り当てがランダムに見える。 それはコールドスタートのフォールバックです。ウォームアップ中のメーターとmin_observationsを確認してください。- 能力がどれも1.0付近で、ひげが大きい。 まだ重なりが足りていません。アノテーターが共有アイテムを積み上げるにつれて能力は分離していきます。
/psychometrics/...が404になる。 設定にpsychometrics.enabled: trueのブロックがありません。
参考資料
- Truth Serum — ピア予測によるスコアリング。ゴールドラベルに頼らないもうひとつの品質シグナル
- タスク割り当て戦略
- アノテーター間一致度
- アノテーターは何人必要か?
- ソースドキュメント