BlogLLM-as-Judge: Can You Trust the Judge Grading Your AI?Eval · Output Quality

LLM-as-Judge: Can You Trust the Judge Grading Your AI?

BC
Ben Carter · April 2026 · 10 min read

TL;DR

You can’t hand-grade a million model outputs, so you hire another model to do it. But the judge has biases you didn’t sign up for: it prefers the longer answer, favors whichever response it sees first, and quietly scores its own family of models higher. In pairwise code judging, simply swapping the order of two responses can shift accuracy by more than 10%. Self-preference bias is real and measurable. And a judge with 0.80+ correlation to humans can still disagree with them on the cases that matter. If you ship releases on an unvalidated judge, you’re not measuring quality, you’re laundering a guess.

The judge is a model, and models have opinions

LLM-as-judge solved a genuine problem. Human evaluation is the gold standard, but it is slow, expensive, and impossible to run on every pull request. So teams replaced the human panel with a strong model, GPT-4-class or better, prompted to score each output for correctness, helpfulness, or safety. It scales, it’s cheap, and it returns a clean number. The number is the problem. It looks like a measurement, but it is itself a model output, and it inherits every pathology a model output can have.

The research community has spent the last two years cataloging exactly which pathologies. The three that bite production teams hardest are position bias, verbosity bias, and self-preference bias. Each one is a systematic, reproducible distortion, not random noise you can average away by running more samples. If your judge is biased, running it 10,000 times gives you a very precise wrong answer.

A judge is a measurement instrument, and uncalibrated instruments lie consistently. The danger isn’t that an LLM judge is noisy, you could handle noise. The danger is that it’s biased: it errs in the same direction every time, so the error survives aggregation and looks like signal.

The three biases that corrupt your scores

Position bias: order shouldn’t matter, but it does

In pairwise comparison, “which of these two answers is better?”, the order in which you present the candidates changes the verdict. The judge has a primacy or recency preference that has nothing to do with the content. Per the survey literature, in pairwise code judging, simply swapping the presentation order of two responses can produce accuracy shifts exceeding 10%, with the magnitude modulated by model family, context window, and how close the two candidates are in quality (EmergentMind, LLM-as-a-Judge Evaluation survey). If you only ever evaluate candidate A before candidate B, you have baked a constant thumb on the scale into every release decision.

Verbosity bias: longer reads as better

LLM judges systematically prefer verbose, formal, fluent output regardless of substantive quality, an artifact of the pretraining and RLHF objectives that rewarded comprehensive-sounding answers. This is the bias that most directly games your roadmap. A prompt change that makes answers longer will score higher on an unguarded judge even when it added nothing true, and your team will “ship the improvement” that is actually just inflation. The mitigation is a length penalty or a rubric that scores conciseness explicitly, but you only know to add it if you measured the bias first.

Self-preference bias: the judge likes its own writing

The most insidious one. An LLM-as-judge assigns higher scores to outputs that resemble its own generations, outputs it finds more “familiar, ” as measured by lower perplexity. The work in Self-Preference Bias in LLM-as-a-Judge quantified this and tied the effect directly to perplexity: judges favor text they would have been likely to produce themselves. The operational consequence is severe. If you use GPT-4 to judge a bake-off between GPT-4 and a competitor, you have a conflict of interest encoded in the evaluator. The judge is rooting for the home team, and it isn’t telling you.

And the biases don’t stop at three. A 2025 analysis, “The Silent Judge: Unacknowledged Shortcut Bias in LLM-as-a-Judge, ” documents shortcut behaviors where the judge keys on surface features, formatting, the presence of citations, confident phrasing, rather than the substance it was asked to assess.

“High correlation with humans” is not the same as “trustworthy”

Teams that do validate their judge usually report a single number: Spearman or Pearson correlation against human labels. The original G-Eval work is the canonical reference point, it reached a Spearman correlation of 0.514 with human judgments on summarization, rising to 0.66 when chain-of-thought reasoning was added to the judge prompt. That is genuinely good for an automated metric. It is also nowhere near “just trust it.”

Correlation hides the failures that matter. A judge can correlate at 0.66 globally and still systematically misrank the hard, high-stakes cases, the adversarial prompt, the subtly-wrong medical answer, the borderline-safe completion, because those are rare in the distribution and contribute little to the aggregate statistic. A 2025 deep-dive on judge reliability makes the point sharply: of judges tested, many achieved very strong correlation (r ≥ 0.80), but high correlation alone did not guarantee human-like judgment, and a stricter Cohen’s Kappa agreement analysis, which corrects for agreement-by-chance, revealed how few judges actually performed at human level (Judge’s Verdict: A Comprehensive Analysis of LLM Judge Capability).

Report Cohen’s Kappa, not just correlation. Correlation rewards a judge for getting the easy bulk-distribution cases right. Chance-corrected agreement on the hard cases is what tells you whether you can trust a verdict on the one output that ends up in a screenshot.

How to validate the validator

The discipline is simple to state: you do not deploy a judge you have not tested against ground truth, and you re-test it whenever the judged model, the judge model, or the rubric changes. Concretely, that means a labeled validation set, an agreement metric that survives chance correction, and explicit bias probes.

# Validate an LLM judge before you trust its verdicts
def validate_judge(judge, human_labeled_set):
    judge_scores, human_scores = [], []
    for case in human_labeled_set:
        judge_scores.append(judge.score(case.input, case.output))
        human_scores.append(case.human_score)

    spearman = spearman_corr(judge_scores, human_scores)
    # Chance-corrected agreement on a binned pass/fail decision
    kappa    = cohens_kappa(bin(judge_scores), bin(human_scores))

    assert spearman > 0.6,  f"judge correlation too low: {spearman:.2f}"
    assert kappa    > 0.6,  f"judge agreement near chance: {kappa:.2f}"
    return {'spearman': spearman, 'kappa': kappa}

That establishes the judge is broadly aligned. Next, prove it isn’t exploitable on the three known biases:

# Probe for the systematic biases that survive aggregation
def probe_biases(judge, pairs):
    # Position: score A-vs-B, then B-vs-A. A fair judge agrees with itself.
    flips = 0
    for a, b in pairs:
        v1 = judge.prefer(a, b)
        v2 = judge.prefer(b, a)          # swapped order
        if v1 != v2: flips += 1          # verdict changed when only order did
    position_flip_rate = flips / len(pairs)

    # Verbosity: pad the WORSE answer with filler; a fair judge still rejects it.
    verbosity_fooled = mean(
        judge.prefer(pad(worse), better) == 'worse' for worse, better in pairs
    )

    assert position_flip_rate < 0.05, f"position bias: {position_flip_rate:.1%} flips"
    assert verbosity_fooled   < 0.05, f"verbosity bias: {verbosity_fooled:.1%} fooled"
    return {'position_flip_rate': position_flip_rate,
            'verbosity_fooled':   verbosity_fooled}

Engineering a judge you can defend

Beyond validation, the judge design itself reduces bias. The mitigations that the survey literature converges on are concrete and worth wiring in by default:

  • Shuffle and average for position. Always score both orderings (A-vs-B and B-vs-A) and only count a verdict that holds in both. The flip-rate becomes a free reliability signal.
  • Penalize length explicitly or instruct the judge to ignore length, then verify the instruction worked with the padding probe above. Don’t assume it complied.
  • Use a different model family as judge than the one you’re grading, or judge against a fixed reference answer rather than head-to-head, to neutralize self-preference. Never let a model be the sole judge of its own bake-off.
  • Decompose the rubric into atomic criteria. “Is this answer good?” conflates correctness, tone, completeness, and safety into one gameable number. Score each on its own, with a required natural-language justification per criterion, this both improves alignment and gives you an audit trail.
  • Anchor with a calibration set. Keep a small, human-labeled, drift-monitored set and re-run it on a schedule. A judge that was valid in January can decay when the upstream judge model is silently updated.
The judge is part of your test infrastructure, so it needs its own tests. You wouldn’t trust an assertion library you’d never verified. An LLM judge is exactly that, an assertion library, and it’s the most powerful one in your eval stack and the easiest to deceive yourself with.

The bottom line

LLM-as-judge is the only way to evaluate model output at the scale modern AI products demand, and it is good enough to build on, once you treat it as an instrument that must be calibrated. Position, verbosity, and self-preference biases are systematic, reproducible, and large enough to flip release decisions. Correlation with humans is necessary but not sufficient; report chance-corrected agreement and probe the biases directly. Validate the judge against human labels before you ship it, re-validate when anything upstream changes, and design it to be bias-resistant from the start. Do that, and the judge gives you a number you can defend. Skip it, and you’ve automated the act of fooling yourself.

Ship AI on Evidence, Not Vibes

alt.qa Eval turns "seems fine" into measurable pass/fail, continuous evaluation, regression gates, and groundedness scoring for your AI outputs.

Try alt.qa Free →
Ben Carter Ben Carter writes about AI quality engineering at alt.qa, built by TheWorkCompany.