truescore / methods

A judge leaderboard, with the error bars it is printed without

The top two judges on RewardBench are 0.37 points apart and not distinguishable on 2985 paired examples. They also disagree on 10 of 23 subsets, in both directions, by up to 22 points.

Both facts come from the same data. Reproduce them with:

pip install truescore
python run.py

Per-example verdicts come from allenai/reward-bench-results, which publishes each judge's decision on all 2985 preference pairs. Ground truth is RewardBench's human-verified answer for each pair. No model is called.

The leaderboard

Nine judges of the 2024 generation, scored on the same 2985 examples.

judge accuracy 95% interval
1 Skywork-Critic-Llama-3.1-8B 0.8898 [0.8781, 0.9005]
2 gpt-4o-2024-08-06 0.8861 [0.8742, 0.8970]
3 gpt-4o-2024-05-13 0.8670 [0.8543, 0.8787]
4 Meta-Llama-3.1-405B-Instruct-Turbo 0.8613 [0.8484, 0.8732]
5 Meta-Llama-3.1-70B-Instruct 0.8586 [0.8457, 0.8707]
6 gemini-1.5-flash-001 0.8382 [0.8245, 0.8510]
7 gpt-4o-mini-2024-07-18 0.8271 [0.8132, 0.8403]
8 Hermes-3-Llama-3.1-70B 0.8064 [0.7918, 0.8201]
9 prometheus-8x7b-v2.0 0.7680 [0.7524, 0.7826]

Every judge sees the same examples, so comparisons are paired and far more powerful than those intervals suggest. Comparing all 36 pairs with a paired bootstrap and a Holm correction:

                                     1   2   3   4   5   6   7   8   9
1. Skywork-Critic-Llama-3.1-8B       .   ~   x   x   x   x   x   x   x
2. gpt-4o-2024-08-06                 ~   .   x   x   x   x   x   x   x
3. gpt-4o-2024-05-13                 x   x   .   ~   ~   x   x   x   x
4. Meta-Llama-3.1-405B-Instruct      x   x   ~   .   ~   x   x   x   x
5. Meta-Llama-3.1-70B-Instruct       x   x   ~   ~   .   x   x   x   x
6. gemini-1.5-flash-001              x   x   x   x   x   .   ~   x   x
7. gpt-4o-mini-2024-07-18            x   x   x   x   x   ~   .   x   x
8. Hermes-3-Llama-3.1-70B            x   x   x   x   x   x   x   .   x
9. prometheus-8x7b-v2.0              x   x   x   x   x   x   x   x   .

x = distinguishable    ~ = not distinguishable

Four of the eight adjacent gaps do not survive. The nine ranks are really four tiers, and inside a tier the ordering is noise:

A tied number is not a tie

Ranks 1 and 2 have overall accuracies of 0.8898 and 0.8861. Broken out by subset, with a Holm correction across all 23:

subset n Skywork-Critic-8B gpt-4o-2024-08-06 gap p adj
llmbar-adver-neighbor 134 0.806 0.582 +0.224 0.000
math-prm 447 0.915 0.749 +0.166 0.000
llmbar-adver-GPTInst 92 0.924 0.761 +0.163 0.005
refusals-dangerous 100 0.960 0.850 +0.110 0.000
hep-js 164 0.872 0.994 -0.122 0.000
hep-go 164 0.872 0.988 -0.116 0.000
hep-rust 164 0.872 0.988 -0.116 0.000
hep-java 164 0.884 0.982 -0.098 0.000
hep-python 164 0.896 0.982 -0.085 0.017
hep-cpp 164 0.890 0.963 -0.073 0.039

Ten of 23 subsets differ after correction, and they differ in both directions. The pattern is not subtle. gpt-4o-2024-08-06 wins all six code subsets by 7 to 12 points. Skywork-Critic wins adversarial preference, process-supervised maths and dangerous-refusal detection by 11 to 22 points. On llmbar-adver-neighbor, which pairs a good response with a plausible near-miss, gpt-4o-2024-08-06 scores 0.582 against a chance rate of 0.5.

Two judges with the same headline number, and the right choice between them depends entirely on what you are judging. That is not visible in the number the table sorts by.

Why the pairing matters

The interval on rank 1 is [0.8781, 0.9005] and on rank 2 is [0.8742, 0.8970]. They overlap heavily, and a reader might conclude nothing here is distinguishable. That inference is wrong in the other direction: overlapping marginal intervals do not imply a non-significant difference when the measurements are paired. Ranks 2 and 3 also overlap ([0.8742, 0.8970] against [0.8543, 0.8787]) and are distinguishable, because the same 2985 examples were scored by both and the paired test uses that.

Every comparison here is paired for the same reason, which is what makes a 1.9-point gap detectable while a 0.4-point gap is not.

What this does not show

A note on the arithmetic

Running this study found a bug in truescore. On mt-bench-easy both judges score 1.000, so every paired difference is exactly zero and every bootstrap resample is exactly zero. paired_bootstrap was measuring one tail as the complement of the other, which put all of that mass in a single tail and returned p = 0.000 beside a gap of +0.000. It then survived the Holm correction and was reported as a real difference. Both tails now count the mass sitting at zero, so perfect agreement returns p = 1. Fixed in 0.7.4, with tests/test_compare.py::test_identical_systems_are_not_a_significant_difference.

Worth stating plainly rather than quietly correcting: the bug produced a wrong row in this table, and the reason it was caught is that a subset where two judges agree perfectly is obvious to a reader in a way it is not to a test suite.