Digital Reactor
AIエージェント統計・確率

LLM-as-a-Judgeのバイアスはどこまで補正できるか:提示順・回答の長さ・自己選好

LLM-as-a-Judgeのバイアスはどこまで補正できるか:提示順・回答の長さ・自己選好

はじめに

「回答Aと回答B、どちらが優れていますか」という指示をLLMに投げて採点させるやり方は、評価の自動化でいちばんよく使われます。人手より速く、文字列一致のルールより柔軟です。ただしこの審判は、中身以外のものにも反応します。先に提示されたほうを選びやすい、長い回答に高い点を付けやすい、自分と同じ系列のモデルが書いた回答を好む、といった傾向が知られています。

困るのは、バイアスがあること自体より、どれを数字で打ち消せてどれが打ち消せないのかが混ざったまま議論されることです。提示順は、どちらを先に出すかをこちらが決められるので、完全に消せます。回答の長さは、消せる場合と、消そうとすると順位がかえって崩れる場合があります。自分の系列びいきは、審判が1系統しかないうちは、そのモデルが本当に優れているのかと区別する手立てがありません。同じ「バイアス」という言葉でくくられていても、対処のしかたと、対処のあとに残るものは別物です。

対象読者:

  • LLM-as-a-Judgeで自社のエージェントやプロンプトを評価している方
  • 審判のバイアス対策にどこまで工数をかけるべきか決めたい方
  • Bradley-Terryモデルや、回帰による交絡調整の基礎がある方

記事のポイント:

  • 3つのバイアスを、その印がモデルの識別子と独立に動くかどうかで切り分けます
  • 提示順を固定したままの推定が実力差を83%過大に出すこと、順序の項を1本足せば誤差が消えることを閉じた式で示します
  • 長さで調整すると順位相関がかえって下がる領域を求め、その分かれ目を g>R/(12R2)g > R/(1-2R^2) という条件で与えます
  • 自己選好は審判が1系統だと対数尤度が完全に平坦になることを示し、系統を2つにすれば検出できることを標準誤差で確かめます

審判のスコアを3つの項に分ける

審判が回答に付ける潜在的な評価を、次のように書きます。

y=βm+δπ+γz+ϕsjm+εy = \beta_m + \delta\,\pi + \gamma\,z + \phi\,s_{jm} + \varepsilon

βm\beta_m が測りたい真の品質、π\pi は提示位置(先なら +1+1、後なら 1-1)、zz は回答の見た目(長さや書式)、sjms_{jm} は審判 jj と回答を書いたモデル mm が同系列なら1、そうでなければ0です。2案を比べさせる形式なら、2つの yy の差をロジスティック関数に通したものが勝率になります。ペア比較から実力スコアを出す仕組みで扱ったBradley-Terryモデルに、項を3本足したものだと考えてください。対数オッズをEloの点数に直すときは 400/ln10173.7400/\ln 10 \approx 173.7 を掛けます。

δ\deltaγ\gammaϕ\phi を推定できるかどうかは、それぞれの印がモデルの識別子とどれだけ独立に動くかで決まります。βm\beta_m はモデルごとの定数なので、印がモデルの中でまったく変動しなければ、その係数は βm\beta_m に吸収されます。回帰の言い方をすれば、その列がモデルダミーの張る空間に入り、計画行列のランクが落ちます。解が一意に決まらないので、判定件数をいくら増やしても解けません。識別可能性(identifiability)の問題です。

この観点で3つを並べると、扱いやすさの順がはっきりします。提示位置はこちらが割り当てるので、いくらでも独立に振れます。回答の長さはモデルの中でも問題ごとに変わるので変動はありますが、その変動の一部は品質そのものから来ています。同系列かどうかという印は、審判が1系統なら特定のモデルに貼りついたままで、まったく動きません。

以降の数値は、この式から閉じた形で計算するか、計画行列を組んで解いたものです。実在の審判モデルを測った値ではないので、δ\deltaγ\gamma の絶対値ではなく、補正の前後で何がどれだけ残るかという関係のほうを見てください。

提示順は、こちらで割り当てを決められる

δ\delta の意味を先に決めておきます。実力が互角の2案を出したとき、先に提示されたほうが勝つ確率が σ(δ)\sigma(\delta) です。δ=0.5\delta = 0.5 なら62%、δ=1.0\delta = 1.0 なら73%になります。

真の実力差を D=βAβBD = \beta_A - \beta_B とすると、Aを先に出したときのAの勝率は σ(D+δ)\sigma(D + \delta)、Bを先に出したときは σ(Dδ)\sigma(D - \delta) です。扱い方を3つ比べます。

順序を固定したまま、たとえば新しいほうを常に先に出す運用では、推定値が D+δD + \delta になり、誤差はそのまま δ\delta です。δ=0.5\delta = 0.5 はEloに直すと87点で、真の実力差が104点のときの誤差としては83%にあたります。上位の順位が入れ替わる規模です。

同じ組を両順で1回ずつ評価し、勝率を平均してから推定すると、δ\delta の1次の項は消えます。ただし平均勝率 [σ(D+δ)+σ(Dδ)]/2[\sigma(D+\delta)+\sigma(D-\delta)]/2σ1\sigma^{-1} に通すことになるので、σ\sigma の非線形性から2次の項が残ります。

D^Dδ22(2σ(D)1)\hat{D} - D \approx -\frac{\delta^2}{2}\bigl(2\sigma(D) - 1\bigr)

符号は必ず0へ向かう向きで、実力差が実際より小さく出ます。真の実力差が104 Eloのとき、δ=0.5\delta = 0.56-6 Elo、δ=1.0\delta = 1.022-22 Elo でした。

提示位置を共変量として回帰に入れ、δ\deltaβ\beta を同時に推定すれば、推定は不偏になります。π\pi はモデルの識別子と独立に振れるので、δ\delta が識別されるからです。

左:提示順バイアスの強さδに対する実力差の推定誤差。順序を固定すると誤差はδに比例して増え、両順で平均すると2次で縮み、順序項を回帰に入れると0になる。右:先に提示されたほうが勝つ割合とδの対応。バイアスがなければ実力差の分布によらず0.5になる。

左が3つの誤差です。実務で選ぶのは3つ目の、順序の項を回帰に入れるやり方です。しかも両順で2回ずつ流す必要はありません。比較ごとに順序をコイン投げで決め、回帰に順序の項を1本足せば、判定回数を増やさずに同じことができます。両順で流す価値は推定の側にはなく、同じ組で判定が反転したかどうかという件別の診断が取れる点にあります。

右は、自分のログから δ\delta を読むための対応表です。「先に提示されたほうが勝った割合」を全比較で集計します。提示順バイアスがなければ、実力差の分布がどうであれ、この割合は厳密に0.5になります。0.5からのずれの大きさがそのまま δ\delta に対応し、モデル間の実力差が広いほど0.5側へ寄ります。実力差の標準偏差が1.0程度なら、観測値0.60は δ0.5\delta \approx 0.5 にあたります。

δ\delta 自体の推定は軽い作業です。順序をランダム化していれば、δ\delta の標準誤差は比較1,000件で0.063(11 Elo)以下に収まります。数十Elo規模の歪みを見つけるのに、専用の実験を組む必要はありません。

長さで調整すると真の実力差も一緒に引かれる

長さの扱いは、提示順ほど簡単にはいきません。順序はこちらが割り当てますが、長さを決めるのはモデルだからです。

モデル mm の平均スコアを次のように置きます。

yˉm=βm+γμm\bar y_m = \beta_m + \gamma\,\mu_m

μm\mu_m はそのモデルの平均的な見た目の作り込み、γ\gamma は審判が中身と無関係にそこへ与える加点です。そして、良いモデルほど丁寧に長く書くという関係があるとします。μm=ρβm+νm\mu_m = \rho\beta_m + \nu_m と書き、μ\mu のばらつきのうち真の品質で説明できる割合を R2R^2 とします。加点の強さは真の実力の広がりで割って g=γσμ/σβg = \gamma\,\sigma_\mu/\sigma_\beta と無次元にしておきます。

手元にあるのは yˉm\bar y_mμm\mu_m だけなので、モデル間で yˉ\bar yμ\mu に回帰して係数を引く、というのが素朴な調整です。ところがこの回帰の係数は γ\gamma より大きく、γ+ρσβ2/σμ2\gamma + \rho\sigma_\beta^2/\sigma_\mu^2 になります。品質が長さを押し上げているぶん、長さの効果が過大に出るのです。この係数で調整すると、見た目の加点だけでなく、品質に由来する長さの差まで一緒に引いてしまいます。過剰調整(over-adjustment)と呼ばれる状況です。

調整後のスコアと真の品質の相関を計算すると 1R2\sqrt{1-R^2} になります。加点の強さ gg が式から消えているのが特徴で、審判に長さバイアスがまったくなくても R2R^2 のぶんだけ順位が崩れます。調整しない場合の相関は (1+gR)/(1+gR)2+g2(1R2)(1+gR)/\sqrt{(1+gR)^2 + g^2(1-R^2)} です。2つを比べると、調整が得になる条件が閉じた式で出ます。

g>R12R2g > \frac{R}{1 - 2R^2}

R2=0.1R^2 = 0.1 なら g>0.40g > 0.40R2=0.2R^2 = 0.2 なら g>0.75g > 0.75R2=0.3R^2 = 0.3 なら g>1.37g > 1.37 を満たさない限り、調整したほうが順位は悪くなります。そして R2>0.5R^2 > 0.5、つまり R>1/2R > 1/\sqrt{2} では、gg をどれだけ大きく取っても不等式が成立しません。長さのばらつきの半分以上が本当の品質で決まっている領域では、長さで調整するという操作そのものが順位を崩します。

左:トークン数で説明できる見た目のばらつきの割合λに対して、調整後に残るバイアスの割合。λ=0.8でも45%が残る。右:真の品質で説明できる長さの割合R²と、見た目への加点の強さgに対する、Kendall τの変化。左上の青い領域では調整が効き、右側の赤い領域では調整すると順位が崩れる。

右のヒートマップが、順位相関 Kendall τ\tau の動きです。R2=0.3R^2 = 0.3g=1.0g = 1.0 なら τ\tau は 0.685 から 0.631 へ下がり、同じ R2R^2 でも g=2.0g = 2.0 まで加点が強ければ 0.571 から 0.631 へ上がります。同じ操作でも、審判の長さ好みの強さと、回答の長さがどれだけ品質を映しているかで、向きが変わります。

抜け道はあります。観測データから γ\gamma を取り出せないなら、こちらで長さを動かせばよいのです。同じ回答に、内容を足さないまま冗長な言い回しや見出しだけを加えたものを用意し、審判に付け直させます。スコアの変化を長さの変化で割ったものが γ\gamma そのもので、品質を動かしていないので ρ\rho の混入がありません。提示順をランダム化するのと同じことを、長さに対して人工的に作っていることになります。数十件の回答に水増し版を1つずつ作れば足りるので、費用も小さく収まります。

測っていない書式の効果は残る

γ\gamma を正しく測れたとしても、もう一つ漏れがあります。調整に使えるのは実際に測った量、たとえばトークン数だけですが、審判が反応しているのは見出しの有無や箇条書きの整い方まで含んだ見た目の全体です。トークン数で説明できる見た目のばらつきの割合を λ\lambda とすると、調整後に残るバイアスは元の 1λ\sqrt{1-\lambda} 倍になります。分散の割合が λ\lambda でも、スコアに乗るのは標準偏差なので平方根が付きます。

λ\lambda調整後に残る割合
0.571%
0.845%
0.932%
0.9910%

図の左がこの曲線です。トークン数が見た目の8割を説明していても、バイアスは半分近く残ります。9割を減らしたければ λ=0.99\lambda = 0.99 が要ります。長さの調整を「対処済み」として扱うと、この残りが報告から消えます。

審判が1系統だと、自己選好はスコアと区別できない

3つ目は、審判が自分と同じ系列のモデルの回答に高い点を付ける傾向、自己選好(self-preference)です。

審判が1系統しかない場合を考えます。この審判が身内とみなすモデルを mm^\ast とすると、sjms_{jm} の列は「m=mm = m^\ast なら1」という列で、βm\beta_{m^\ast} のダミー列と完全に同じものです。βm\beta_{m^\ast}tt だけ上げて ϕ\phitt だけ下げれば、すべての予測値が1つ残らず一致します。実際にBradley-Terryで対数尤度を計算すると、βm+ϕ\beta_{m^\ast} + \phi を保つ方向には小数点以下すべての桁まで同じ値が並びました。mm^\ast が本当に優れているのか、審判が身内をひいきしているのかを分ける情報が、データのどこにも入っていません。

判定件数を10倍にしても、審判のプロンプトに「公平に評価してください」と書き足しても、この状況は変わりません。指示文が動かせるのは ϕ\phi の大きさまでで、ϕ\phiβm\beta_{m^\ast} が分離できないという構造には届かないからです。

系列の違う審判を足すと何が決まるか

sjms_{jm} を動かすには、系列の違う審判を足すしかありません。審判ごとの採点の甘さ αj\alpha_j も入れて

yjm=αj+βm+ϕsjm+εjmy_{jm} = \alpha_j + \beta_m + \phi\,s_{jm} + \varepsilon_{jm}

とします。MM 個のモデルを KK 系統の審判が全員採点し、審判はそれぞれ別のモデルを身内に持つ、という設計です。すると同じモデルを身内の審判と他系列の審判の両方が採点することになり、その差から ϕ\phi が取り出せます。計画行列を組んで最小二乗の分散を出すと、簡単な形になります。

Var(ϕ^)=σ2n(K1)\mathrm{Var}(\hat\phi) = \frac{\sigma^2}{n\,(K-1)}

σ\sigma は1判定あたりの標準偏差、nn は審判とモデルの組み合わせ1つあたりの判定件数です。K=1K = 1 で分母が0になり、識別できないことが式の形に現れています。5段階のルーブリックで1判定の標準偏差が0.8、1組あたり200件という条件で計算すると、次のようになります。

審判の系統数 KKϕ^\hat\phi の標準誤差
20.057点
30.040点
40.033点
60.025点

0.15点の自己選好なら、K=2K = 2 でも t=2.7t = 2.7 で検出できます。系統を2つにするところで大半が片づき、そこから先は K1\sqrt{K-1} でしか縮みません。信用リスクのモデル検証でも、検証者を3人4人と増やすより、まず開発者から独立した検証者を1人立てるところに効果が集中します。増やすほど得られるものが減っていく形は同じです。

分母の nnK1K-1 は同じ重みで効くので、精度を上げる手が2つあることになります。判定の総数は KMnKMn なので、nn を2倍にすると KMnKMn 件の追加判定が要るのに対し、KK2K12K-1 に増やして同じだけ分散を下げるなら (K1)Mn(K-1)Mn 件で済みます。使える系列が手元にあるなら、1組あたりの件数を積むより審判の顔ぶれを増やすほうが安く上がります。nn 自体の決め方は、評価データセットの件数と同じ逆算です。

これで消えるのは、審判ごとに違う部分だけです。すべての審判が共通して特定の書き方を好む成分があるとすると、それはモデルごとの定数なので、KK をいくつにしても βm\beta_m と区別できません。学習データの重なりが大きい審判ばかり集めた場合に起きます。共通成分を切るには、審判の系統を足す方向ではなく、種類の違う証拠、たとえば人手の評価やタスクの実行結果を突き合わせる必要があります。

補正できるバイアスと、設計で避けるしかないバイアス

バイアス補正の手立て追加コスト補正後に残るもの
提示順順序をランダム化し、順序の項を回帰に入れるほぼ0標本誤差のみ
回答の長さ・書式水増し実験で γ\gamma を測り、測れた量で調整する数十件の追加判定測っていない見た目の 1λ\sqrt{1-\lambda}
自己選好系列の違う審判を2系統以上そろえる判定コストが KK全審判に共通する好みは残る

コストと効果の順序ははっきりしています。提示順の対策はほぼ無料で誤差がゼロになるので、迷う余地がありません。長さの対策は、そもそも調整すべきかどうかの判断に R2R^2 の見積もりが要るうえ、調整しても半分程度は残ります。自己選好の対策は判定コストが KK 倍になり、それでも共通成分は取れません。

評価の設計を頼まれたら、この順で手を付けます。提示順のランダム化と順序の項は初日に入れます。長さについては、まず水増し実験で γ\gamma を測り、gg が小さければ調整せずに「長さの加点はこの程度だった」と注記して出します。自己選好は、審判と被評価が同系列になる組み合わせを評価対象から外すのが先で、外せない事情があるときだけ他系列の審判を1つ足して差を見ます。順位表を1本にまとめて出すより、どの歪みをどれだけ残したまま出しているかを併記するほうが、受け取る側の判断は速くなります。

まとめ

同じ「審判のバイアス」でも、統計で消せるかどうかは、その印がモデルの識別子と独立に動くかで決まります。提示順はこちらが割り当てを決められるので、順序をランダム化して回帰に項を1本足すだけで誤差が消えます。順序を固定したままだと実力差の推定が8割方も膨らむので、ここを直さないまま他の対策へ進む理由はありません。回答の長さは自分で割り当てられないぶん厄介で、観測データだけで調整すると品質に由来する長さの差まで引いてしまい、長さのばらつきの半分以上が品質で決まっている領域では調整するほど順位が崩れます。自己選好は、審判が1系統のうちは対数尤度が完全に平坦で、解が決まりません。LLM-as-a-Judgeが使えないという話ではなく、3つのうち2つは手当てができて、残る1つは審判の構成で避けるという話です。

いまLLM-as-a-Judgeを回しているなら、最初にログから「先に提示されたほうが勝った割合」を数えてください。0.5から離れていればその差が提示順バイアスで、順序をランダム化していなければ、いま出ている順位表はそのぶんずれています。次に、手元の回答を30件ほど選んで内容を変えずに水増しした版を作り、スコアがどれだけ動くかを測ります。ここで出る係数が小さければ、長さの調整はしないほうが順位は正確です。自己選好については、審判と同系列のモデルが評価対象に入っているかを確認し、入っているなら他系列の審判を1つ足して同じ組を採点させます。差が出なければそのまま進められますし、差が出れば、その値がこれまで順位表に乗っていた下駄です。

関連記事

← 技術ブログ一覧へ