你是一家餐厅的老板,想用一位 AI 试菜员来帮你筛选新菜。这位 AI 试菜员每次都能尝出食材,但问题是:同一天晚上的同一道菜,它第一次打 4 星,第二次却打 2 星;或者它觉得好吃的菜,和店里最有经验的老饕完全相反。这时候你会不会怀疑:这位裁判到底靠不靠谱?在 AI 评测里,这个“靠不靠谱”正是裁判一致性要回答的问题。 所谓“LLM 裁判一致性”,就是观察同一个 LLM 当评委时,它的打分是否稳定,以及和人类专家的评分是否对得上。我们不会只看一两个好评,而是会设计一批样本,让 LLM 裁判重复打分,再用两把“尺子”去量化它的稳定性:一把叫 Cohen Kappa,用来衡量分类标签的一致性;另一把叫 Spearman 系数,用来衡量排序一致性。掌握了这套方法,你就能知道 AI 自动评测的结果到底是可信的“专业点评”,还是随手乱写的“顾客差评”。

岗位关联

学会评价“AI 裁判”本身,是 AI 工程师构建可信评测体系的基石。它能帮你判断模型分数是否可复现、能否替代人工评审,从而在模型迭代和上线决策中少踩坑。

目录
  1. 可视化演示
  2. 裁判一致性定义
  3. 测量指标准备
  4. Cohen Kappa:分类判断的默契度量
  5. Spearman 系数:排序打分的默契度量
  6. 评估实施流程
  7. 实践应用
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示数据库预写式日志机制,写操作先记录日志再修改数据页,保证崩溃恢复的持久性。

本节配有交互动效(进入视口后自动加载,约 3KB)。

WAL 预写式日志 写操作先写入日志缓冲区,再修改数据页 日志刷盘后操作持久化,保证ACID持久性 崩溃后通过重放日志恢复未完成的事务

裁判一致性定义

美食街上有家“码上菜馆”,老板陈哥想用 AI 试菜员“小评”来替代部分人工试菜。第一天,小评给招牌菜打了 4 星;第二天同一道菜,小评却打了 2 星。陈哥立刻意识到:菜没变,变的是裁判的“心情”。这种今天一个说法、明天另一个说法的裁判,再聪明也不敢用。于是,他让老饕老周也来打分,看小评和老周是否“英雄所见略同”。

在 AI 评测中,我们常把大模型当作裁判,这就是 LLM-as-Judge。具体做法是让 LLM 根据给定的评分标准,为不同模型生成的回答打分。但打分之前,我们必须先确认这位裁判是否一致。裁判一致性包含两个层面:一是重测稳定性,也就是同一个 LLM 裁判对同一批样本重复评分,结果是否稳定;二是与人类对齐,也就是它的评分和老周这样的专家是否吻合。前者回答“自己是否精神稳定”,后者回答“品味是否正常”。

为什么一致性和可信度如此相关?因为评测结论要被用来做决策,比如要不要上线一个模型。如果 LLM 裁判对同样的回答时好时坏,那么今天模型排名第一,明天可能掉到第五,评测就没有可重复性。反过来,如果 LLM 裁判和人类专家高度一致,我们就可以更放心地用低成本、高速度的机器裁判去覆盖大规模样本,把人类专家留给少量疑难样本。

需要注意的是,一致性不等于正确性。小评可能很稳定地比老周严格一星,这时它自我一致但并不可靠。因此,裁判一致性只是评测可信度的必要不充分条件——它保证分数可以被复现,至于分数是否反映真实质量,还需要与人类基准比较。陈哥最终决定:先观察小评的“手稳不稳”,再决定要不要让它掌勺。

测量指标准备

陈哥想正式测试小评,却发现第一步不是直接算数,而是想清楚要测什么。如果问“这道菜合不合格”,答案是“合格/不合格”,这是分类判断;如果问“给这十道菜按好吃程度排名”,答案是名次,这是排序判断。两种问题需要不同的尺子。就像量身高用卷尺,量体重用秤,用错工具只会算出没意义的结果。

在 LLM 评测中,首先要判断裁判输出的是什么形态的数据。第一种是类别标签,例如“通过/不通过”“A/B/C/D”;第二种是等级评分,例如 1 到 5 星;第三种是连续分数,例如 0 到 100 分。类别标签主要看 Cohen Kappa,因为它能扣除随机猜中的一致性;等级或分数排序则适合用 Spearman 系数,因为它只关心顺序是否一致。

样本设计也决定了指标的可信度。如果陈哥只拿十道几乎都好吃的菜去测,小评和老周当然很容易一致,但这个测试没有区分度。评测时应该构造难度分布合理的样本,既要有好的回答,也要有中等和差的回答,最好还要包含容易引起分歧的边界样例。另外,评分标准要固定:同样是 4 星,是“有亮点但有小毛病”,还是“整体不错但不惊艳”?只有先把规则写清楚,两次评分之间的差异才算裁判的锅。

准备阶段看似琐碎,却决定后续所有数字的意义。指标只是最后的一把尺子,尺子前面的“测量对象”如果没定义好,再精确的算法也算不出靠谱结论。陈哥把“合格”的标准贴在厨房墙上,又准备了 50 道风味不同的菜,才开始让两位裁判正式“开考”。

Cohen Kappa:分类判断的默契度量

小评和老周开始给 50 道菜打“合格/不合格”。乍一看,两人有 80% 的菜都给出相同结论,陈哥正准备高呼“靠谱”,但老周提醒他:如果 90% 的菜本来就好吃,那么即使两个裁判都是闭眼乱猜,也很容易同时说“合格”。真正要看的是,两位裁判的一致程度有没有超越“瞎猜”。

于是,Cohen Kappa 登场。它把观察到的实际一致率扣掉随机一致率,再除以完全一致和随机一致之间的差距,得到的就是剔除运气后的一致程度。公式如下:

其中,$p_o$ 是观察一致率,$p_e$ 是期望一致率。

在陈哥的实验里,虽然两位裁判在 80% 的菜上意见一致,但因为他们都倾向于说“合格”,随机期望就高达 62%,算出来的 Kappa 只有 0.47,远没有表面上那么亮眼。通常认为,Kappa 在 0.6 以下时一致性只能算“中等”,0.6 到 0.8 才算“可观”,超过 0.8 才是“几乎完全一致”。

Kappa 的价值就在于它不当“老好人”。两位裁判如果全都随大流唱赞歌,观察一致率再高也说明不了鉴别力。只有当他们的一致明显高于运气预期时,这位 AI 裁判才算真的“读到”了菜品的差异。

κ=po−pe1−pe\kappa = \frac{p_o - p_e}{1 - p_e}
  1. 计算观察一致率把两个裁判对每个样本的打分两两配对,统计打相同类别的比例。
    po=1n∑i=1nI(ai=bi)p_o = \frac{1}{n}\sum_{i=1}^{n} \mathbb{I}(a_i = b_i)
  2. 计算期望一致率分别统计两个裁判在每个类别上的边际比例,再把同类别的两个比例相乘后求和。
    pe=∑kpA,k×pB,kp_e = \sum_{k} p_{A,k} \times p_{B,k}
  3. 代入 Kappa 公式用观察一致率减去随机期望,再除以完全一致与随机期望的差值。
    κ=po−pe1−pe\kappa = \frac{p_o - p_e}{1 - p_e}

Spearman 系数:排序打分的默契度量

过了一段时间,陈哥不再满足于问“合格还是不合格”,他想知道小评能不能像老周一样,把 20 道菜按照好吃程度排出座次。这时候,“合格/不合格”的二分判断太粗糙了,因为两道菜可能都合格,但高下立判。陈哥需要一把能衡量“排序默契”的尺子。

Spearman 系数就是这把尺子。它先把每个裁判的原始分数从小到大转换成名次(秩次),然后比较同一个样本在两组名次中的位置差异。只要两位裁判的排序方向一致,哪怕小评整体给分偏低,Spearman 仍然可以接近 1。计算公式如下:

这里 $d_i$ 是第 $i$ 道菜在两个裁判排序中的名次差,$n$ 是样本数量。

Spearman 系数为 1 时,两位裁判给的顺序完全一样;为 0 时,两者没有单调关系;为 -1 时,排名完全相反。对小评来说,如果它对“宫保鸡丁”打 4 星、对“凉拌黄瓜”打 2 星,而老周是 8 分和 5 分,Spearman 依然可能很高,因为两人的排序结论一致。陈哥并不要求 AI 和老周斤斤计较到同一个分数,只要大方向一致,AI 裁判就足够用于快速筛查了。

ρ=1−6∑i=1ndi2n(n2−1)\rho = 1 - \frac{6\sum_{i=1}^{n} d_i^2}{n(n^2 - 1)}
  1. 把分数换成秩次对每个裁判的分数分别排序,最低分给名次 1,最高分给名次 $n$;如果出现并列,则使用平均名次。
    rA,i=rank⁡(xA,i),rB,i=rank⁡(xB,i)r_{A,i} = \operatorname{rank}(x_{A,i}), \quad r_{B,i} = \operatorname{rank}(x_{B,i})
  2. 求同一对象的秩差计算同一道菜在两个裁判排序中的名次差。
    di=rA,i−rB,id_i = r_{A,i} - r_{B,i}
  3. 代入 Spearman 公式秩差平方和越小,排序越一致;公式把排序差异映射到 -1 到 1 之间。
    ρ=1−6∑i=1ndi2n(n2−1)\rho = 1 - \frac{6\sum_{i=1}^{n} d_i^2}{n(n^2 - 1)}

评估实施流程

陈哥现在知道了指标,但一次像样的“裁判验收”还需要完整的流程。就像不能让小评只尝一口菜就下结论,评测也不能只跑一次模型就宣布分数可信。规范的流程是:先设计样本,再运行裁判,接着清洗数据,最后计算指标并写下结论。

首先是收集评分。陈哥从菜单里挑出 50 道菜,其中包含招牌菜、新研发菜和争议菜;对应到 LLM 评测中,就是从不同模型、不同 prompt 下采集回答,覆盖好、中、差三档质量。然后,让同一个 LLM 裁判在固定评分指令下独立评分,必要时重复运行多次,以获得重测稳定性。为了让两次评分真正独立,可以在不同批次中打乱样本顺序。

接下来是数据清洗。LLM 裁判虽然聪明,但偶尔会答非所问,比如输出一段解释而不给出分数,或者给出“3.5 星-5 星”这种模棱两可的结果。清洗时要把无法解析的评分剔除,并将两次评分的样本一一配对。最后,根据数据类型选择合适的指标:分类标签用 Cohen Kappa,排序或等级评分用 Spearman。计算出结果后,还要结合样本特征解释指标,而不能只看一个孤零零的数字。

一个完整的流程就像一次“盲测”:小评不知道这是为了考验它,老周也不知道小评的存在。只有当采样、运行、清洗、计算四步都规范,得到的一致性指标才有资格写进评测报告。陈哥让这套流程固定成制度,以后每换一批新菜,都先跑一遍“裁判体检”。

实践应用

小评通过了陈哥的两次考验:重测稳定,排序也和老周高度一致。从此,小评正式上岗。它每天可以试吃几百道菜,而老周只需要每周复核一次。这就像在真实 AI 工程中,一旦我们把 LLM 裁判验证好,就可以用它去大规模评估模型输出,极大降低人工评审成本。

在评测可信度方面,每次发布模型评测报告时,都应该附上 Cohen Kappa 和 Spearman 系数。这相当于告诉读者:“我家的 AI 裁判经过测试,结论可以复现,而且和人类专家对得上。”当模型版本更新时,一致性指标还能用于模型筛选:如果 LLM 裁判对两个候选模型给出的排序不稳定,说明两者差距可能并不明显,不能仅凭分数高一点就盲目上线。

在基准建设方面,团队可以把经过一致性验证的 LLM 裁判用于构建更大规模的评测集,同时保留人工标注的“黄金样本”作为锚点。此外,一致性还能当警报器使用:如果某天 Kappa 突然从 0.75 跌到 0.4,很可能说明评分 prompt 被改动、样本分布发生偏移,或者 LLM 服务端出了问题。就像陈哥一旦发现小评连续几天打分飘忽,就会立刻停用并排查原因一样,指标异常是系统健康问题的第一封来信。

AI 应用场景

大模型评测平台上线前的“裁判体检”

阶段:评测可信度验证

解决的问题:过去很多团队直接用 LLM 打分,却不知道这张评分是否稳定。传统人工复核周期长、成本高;如果不验证裁判一致性,自动评测结果可能完全不可复现。

具体案例:某评测团队构造了 200 条模型回答样本,让一个 LLM 裁判在同一套指令下独立评分两次,并与三位人类专家评分比较。他们计算出 Cohen Kappa 为 0.72,Spearman 为 0.88,确认裁判达到上线标准,才把自动化评测接入每日回归。

模型版本迭代中的回归看护

阶段:模型迭代

解决的问题:新模型上线前,需要快速判断它是否真的比旧模型好。若 LLM 裁判排序不稳定,分数差异可能就是噪声。

具体案例:算法团队每次提交新模型,流水线都会让 LLM 裁判对 100 条代表性样本打分,计算与上一轮的 Spearman 系数。当排序相关性低于阈值时,系统自动触发人类专家复核,避免“假进步”导致的错误发布。

自动化内容审核中的风险预警

阶段:质量监控

解决的问题:AI 裁判在线上长时间运行后,可能会因为 prompt 调整或模型服务波动而变得不稳定,导致打分尺度漂移。

具体案例:内容平台每天用 LLM 裁判评估 AI 生成回答的安全等级。平台每天抽取 50 条历史样本进行重测,监控 Cohen Kappa 变化趋势。某天指标突然跌破 0.5,团队发现是新版本 prompt 中少了一句评分锚点说明,及时回滚修复。

Python 演示

python51 行
def rank_values(values):    n = len(values)    pairs = sorted((v, i) for i, v in enumerate(values))    ranks = [0.0] * n    i = 0    while i < n:        j = i        while j < n and pairs[j][0] == pairs[i][0]:            j += 1        avg_rank = (i + 1 + j) / 2.0        for k in range(i, j):            ranks[pairs[k][1]] = avg_rank        i = j    return ranks  def cohen_kappa(ratings_a, ratings_b, categories):    n = len(ratings_a)    if n == 0:        return 0.0    observed = sum(1 for a, b in zip(ratings_a, ratings_b) if a == b) / n    expected = 0.0    for cat in categories:        pa = ratings_a.count(cat) / n        pb = ratings_b.count(cat) / n        expected += pa * pb    if expected == 1.0:        return 1.0    return (observed - expected) / (1.0 - expected)  def spearman(ratings_a, ratings_b):    n = len(ratings_a)    if n <= 1:        return 0.0    ra = rank_values(ratings_a)    rb = rank_values(ratings_b)    d2 = sum((a - b) ** 2 for a, b in zip(ra, rb))    return 1.0 - 6.0 * d2 / (n * (n * n - 1))  def main():    expert = [1, 2, 3, 4, 5, 1, 2, 3, 4, 5]    llm = [1, 2, 3, 4, 5, 2, 1, 4, 3, 5]    categories = [1, 2, 3, 4, 5]    print("Cohen Kappa:", cohen_kappa(llm, expert, categories))    print("Spearman:", spearman(llm, expert))  if __name__ == "__main__":    main()
目的:用 Python 实现 Cohen Kappa 和 Spearman 系数,直接统计 LLM 裁判与人类专家评分的一致程度。
  1. observed = sum(1 for a, b in zip(ratings_a, ratings_b) if a == b) / n计算两个裁判打相同分的比例,这是观察一致率。
  2. expected += pa * pb把每个类别上的两个边际比例相乘后累加,得到随机猜中的期望一致率。
  3. return (observed - expected) / (1.0 - expected)将结果代入 Kappa 公式,扣除随机一致。
  4. avg_rank = (i + 1 + j) / 2.0遇到并列分数时取平均名次,避免 Spearman 因并列而失真。
  5. d2 = sum((a - b) ** 2 for a, b in zip(ra, rb))求两组秩次的差平方和,用于计算 Spearman 系数。
  6. return 1.0 - 6.0 * d2 / (n * (n * n - 1))用秩差平方和套用 Spearman 公式,得到排序相关性。

常见误区

误区我看了下,两个裁判有 90% 的评判都一样,说明 Cohen Kappa 肯定大于等于 0.9。

正解观察一致率只是 Kappa 的一半。Kappa 会扣除随机一致率,如果样本里绝大多数答案都被评为“合格”,两位裁判即使随机乱猜也很容易撞在一起。这时观察一致率可能很高,Kappa 却只有 0.3。

为何常见:观察一致率直观好懂,而且很多评测报告默认展示准确率,大家容易把“一样”和“真的好”混为一谈。

误区两位裁判的 Spearman 是 0.98,说明他们打出的分数差不了多少,可以放心直接替换。

正解Spearman 只衡量排序是否一致,不衡量分数差距。一位裁判给 1、2、3 分,另一位给 80、90、100 分,Spearman 依然可能是 1。它看的是“谁比谁好”,而不是“好多少”。

为何常见:看到“相关系数”就容易联想到数值大小接近,忽略了 Spearman 内部先把分数换成了名次。

误区同一个 LLM 裁判对同样的样本跑了好几次,分数完全一样,说明它已经足够可靠,不需要人类复核了。

正解重测稳定性只是“自我一致性”,它只能说明裁判没有情绪化,不能说明打分标准正确。如果 prompt 里给了错误锚点,模型可能稳定地给出偏颇分数。真实可靠性还需要看它和人类专家的一致性。

为何常见:稳定性给人一种“机器很自律”的信任感,但这其实只是可信度的必要条件之一。

误区Cohen Kappa 变成负数,说明两位裁判的结论完全相反,谁是 AI 谁是专家一目了然。

正解负 Kappa 表示观察一致率低于随机期望,但造成这种情况的可能是样本过少、类别极度不平衡或数据编码错位。它只说明“比瞎猜还差”,并不一定代表系统性的完全对立。

为何常见:“负相关”在日常语言里容易理解为“反着来”,但统计指标负值还有噪声解释,需要结合样本量和使用场景。

面试题

Q1. 裁判一致性的核心问题是什么?

单选题 · easy

  • A.打分手是否稳定← 正确答案
  • B.打分是否更严格
  • C.推理速度是否快
  • D.参数量是否足够

答案:A。裁判一致性关注的是同一个裁判重复打分是否稳定,以及是否与人类专家对齐。更严格、推理速度和参数量可能影响体验,但不是一致性的核心问题。

Q2. 两个裁判在“合格/不合格”上做判断,最常用的评估指标是?

单选题 · easy

  • A.Kappa一致性系数← 正确答案
  • B.Spearman相关系数
  • C.皮尔逊相关系数
  • D.均方误差计算值

答案:A。合格/不合格是类别标签,Cohen Kappa 专门用于衡量类别判断的一致性,并能扣除随机一致。Spearman 更适合排序,皮尔逊和均方误差适合连续数值。

Q3. Cohen Kappa 为什么要扣除期望一致率?

单选题 · mid

  • A.随机猜测也能造成一致← 正确答案
  • B.模型优秀分数自然更高
  • C.样本增加会稀释系数
  • D.期望一致代表完全可靠

答案:A。两位裁判即使完全不看标准,也会因为样本分布而偶然打出相同标签。Kappa 把这种偶然一致减掉,才能反映超出运气的真实默契。

Q4. Spearman 系数主要衡量两组分数的什么关系?

单选题 · mid

  • A.两组分数是否完全相等
  • B.两组分数排序是否一致← 正确答案
  • C.两组分数均值是否相同
  • D.两组分数方差是否一致

答案:B。Spearman 先把分数换成排名,再比较排名差异。它关心的是单调趋势,也就是排序是否一致,而不是分数本身等不等。

Q5. 同一个 LLM 裁判对同一批样本重复评分所体现的一致性,通常称为?

单选题 · mid

  • A.重测稳定性← 正确答案
  • B.平行效度
  • C.结构效度
  • D.内部一致性

答案:A。同一批样本在不同时间或批次下重复测试,衡量的是重测稳定性。效度类概念关注测量是否准确,内部一致性更常用于问卷条目之间的相关。

Q6. Cohen Kappa 等于 0.6 时,比较合理的结果解读是?

单选题 · hard

  • A.完全不可信
  • B.等同随机猜测
  • C.中高度一致性← 正确答案
  • D.改用其他指标

答案:C。Kappa 0.6 通常被认为具有可观的一致性,介于中等到高度之间,不应简单否定。只有接近 0 才说明和随机猜测差不多。

Q7. 某 LLM 裁判重测 Kappa 很高,但与人类专家 Kappa 很低,这说明?

单选题 · hard

  • A.裁判稳定但可能偏颇← 正确答案
  • B.裁判通过一致性考验
  • C.人类专家参考价值低
  • D.样本一定数量过少

答案:A。重测高说明裁判自己很稳定,但与人类专家低说明它的打分尺度和人类不一致,可能是系统性偏颇。一致性并不等于有效性。

Q8. 哪些情况下更适合使用 Spearman 而非 Cohen Kappa?

多选题 · mid

  • A.只关心排名次序← 正确答案
  • B.分数为连续数值← 正确答案
  • C.判断是二分类别
  • D.类别数量非常少

答案:AB。Spearman 基于秩次,适合排序或连续分数被转成排名的情况。二分类别和类别很少的场景更适合 Kappa。

Q9. 设计一个裁判一致性评估实验时,应该做哪些事情?

多选题 · mid

  • A.构造有区分度样本← 正确答案
  • B.固定裁判评分指令← 正确答案
  • C.保证样本全是高分
  • D.多次独立运行裁判← 正确答案

答案:ABD。样本要有区分度,评分指令要固定,还要多次独立运行以估计稳定性。如果样本全是高分,高一致率可能只是随机撞车,不能说明裁判有鉴别力。

Q10. 即使 Kappa 达到 0.9,评测结论仍可能不可靠的原因包括?

多选题 · hard

  • A.人类标签本身有误← 正确答案
  • B.样本覆盖过于狭窄← 正确答案
  • C.裁判存在共同偏见← 正确答案
  • D.评分必须完全对齐

答案:ABC。Kappa 只反映裁判之间的默契,如果人类标签错了、样本太单一、两个裁判又有相同偏见,高一致也不能保证准确。评分无需完全对齐,排序或等级足够时即可使用。