LLM-as-Judge — 評価者 LLM の組み立て方#
LLM の出力品質を別の LLM に評価させる手法。主観的な評価軸(トーン、読みやすさ、含意の適切さ)を自動化できる。ただし評価者自身にバイアスがあるため、実装には注意が要る。
基本構造#
flowchart LR
I[評価対象の入力] --> M[対象 LLM]
M --> O[対象の出力]
I --> J[評価者 LLM]
O --> J
R[評価ルーブリック] --> J
J --> S[スコア + 理由]
評価ルーブリックの設計#
評価者に「良いかどうか」を聞くだけでは不安定。評価軸を分解し、軸ごとに定義と満点基準を明示する。
## 評価軸
1. 事実正確性(0-5)
- 5: 全ての事実が検証可能で正しい
- 3: 大半は正しいが、1-2 箇所の誤り
- 1: 複数の事実誤認
- 0: 全体的に誤り
2. 形式遵守(0-5)
- 5: 指定フォーマットを完全に守っている
- ...
バイアスを減らす工夫#
1. 位置バイアスを避ける
2 つの出力を比較させる場合、AB / BA の両順で評価して平均を取る。LLM は最初に見た選択肢を優先しがち。
flowchart LR
A[出力 A] --> P1[評価 1<br/>A→B 順]
B[出力 B] --> P1
A --> P2[評価 2<br/>B→A 順]
B --> P2
P1 --> AVG[平均スコア]
P2 --> AVG
2. スコアだけでなく理由を出させる
score: 7 とだけ返させると、理由なしで一貫性のないスコアを吐く。reasoning → score の順で返させると、推論の一貫性が上がる。
3. モデルを変える
評価対象と評価者で別モデルを使う。同じモデルだと自己一致バイアスが出やすい。
4. 人間によるスポットチェック
評価者の判定を定期的にサンプリングして人間が確認する。評価者自身の劣化を検出する。
よくあるアンチパターン#
- 評価者プロンプトに対象の出力を混ぜて書く: プロンプトインジェクションで評価結果が乗っ取られる
- 主観的な語彙しか使わない: 「良い」「自然」「適切」だけではスコアが揺れる。具体的な定義が必要
- 評価セットが小さい: 10 件で平均を出しても、ノイズに埋もれる。最低 50〜100 件欲しい
運用パターン#
プロンプト改善や新モデル導入の前後で、評価セットを回して回帰をチェックする。スコアが有意に下がったら採用を見送る。
flowchart TD
C[変更案] --> T[評価セット実行]
T --> R{スコア比較}
R -->|有意に向上| A[採用]
R -->|変化なし| X[見送り]
R -->|低下| X
まとめ#
LLM-as-Judge は完全な代替ではなく、人間の目を補う仕組み。自動化できる部分だけ自動化し、最終判定は人間が握る運用が現実的。