LLM-as-a-Judge 偏差
Day 16 我们用温度扫描量化了「自由采样会破坏严格格式」;今天把镜头从「被评的输出」转向「评分的判官」。
阶段: B2 · attention/decoder/KV + judge 校准(Day 11-20) 标签: #llm-as-judge #eval-bias #cohens-kappa #rubric
今日导引(由浅入深)
Day 16 我们用温度扫描量化了「自由采样会破坏严格格式」;今天把镜头从「被评的输出」转向「评分的判官」。
LLM-as-a-Judge 是 B 阶段评测的核心工具,但它有系统性偏差——不校准就信它的分数,等于在沙地上建评测体系。
这是 B1→B18 能力曲线里「会跑 eval → 会怀疑并校准 eval」的关键一跃。回顾位置:B1 我们让 eval harness 能跑、能算成本;B2 前半段(Day 11-15)打 transformer 内核地基,Day 16 起转入「评测可信度」专题。今天是 judge 校准三连(Day 17 备 rubric → Day 18 标 gold → Day 19 算 κ)的开篇:先把判官的三类偏差讲透,再准备好用 Cohen's κ 对齐人工金标准所需的标注资产。
今日最小可判定产出:rubric-b2.md(明确判据)+ 50 条待标 traces 清单。
1. 机理精读
用强 LLM 给另一个模型的输出打分(LLM-as-a-Judge)能极大降低评测成本,但判官不是中立尺子,它带可复现的系统性偏差。三类最关键:
position bias(位置偏差):在 A/B 比较里,judge 倾向偏好先出现的那个答案,单纯换位置就能翻转判决。缓解手段是两个顺序都跑一遍取平均、或随机化位置后再聚合。这条偏差直接威胁所有「成对比较」型评测——B 阶段后面要做的模型 A/B 对比若不处理它,结论可能纯粹是顺序伪影。
verbosity bias(冗长偏差):judge 倾向给更长、解释更多的答案更高分,即便信息密度更低甚至更差。对「简洁正确」该被奖励的任务(如 AML 一句话定性)尤其有害——它会系统性地把啰嗦答案捧上去。
self-preference(自偏好):judge 倾向偏好与自己同源/同家族模型生成的输出,因为风格、措辞、结构更「眼熟」。用同一家模型既当被评者又当判官时风险最大,结论会被悄悄做高。
正因为这些偏差是系统性(非随机噪声)的,单看 judge 给的准确率毫无说服力——随机噪声会随样本量平均掉,系统偏差不会。所以必须拿 judge 跟人工金标准对齐,量化「judge 与人究竟有多吻合,且这吻合超出随机多少」。
这就是 Cohen's κ 的用武之地:κ<0.4 一致性差,0.6-0.8 算好,>0.8 很好。κ 没到 0.6 的 judge,不能当评测准绳。κ 的妙处在于它把「碰运气的一致」剔除,只留「真本事的一致」,比裸准确率诚实得多。
设计权衡:判官越强越贵,但偏差不会因为模型更强就自动消失(self-preference 反而可能更顽固,因为强模型风格更鲜明)。所以评测纪律是「先校准、后信任」——本日先备好校准所需的人工 rubric 与待标清单,Day 18 手标 gold,Day 19 才真正算 judge-human κ。本日论点直接承接 Anthropic《Demystifying evals》(2026-01):judge 偏差是活跃议题,无人工校准的 judge 分数不可信。
与相邻概念的边界:Day 16 关心「输出格式合法性」(机器可判定,无需人);今天关心「输出质量好坏」(需人来定义判据,judge 来近似)。后者无金标准就无从校准,所以今天的产出是标注资产而非数字——这是个刻意的取舍:先建参照系,再量化工具。
2. 推导 / 手算 / 代码走读
本日是资产构建日,核心代码 src/agent/eval/cohensKappa.ts 已在仓库就绪并测试绿,今天只对接其输入格式、不重写。走读其公开接口(真实符号,已 Read 确认):
cohensKappa(a: Label[], b: Label[]): KappaPoint—— 两个等长评分者标签数组(Label = string),返回点估计{ kappa, po, pe },其中po为观测一致率、pe为随机期望一致率。cohensKappaWithCI(a, b, opts)—— 在点估计基础上做 percentile bootstrap,返回KappaResult(含ci95、bootstrapSamples,默认bootstrap = 2000,RNG 可注入便于确定性测试)。percentile(sorted, p)—— 对已升序数组做线性插值取分位,供 CI 计算。- 退化边界处理:当两评分者都只用了同一个类别(
pe == 1)时,κ 约定为「完全一致取 1,否则取 0」(见源码注释,避免除零)。
三类偏差与缓解手段速查(标注/judge 设计时对照):
偏差 | 表现 | 缓解
----------------+-------------------------+--------------------------
position bias | 偏好先出现的答案 | 双向跑取平均 / 随机化位置
verbosity bias | 偏好更长答案 | rubric 显式奖励简洁正确
self-preference | 偏好同源模型输出 | judge 与被评者异源 + κ 校准
也就是说,本日只需把 traces 标注成与上述 Label[] 兼容的格式(pass/fail/borderline 映射成字符串标签),Day 19 即可直接喂入 cohensKappaWithCI,无需任何 κ 计算代码改动。
手算热身(理解 κ 为何比准确率诚实):
设 50 条里 judge 与人一致 40 条 → po = 0.80。但若两者都把 90% 标成 pass,则随机一致率 pe = 0.9×0.9 + 0.1×0.1 = 0.82。代入 κ 公式:
κ = (po − pe) / (1 − pe) = (0.80 − 0.82) / (1 − 0.82) = −0.02 / 0.18 ≈ −0.11
准确率 80% 看着不错,κ 却是负的——意味着 judge 与人的一致甚至不如随机!这正是「高基线/类不平衡下准确率虚高」的体现,也是为什么本块坚持报 κ 而非裸准确率。(此为说明性手算,非本块实测数字。)
rubric 判据要写到「可复现」的颗粒度。一条好 rubric 的最小骨架:
- pass 的充要条件:例如 AML 定性任务——正确识别结构化拆分意图、给出可核查的依据、未越权下结论。
- fail 的触发条件:例如漏判明显红旗、编造不存在的证据、给出违反 HITL 纪律的自动决策。
- borderline 的归类规则:例如证据不足但模型如实声明不确定——既非明确 pass 也非明确 fail,单列。
- 每条判据配一个正例 + 一个反例,让不同时间标注同一条 trace 能得到一致结论。
判据越具体,position/verbosity/self-preference 这些 judge 偏差才越无处藏身——因为人工 gold 是基于明确判据而非「感觉」产出的,judge 偏离判据时 κ 会立刻暴露。
3. 今日实战
- 从
agent-evals/抽 ≥50 条 traces。 - 写人工标注 rubric,给出 pass / fail / borderline 的明确判据(不模糊、可复现),落
agent-evals/rubric-b2.md。 - 把 50 条待标 traces 整理成清单,落
agent-evals/traces-b2.json。 - 确认标注结构与
src/agent/eval/cohensKappa.ts的Label[]输入兼容(pass/fail/borderline 映射成字符串标签),为 Day 18 手标、Day 19 算 κ 铺路。 - 不重写
cohensKappa.ts——它含 bootstrap CI 且已测试绿,直接接入。
4. 今日实测 / 产出
- 状态:待建(标注资产)。
- 产出:
agent-evals/rubric-b2.md+ 50 条待标 traces 清单(agent-evals/traces-b2.json)。 - 注:
src/agent/eval/cohensKappa.ts(含 bootstrap CI)在仓库已测试绿,可直接接入,无需重写。 - 本日不产生任何 κ 数值(κ 在 Day 19 跑出,需 key)。
本日产出的 traces-b2.json 与 rubric-b2.md 是后两天的依赖:traces 决定了标注样本,rubric 决定了标注标准。两者一旦冻结,Day 18 标注、Day 19 校准就在固定地基上推进——这正是「先建参照系、再量化工具」纪律的工程落点。
5. 常见误区 / 陷阱
- 无人工校准就直接信 judge 分数——κ 未达 0.6 的 judge 不可作准绳。
- 用同一家模型既当被评者又当判官——self-preference 偏差最大,结论被污染。
- rubric 判据写得模糊(「答得好就 pass」)——导致标注不可复现,κ 失去意义。
- 强行把 borderline 二分进 pass/fail——丢失信息且引入标注者主观噪声,应单列。
- 只跑一个顺序就做 A/B judge——position bias 未消,结论可能是顺序伪影,须双向跑取平均。
6. 学习资源(每条带 YYYY-MM)
- Anthropic, Demystifying Evals (2026-01) — 本日权威来源:judge 偏差与 κ 校准方法论,当前最 current。
- Zheng et al., Judging LLM-as-a-Judge with MT-Bench and Chatbot Arena(arXiv:2306.05685, 2023-06)— position/verbosity/self-preference 偏差的奠基性量化研究。
- Cohen, J., A Coefficient of Agreement for Nominal Scales (1960) — κ 统计量原始定义(经典打底)。
- 仓库代码
src/agent/eval/cohensKappa.ts(含 bootstrap CI,已测试绿)— 本块校准的实现底座。
SOTA检查 (2026-06 更新)
- 当前主流方案:Anthropic《Demystifying evals》(2026-01) 是当前最权威的 eval 方法论,仍 current;judge 偏差仍是活跃议题。
- 是否仍 SOTA:用 κ 对齐人工金标准来验证 judge 可用性,仍是 2026 评测标准纪律。
- 过时黑名单:避免无人工校准就信 judge 分数;避免只报 judge 准确率不报 κ;避免用同源模型自评自判。
- 下次复查点:2026-Q3 复核多标注者一致性指标(Krippendorff's α)是否进一步成为评审硬要求,以及 Anthropic/各家 eval 方法论的更新版本。
一句话收束
judge 是评测的放大器:校准对了,它能以 1% 的成本逼近人工判断;校准错了,它会把系统性偏差成倍灌进每一个分数。本日不产出任何 κ 数字,但备好了让 κ 有意义的两块地基——明确的判据与固定的样本。
衔接
- 昨天:Day 16 — JSON-validity sweep(温度 vs 合法率,机器可判定)
- 今天:拆解 LLM judge 的三类系统性偏差,备好 κ 校准所需的 rubric 与待标清单。
- 明天:Day 18 — 人工金标准(gold label 纪律:校准、borderline 归档、冻结防泄漏)