Skip to content
Guides2 min read

LLM ジャッジを信頼できるか? LLM-as-Judge を人間と照らして校正する

LLM でモデル出力を採点するのは簡単だが、それを信じてよいかの判断は難しい。Potato 2.6 のブラインド人間校正、つまり k サンプル投票、Cohen と Fleiss の kappa、そして期待較正誤差を一通り見ていく。

Potato Team

大規模言語モデルで他のモデルの出力を採点することは、評価における既定の手段になった。採点基準を書き、GPT-4o や Claude に何千もの応答をスコア付けさせ、正解率の数字を読み取る。速く、安く、人間のチームが手作業でラベル付けできる規模をはるかに超えてスケールする。

しかしこのやり方は、あなたが最も確かめる必要があることをひそかに前提にしている。すなわち、ジャッジが人間と一致するということだ。自信を持って間違えるLLM-as-a-judgeは、見た目はきれいでも砂上に築かれたリーダーボードを生み出す。ジャッジの判定を信頼する前に、それが人間の判断にどれだけ追従しているかを測らなければならない。その測定の段階が校正であり、Potato 2.6 はそのためのワークフローを追加した。

この記事では Judge Calibration(ジャッジ校正)を取り上げる。どのようにモデルをサンプリングするか、人間のパスをいかに公正に保つか、そしてレポートが実際に何を伝えてくれるかだ。リファレンスドキュメントに完全なオプション一覧がある。

LLM ジャッジの判定が人間のアノテーションと並べて表示され、その横に逐次更新される kappaPotato におけるインラインのジャッジ校正

問題のかたち

ジャッジは二つの異なる仕方で失敗しうる。そのどちらも捉えたい。

第一は不一致だ。慎重な人間なら「誤り」とするものを、ジャッジが「正しい」と呼んでしまう。これは正解率と一致度の指標が測るものである。

第二は信頼度の歪みだ。ジャッジは 95% 確信していると言うのに、実際に正しいのは 60% のときだけ、という状況だ。ジャッジはそこそこの正解率を持ちながら、ひどく較正がずれていることがありうる。これは、その信頼度を使って作業を振り分けたり閾値を設定したりし始めた瞬間に問題になる。これは較正誤差が測るものである。

Potato の校正パスは、この両方を同時に浮かび上がらせるよう作られている。

仕組み

このワークフローは短い状態機械として動作する。

text
SETUP → GENERATING → HUMAN_CALIBRATION → REPORT → COMPLETED

生成(Generating)。 各モデルは各項目につき k 回問い合わせられる。これら k サンプルにおける最頻のラベルがモデルの予測であり、それと一致するサンプルの割合がモデルの信頼度となる。1 回ではなく k 回サンプリングすることが、モデルが自分自身についてでっち上げた数字ではなく、経験的な信頼度シグナルを与えてくれる。これらの結果は専用のストアに送られ、アノテーションデータに書き込まれることは決してない。

人間校正(Human calibration)。 Potato は項目のランダムサンプルまたは層化サンプルを抽出し、それを一人または複数の人間に割り当てる。人間はモデルの回答を一切見ることなく、通常のアノテーション画面を通じてラベル付けする。

レポート(Report)。 指標は、モデルがラベル付けしたものと人間がラベル付けしたものの重なりにわたって計算され、ディスクに書き出される。

ここでのブラインド性が重要な点だ。モデルのラベルは別個のストアに存在し、UI に注入されることが決してないため、人間はそれによって、たとえ偶然にでもアンカリングされることがない。ブラインド性は構造的なものであって、アノテーターに「見ないでください」と頼む類のものではない。

校正パイプライン:k サンプルのモデル投票、ブラインドの人間パス、そして比較レポートPotato がブラインドの人間ラベルに対してジャッジを校正する仕組み

設定

ジャッジ校正は一つの設定ブロックだ。ジャッジのプロンプトを書き、モデルを列挙し、各モデルを何回サンプリングするかを設定する。

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 | ...
      model: gpt-4o-mini
      api_key: ${OPENAI_API_KEY}
      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]
  output:
    dir: judge_calibration_output

Warning: temperature > 0 を設定すること。k_samples > 1 で温度が 0 の場合、サンプルはすべて同一になり、信頼度は 1.0 に固定され、校正レポートは無意味になる。Potato はその組み合わせを検出すると起動時に警告を出す。

複数のモデルを列挙して並べて校正することもできる。これは、安価なローカルジャッジと高価なホスト型ジャッジのあいだで選択するための自然なやり方だ。

API キーなしで試す

同梱の例ではローカルの Ollama モデルを使っているので、ループ全体をオフラインで実行できる。Ollama を起動し、モデルを取得して、起動する。

bash
ollama pull llama3.2:3b
python potato/flask_server.py start examples/ai-assisted/judge-calibration/config.yaml -p 8000 --debug

http://localhost:8000/judge_calibration/admin を開いて設定・実行し、/annotate でサンプルをブラインドでラベル付けし、それからレポートを作成して /judge_calibration/report で読む。

レポートが伝えること

このレポートは「このジャッジを信頼すべきか?」に、方法セクションに載せられる数字で答えるよう作られている。

  • 人間のゴールドラベルに対する、各モデルの正解率、適合率、再現率、F1
  • Cohen's κ を 人↔モデル、モデル↔モデル、人↔人 のペアに分解したもの。ジャッジが人間と一致する度合いが、人間どうしが一致する度合いに見合っているかどうかを見られる。
  • 全評価者にわたる Fleiss' κKrippendorff's α
  • 期待較正誤差(ECE)、信頼性ビン、そして Brier スコア。信頼度の歪みという失敗モードへの答えだ。
  • モデルごとの混同行列。たいてい本当の物語はここに表れる。易しいクラスでは問題なくても、ある難しい区別で崩れてしまうジャッジ、というように。

すべては重なりにわたって計算される。モデルと人間の両方がラベル付けした項目で、校正サンプルに限定される。出力は output.dir の下に、llm_labels.jsonlreport.json、そして読みやすい report.html として置かれる。

対応している範囲

校正は、ほとんどのジャッジが使う分類スキームでは完全に対応しており、さらに難しい型にも踏み込んでいる。

状態指標
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、スパン単位の較正

スパン校正は、ジャッジが k サンプルにわたって出した文字オフセットのスパンをクラスタリングし、それを intersection-over-union によってゴールドとマッチさせる。その数値は厳密なものではなく方向性を示すものとして扱うこと。

校正とアラインメントの違い

Potato は、本記事と関連しつつ混同しやすい二つ目のワークフローも提供している。Judge Alignment(ジャッジアラインメント)は、単一のジャッジを既存の人間ゴールドセットに対して校正し、アノテーション中にその判定をインラインで表示し、一致度が上がるまで採点基準を反復改善することを軸に組み立てられている。

目安はこうだ。候補となるジャッジを精査していて、ブラインドで経験的な信頼度の数字が欲しいときは校正を選ぶ。一つのジャッジに腰を据え、固定されたゴールドセットに対してその採点基準を調整するときはアラインメントを選ぶ。両者はループを閉じる(Closing the Loop)でまとめて扱われている。

LLM ジャッジがなくなることはない。評価すべきものが多すぎ、手作業でこなせる人が少なすぎるからだ。校正の眼目は、ジャッジを人間で置き換えることではなく、人間が見る必要が生じる前にジャッジをどこまで信頼できるかを、数字で正確に知ることにある。

Judge Calibration ドキュメントはあらゆるオプションを網羅しており、アノテーター間一致度ガイドは kappa と alpha の指標を詳しく解説している。