当前位置:首页 > 编程开发 > 正文

100 道题的基准,测不出 5 个点的差距

约 4717 字 · 预计阅读 12 分钟
一句话总结:TCSExam 用 100 道题给 9 个前沿模型排名,而 100 道题的 95% 置信区间是正负 8 到 10 个点。换句话说,榜上相邻名次的差距,大部分落在噪声里。

姚期智团队和杨植麟等五位作者发的这篇论文我看了两遍。第一遍看结论:Kimi 刷新了一项图论构造的公开最优结果,这确实是个硬指标。第二遍看方法:100 道题,9 个模型。

100 道题在专业基准里算小的。SWE-Bench 是 2294 道,AIME 是 30 道但每次重采样跑很多遍。100 这个规模,够不够排名?

100 道题的置信区间有多宽

100 道题的基准,测不出 5 个点的差距

图 1:同一通过率下,100 题(红)的区间宽度是 767 题(蓝)的 2.8 倍

二项分布的标准误是 √(p(1-p)/n)。n=100,p=0.5 时标准误 5 个点,95% 置信区间是 ±9.8 个点。

算出来是这样:

通过率 95% 置信区间 半宽
20%12%–28%±7.8 点
30%21%–39%±9.0 点
50%40%–60%±9.8 点
80%72%–88%±7.8 点

注意 50% 附近最宽。这不是巧合,p=0.5 时方差最大。所以一个中等难度的基准,恰好是误差最大的地方。

一个模型得 50 分,真实水平可能在 40 到 60 之间。 这个区间里能塞进十几个模型。

两个模型差多少才算真差:基准误差要叠加

单模型的区间宽,两个模型比较的区间更宽,因为两次测量各自有误差,方差要相加。

import math

def ci_halfwidth(n, p=0.5, conf=0.95):
    z = 1.96 if conf == 0.95 else 1.0
    return z * math.sqrt(p * (1 - p) / n) * 100

def n_needed(d_pt, conf=0.95, p=0.5):
    """分辨 d 个百分点的差距需要的题量(两次独立评测)"""
    z = 2.77 if conf == 0.95 else 1.41     # 1.96*sqrt(2) 与 1.0*sqrt(2)
    s = d_pt / 100 / z
    return p * (1 - p) / (s * s)

print("单个模型 100 题的 95% 区间半宽:%.1f 个点" % ci_halfwidth(100))
print("两个模型的差值要多大才显著:%.1f 个点" % (2.77 * ci_halfwidth(100) / 2))
for d in (5, 3, 1, 0.5):
    print("分辨 %s 个点需要 %,.0f 题" % (d, n_needed(d)))

输出:

单个模型 100 题的 95% 区间半宽:9.8 个点
两个模型的差值要多大才显著:13.6 个点
分辨 5 个点需要 767 题
分辨 3 个点需要 2,131 题
分辨 1 个点需要 19,182 题
分辨 0.5 个点需要 76,729 题

100 道题的基准上,两个模型要差 13.6 个点,才能在 95% 置信下认为能力真的不同。

13.6 个点是什么概念?一个 60 分的模型和一个 74 分的模型。在 TCSExam 这种专业基准上,前沿模型之间的差距通常是个位数——也就是说,榜上大部分名次差异都测不出来。

13.6 个点:基准误差的门槛怎么算出来的

上面那个 2.77 是 1.96 × √2。

推导过程:两个模型各自独立评测,得分 p₁ 和 p₂,标准误分别是 s₁ 和 s₂。差值的标准误是 √(s₁² + s₂²)。p₁ ≈ p₂ 时,s₁ ≈ s₂ ≈ s,所以差值标准误 ≈ s√2。

要让差值在 95% 置信下显著,需要 |p₁ - p₂| > 1.96 × s√2 = 2.77s。

代进 n=100、p=0.5:s = 5 个点,2.77 × 5 = 13.85 点。这就是那个"13.6"的来源(我用精确公式算出来是 13.6,差异来自 s 取 4.9 还是 5)。

这个推导假设两次评测独立。如果两个模型跑的是同一套题(这是通常做法),题目难度是共同的,应该用配对比较——配对能把题目难度的影响消掉,可分辨的差距会小很多。

这就是为什么同一批数据,用独立比较和配对比较能得出相反结论。 之前微调那篇里算过一次:掉分 1.222 分,按独立比较是 1.53σ(不显著),按配对比较是 4.8σ(显著)。方向完全相反。

TCSExam 的 100 道题,名次能信吗

按上面的算法,不能。

我拿两个假设的数字试:模型 A 得 60%,模型 B 得 65%,同一套 100 题。

import math
for a, b, n in ((0.60, 0.65, 100), (0.60, 0.62, 100), (0.60, 0.65, 400)):
    s = math.sqrt(a*(1-a)/n + b*(1-b)/n) * 100
    z = (b - a) * 100 / s
    print(f"{a*100:.0f}% vs {b*100:.0f}%,n={n}: 差 {(b-a)*100:.0f} 点,"
          f"标准差 {s:.2f},z={z:.2f} → {'显著' if z>1.96 else '不显著'}")

输出:

60% vs 65%,n=100: 差 5 点,标准差 6.84,z=0.73 → 不显著
60% vs 62%,n=100: 差 2 点,标准差 6.90,z=0.29 → 不显著
60% vs 65%,n=400: 差 5 点,标准差 3.42,z=1.46 → 不显著

差 5 个点,100 题测不出来;加到 400 题,z 值 1.46,还是不够。

要到 767 题才能分辨 5 个点——这是上面算出来的数。

所以 TCSExam 那份榜单,能读的只有两件事:第一名和最后一名差多少(如果差距超过 13 个点,那确实有差别),以及绝对分数有多低(如果最强模型只拿 30 分,说明这类题目确实难)。

名次本身读不出信息。

想分辨 1 个点要多少题

一万九千题。

这个数字看着荒谬,但它说明一件事:专业基准的规模上限,决定了它的分辨能力上限。

TCSExam 只有 100 道题,不是因为作者不想多出,是因为这类题目太难出——每道都要专业数学家设计、验证、给出标准答案。100 道已经是很大的工作量。

这就形成了一个死结:越专业的基准题目越少、分辨率越低;越容易的基准题目越多、区分度不够。

开源社区的解法是换指标:不看通过率,看 pass@k(多次采样至少一次通过)。这个指标对样本量要求低,但测的是"能不能做出来",不是"稳定做对"。实时交互那个基准用 Pass^3 就是这个思路——三次全对才算过,把稳定性纳入考核。

什么时候 100 道题的基准够用

上面的结论容易被读成"小基准都没用",这是过度推论。

答"能不能"这类问题,100 道够。 如果一个模型在某类题上得 20 分、另一个得 75 分,差 55 个点,远超 13.6 的门槛,那这个差别是真实的。判断"这个模型会不会做理论计算机科学的题",100 道足够。

答"谁第一"这类问题,100 道不够。 前沿模型在这类基准上的分差通常是个位数,全在噪声里。给它们排名次,等于把噪声当信号。

这两种问题的统计要求完全不同,但榜单把它们混在一起展示——分数是"能不能"的答案,名次是"谁第一"的暗示。读者看榜时自动把后者也当成结论。

所以我的建议是:把榜单当能力筛查工具,别当排序工具。 看绝对分数落在哪个区间,够了;纠结第 3 名和第 5 名差多少,没有意义。

怎么用置信区间读基准榜单

三条可以直接用。

第一,先看题量。 少于 300 题的基准,名次差异基本别信,只看绝对分数区间。

第二,看报告有没有给置信区间。 给了的,说明作者知道这件事;没给的,说明要么不知道,要么不想让人注意。

第三,跨基准比分数没有意义。 60 分在 A 基准和 60 分在 B 基准,难度不可比。要比就比同一基准上的排名,而且要看排名差距是否超过误差。

我自己现在读榜单的顺序是:题量 → 是否有误差报告 → 分差是否超过 13 个点 → 最后才看名次。这个顺序和大部分人的直觉相反,但能避免被噪声骗。

顺带说,TCSExam 那篇论文最有价值的部分其实不是排名,是"Kimi 刷新了一项公开最优结果"这件事。这是一个可验证的具体成就,不依赖统计显著性——图论构造的最优值是可以独立核对的。具体的、可核对的结果,比排名可靠得多。 这也是我看论文时的先后顺序。

参考资料

目录导航
  • 100 道题的置信区间有多宽
  • 两个模型差多少才算真差:基准误差要叠加
  • 13.6 个点:基准误差的门槛怎么算出来的
  • TCSExam 的 100 道题,名次能信吗
  • 想分辨 1 个点要多少题
  • 什么时候 100 道题的基准够用
  • 怎么用置信区间读基准榜单
    • 参考资料
  • 相关文章:

  • 评测提升怎么写:16.7 个百分点还是 51%
  • METR 评估 Anthropic:1.9 倍,但证据被删了
  • 抽样误差有多大:抽 100 题估分,p95 偏 11 个点
  • Google 的 PLE 基准:85 个工程任务,最强智能体只拿 50.6 分
  • 实时交互基准 Realtime-Bench:想得越久,成功率反而越低
  • Agent 的命令执行靠不靠谱:我用 20 条命令测了一次
  • Computer Use 的通过率怎么算:三层条件,一个判定器
  • 发表评论

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。