Skip to content

LLM-as-Judge のキャリブレーション

1 つ以上の LLM ジャッジでデータを自動ラベリングし、ブラインドの人手キャリブレーションを行って精度・一致度・キャリブレーション誤差を測定します。「この LLM ジャッジを信頼してよいか?」に、根拠が示せて再現可能なワークフローで答えます。

ジャッジキャリブレーションは、1 つ以上の LLM ジャッジでデータを自動ラベリングし、それらをブラインドの人手ラベルに対してキャリブレーションします。これにより、LLM ジャッジをどこまで信頼してよいかを定量化できます。ジャッジ用プロンプトを書き、モデルを選ぶと、Potato が各モデルでデータに対して k 回サンプリングします。続いてモデルの回答を見ずにサンプルをブラインドラベリングすると、Potato がモデルごとの精度、人↔モデルおよびモデル↔モデルの一致度、キャリブレーション誤差、混同行列を報告します。

LLM を使ってモデル出力を採点することは、いまやエージェントやモデルの評価で一般的になっています。しかしジャッジは、人間の判断にどれだけ追従するかが分かって初めて役に立ちます。キャリブレーションは、その信頼を裏付け可能なものにする測定ステップです。

仕組み

text
SETUP → GENERATING → HUMAN_CALIBRATION → REPORT → COMPLETED
  1. 生成 — 各モデルは項目ごとに k 回クエリされます。最頻ラベルが予測となり、k 個のサンプルのうちそれに一致する割合がモデルの信頼度です。結果は専用ストアに書き込まれ、アノテーションデータに混入することは決してないため、人間からは見えません。
  2. 人手キャリブレーション — Potato はラベル済み項目からランダムまたは層化サンプルを抽出し、1 名以上の人間が通常のアノテーション画面を通じてブラインドラベリングします。
  3. レポート — 指標は人∩モデルの重なりに対して計算され、出力ディレクトリに書き込まれます。

モデルラベルは別ストアに置かれ、UI に注入されることがないため、ブラインド性はアノテーターの規律ではなく構造として保証されます。

クイックスタート

リポジトリのルートから付属のサンプルを実行します。

bash
python potato/flask_server.py start examples/ai-assisted/judge-calibration/config.yaml -p 8000 --debug
  • http://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 を実行してください。

設定

yaml
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 つのジャッジを調整するときはアライメントを選んでください。

関連項目

実装の詳細については、ソースドキュメントを参照してください。