LLM-as-Judge のキャリブレーション
1 つ以上の LLM ジャッジでデータを自動ラベリングし、ブラインドの人手キャリブレーションを行って精度・一致度・キャリブレーション誤差を測定します。「この LLM ジャッジを信頼してよいか?」に、根拠が示せて再現可能なワークフローで答えます。
ジャッジキャリブレーションは、1 つ以上の LLM ジャッジでデータを自動ラベリングし、それらをブラインドの人手ラベルに対してキャリブレーションします。これにより、LLM ジャッジをどこまで信頼してよいかを定量化できます。ジャッジ用プロンプトを書き、モデルを選ぶと、Potato が各モデルでデータに対して k 回サンプリングします。続いてモデルの回答を見ずにサンプルをブラインドラベリングすると、Potato がモデルごとの精度、人↔モデルおよびモデル↔モデルの一致度、キャリブレーション誤差、混同行列を報告します。
LLM を使ってモデル出力を採点することは、いまやエージェントやモデルの評価で一般的になっています。しかしジャッジは、人間の判断にどれだけ追従するかが分かって初めて役に立ちます。キャリブレーションは、その信頼を裏付け可能なものにする測定ステップです。
仕組み
SETUP → GENERATING → HUMAN_CALIBRATION → REPORT → COMPLETED
- 生成 — 各モデルは項目ごとに k 回クエリされます。最頻ラベルが予測となり、k 個のサンプルのうちそれに一致する割合がモデルの信頼度です。結果は専用ストアに書き込まれ、アノテーションデータに混入することは決してないため、人間からは見えません。
- 人手キャリブレーション — Potato はラベル済み項目からランダムまたは層化サンプルを抽出し、1 名以上の人間が通常のアノテーション画面を通じてブラインドラベリングします。
- レポート — 指標は人∩モデルの重なりに対して計算され、出力ディレクトリに書き込まれます。
モデルラベルは別ストアに置かれ、UI に注入されることがないため、ブラインド性はアノテーターの規律ではなく構造として保証されます。
クイックスタート
リポジトリのルートから付属のサンプルを実行します。
python potato/flask_server.py start examples/ai-assisted/judge-calibration/config.yaml -p 8000 --debughttp://localhost:8000/judge_calibration/adminを開いて設定と実行を行います。- 生成が完了したら、
http://localhost:8000/annotateでサンプルをブラインドラベリングします。 - Build report をクリックし、
http://localhost:8000/judge_calibration/reportを開きます。
このサンプルはローカルの Ollama モデルを使うため、API キーは不要です。まず Ollama を起動し、ollama pull llama3.2:3b を実行してください。
設定
judge_calibration:
enabled: true
prompt: | # supports {text}, {labels}, {description}
You are an impartial expert annotator. Classify the sentiment as exactly
one of: positive, negative, neutral.
models:
- endpoint_type: openai # openai | anthropic | ollama | vllm | gemini | openrouter | huggingface
model: gpt-4o-mini
api_key: ${OPENAI_API_KEY} # env-var expansion supported
temperature: 0.7 # must be > 0 so the k samples vary
- endpoint_type: ollama
model: llama3.1:8b
base_url: http://localhost:11434
temperature: 0.7
k_samples: 5 # samples per model per item
max_items: 1000 # cap on items the LLMs label (null = all)
sampling:
strategy: stratified # random | stratified | all
sample_size: 200 # how many items humans blind-label
seed: 42
human:
num_raters: 1 # 1 = solo researcher; N adds human-human IAA
gold: single # single | majority
schemas: [sentiment] # annotation_scheme names to evaluate ([] = all)
output:
dir: judge_calibration_outputこれらの大半は管理ウィザードで上書きして再実行できます。
temperature > 0 に設定してください。k_samples > 1 で温度が 0 だとサンプルがすべて同一になり、信頼度は常に 1.0、キャリブレーションレポートは無意味になります。その場合 Potato は起動時に警告を出します。
対応するアノテーションタイプ
| タイプ | ステータス | 指標 |
|---|---|---|
radio / select | 対応 | 精度、P/R/F1、Cohen/Fleiss κ、Krippendorff α、ECE、混同行列 |
likert | 対応 | 上記に加えて MAE と順序付き Krippendorff α |
multiselect | 対応 | ラベルごとの P/R/F1、平均 Jaccard、完全一致精度、キャリブレーション |
span | 実験的 | IoU マッチングによる P/R/F1、平均 IoU、span-F1 一致度、span レベルのキャリブレーション |
span 対応では、ジャッジの文字オフセットのスパンを k 個のサンプルにわたってクラスタリングし、Intersection over Unionでゴールドと突き合わせます。そのヒューリスティクスは方向性を持つものであり、厳密ではありません。
レポートに含まれる内容
- 各モデルの人手ゴールドラベルに対する精度、適合率、再現率、F1。
- 人↔モデル、モデル↔モデル、人↔人のペアに分割した Cohen κ。
- すべての評価者にわたる Fleiss κ と Krippendorff α。
- 期待キャリブレーション誤差 (ECE)、信頼性ビン、Brier スコア。投票割合による信頼度が正しさをどれだけ追従するかを示します。
- 各モデルの人手ゴールドに対する混同行列。
指標は重なりに対して計算されます。すなわち、モデルと人間の双方がラベリングした項目で、キャリブレーションサンプルを抽出した場合はそのサンプルに限定されます。
出力は output.dir 配下に書き込まれます。llm_labels.jsonl(モデル・項目・スキーマごとに 1 行)、report.json、そして人が読める report.html です。
ジャッジキャリブレーション vs. ジャッジアライメント
ジャッジキャリブレーションは複数のジャッジ、経験的な信頼度(k 個のサンプルにわたる投票割合)を使い、人間を厳密にブラインドのまま保ちます。ジャッジアライメントは単一のジャッジを既存の人手ゴールドラベルに対してキャリブレーションし、アノテーション中にその判定をインラインで表示し、ルーブリックの反復改善を中心に構築されています。候補ジャッジを精査するときはキャリブレーションを、固定されたゴールドセットに対して 1 つのジャッジを調整するときはアライメントを選んでください。
関連項目
- ジャッジ ↔ 人間アライメント — 単一ジャッジのインラインキャリブレーション
- ソロモード — 人間と LLM の完全な協調ラベリング
- アノテーター間一致度ガイド — kappa と alpha 指標の詳説
実装の詳細については、ソースドキュメントを参照してください。