自建评测统计 pass@k,同一 prompt 采样 n=10,k=5 的分数比人工复核高 12 个点,脚本里直接把十次结果拼成组合数计算。
一开始怀疑是「没有按 task 分组,跨题结果混在一起」,查了一圈,方向不对。
排查方向其实有限,先把可能性排一排。采样结果没有去重,重复答案被多次计数。少数情况下是n 小于 k 时仍然套公式。
另外,温度为 0,十条采样几乎完全一样。
第一件事是按 task 分组并统计唯一答案数
python -c "print('groupby(task).nunique(answer)')"
接着改用无偏估计公式计算 pass@k
python pass_at_k.py --n 10 --k 5 --unbiased
校验 n 必须大于等于 k
python pass_at_k.py --n 4 --k 5 --strict
末了把温度调到 0.8 重新采样对照
python sample.py --temperature 0.8 --n 10
同一份数据我导出了两份,一份留底,一份拿来试。
这类问题以前遇到过,但这次的触发条件和上次不一样。
改完先别撤,确认这几项。pass@k 与人工复核的差距缩小到 2 个点以内,n 小于 k 时脚本直接报错。
pass@k 衡量的是至少一次通过的概率,样本重复会让概率虚高,采样温度太低时这个指标本身就没有意义。如果同一现象隔几天又出现,说明根因没找到,别当偶发处理。
