Your LLM judge is biased, and it's grading your evals

You replaced human review with an LLM judge to scale your evals. It prefers its own answers, the longer answer, and whichever one came first, none of which means correct.

B

Balagei G Nagarajan

4 MIN READ


A glowing balance scale held by an AI figure with a subtle thumb pressing one pan down, tilting the judgment regardless of what sits in the pans
Every pairwise comparison: run it in both orders, count only agreement, that cancels position bias.
— from “Your LLM judge is biased, and it's grading your evals”

Key facts.

Why is an LLM judge biased?

Because it scores the same way it writes, on surface features it learned to associate with quality. It recognizes its own style and rates it higher, a self-preference bias that's a problem when the model judging is also the model being improved. It reads length and polish as competence, so a verbose, well-formatted answer outscores a terse correct one. And it's anchored by order: present the same two answers in a different sequence and the preference can flip. None of these track whether the answer is right. They track what the model finds familiar and fluent, which is exactly the thing a confident wrong answer has in abundance.

Why does this quietly corrupt your evals?

Because you're now optimizing toward the judge's biases instead of toward correctness. If your eval rewards length, your system learns to pad. If it rewards the judge's own style, you select for outputs that flatter the evaluator. If position sways the score, your A/B results are partly noise from ordering. The danger is the same as eval-gaming: once a measure becomes the target, the system climbs the measure, and a biased judge points the climb in the wrong direction. You see a rising score and ship, while real quality drifts sideways, because the judge was grading the wrong things all along.

A bar chart of LLM-judge biases, self-preference, position, verbosity, and style, each shown as a sizable deviation from the correct-answer baseline

Using a judge without being fooled

The judge is an instrument you calibrate, not an oracle. Every pairwise comparison: run it in both orders, count only agreement, that cancels position bias. Cap length or use length-adjusted win rates so verbosity stops being a free point. Never let a model judge its own outputs in a training loop, use a different, ideally stronger model. Anchor against a human-labeled set so you know the agreement rate, and trust scores only as far as that agreement goes. Keep humans on release decisions.

Mitigations at a glance

BiasMitigation
Self-preferenceUse a different model as judge than the one being evaluated
PositionSwap order and require agreement across both presentations
VerbosityCap length or use length-controlled win rates
Style over substanceAdd explicit correctness rubrics; check against ground truth
Unknown judge errorCalibrate against a human-labeled set; report agreement rate

The judge favors its own style and length; a more capable judge carries the bias, rework hides. (arXiv:2410.21819)

The pattern is that an LLM judge grades on the same surface features it writes with, so it rewards its own style, length, and ordering rather than truth, and your evals inherit that tilt. Swap positions, control for length, judge with a different model, and anchor on human labels. None of that's a bigger model, which is an even more confident biased judge. it's a verification layer that grades the work instead of the wrapper, which is what VibeModel builds as the Pattern Intelligence Layer.

Frequently asked questions

Can I trust an LLM judge at all?
As a calibrated, noisy signal, yes. Measure its agreement with human labels on your task, debias for position and length, and use it to triage at scale, but keep humans on the decisions that ship. don't treat its score as ground truth.

What's the worst mistake?
Letting a model judge its own outputs inside the loop that improves it. Self-preference bias means it rewards its own style, so you optimize toward the judge's taste, not toward correctness. Always judge with a different model.

How do I cancel position bias cheaply?
Run each comparison twice, answers swapped. Count a win only when the judge picks the same answer both times. Order disagreements expose the position bias. Exclude them.


Share this post

Join the discussion

Have a take, a war story, or a question? Sign in with GitHub to comment and react. Comments are powered by GitHub Discussions, ad-free and yours to moderate.

Continue Reading

Find where your agent breaks, before you build it

Faultmap maps where your agent will fail from the goal and your data, then hands you the first test suite it has to pass.