主题
榜单怎么看,以及为什么要用自己的数据评测
本章要回答的问题:榜单上一堆分数,为什么不能照着选?我该怎么用自己的任务测一遍?
三类榜单,回答三个不同的问题
学术基准:MMLU 这类考试型数据集,题目和答案固定,分数可比(引用 [1])。它回答的是"模型在某个知识范围内答对选择题的概率",适用于粗筛,不适用于预测你业务上的表现。
人类偏好榜:Chatbot Arena 让用户对两个匿名模型的回答投票,用统计模型算出排名(引用 [2])。它回答的是"普通人更喜欢哪个回答",对聊天体验有参考价值,但对"能不能从维修手册里找出正确扭矩值"几乎没有信息量。
任务榜:代码、数学、工具调用等专项榜。它们的问题更具体,也更容易被针对性优化(甚至过拟合)。
三类榜单的共同点是:它们测的都是别人的任务。你的任务是第四类。
为什么不能照着分数选
第一,数据污染。 基准题目公开后,会进入后续模型的训练语料。Sainz 等人的工作系统性地检验了这件事,发现很多模型在"应该没见过"的题上表现异常好(引用 [3])。GSM1k 用新构造的同分布题目复测,发现多个模型在 GSM8K 上的高分有明显虚高(引用 [4])。分数越高,越要怀疑。
第二,饱和。 MMLU 的头部区间已经挤满了模型,差 0.5 分可能只是评测噪声。当一个基准无法区分强弱时,它对新模型选型就没有价值了。
第三,评测口径不一致。 同一个模型,5-shot 和 0-shot、开不开思考、用什么框架跑,分数可能差好几个点。很多榜单不公布完整配置,模型卡也只挑好看的数字。跨表比较之前,先确认口径。
第四,语言和领域偏移。 英文基准高分不等于中文好;通用问答好不等于工业文档好。中文企业场景里的缩写、型号、单位、表格结构,通用基准一个都测不到。
第五,成本没进榜。 榜单只比质量,不比"每秒多少 token""占多少内存"。而选型的本质是在质量、延迟、内存之间做交易,只优化一项没有意义。
榜单的正确用法:筛掉,而不是选中
把榜单当成候选过滤器,而不是决策依据:
- 用榜单和模型卡,从几十个模型里筛出 2–3 个候选;
- 确认它们都能在你的硬件上跑起来(1.6 节的估算);
- 用自己的数据做小规模对照;
- 用结果做决定,并把过程记录下来。
顺序很重要。反过来做(先选中一个,再找证据支持),是选型里最常见的自欺。
自建评测的最小可行版本
不需要一上来就做几百题。一个能指导决策的最小集,包含 20–50 题就够了,但必须满足四个条件:
覆盖典型任务,而不是覆盖知识点。 比如:直接摘取(答案在一段里)、跨段组合(答案要拼两处)、条件判断(材料里有例外条款)、拒答(材料里没有答案)。四类各占一定比例。
每题有判定标准。 最好是可以机械判定的(答案是一个数、一个型号、一个日期),其次是明确的评分规则(必须包含 A、B、C 三个要点)。"感觉答得不错"不能算标准。
固定所有变量。 同一份 prompt 模板、同样的采样参数、同样的上下文长度、同样的检索结果。只改模型。
盲评。 判断时不要看是哪个模型答的。做不到双盲,至少做到单盲,并且先定标准再看答案。
关于工具:lm-evaluation-harness 是学术界常用的评测框架,适合跑标准基准(引用 [5])。但它不解决"你的任务"这个问题——业务评测集还是要自己建,第六部分 6.1 给了完整流程。
一个容易忽略的指标:单位答案的成本
同样答对一道题,输出 50 个 token 和输出 500 个 token,成本差十倍。开思考模式的模型尤其明显:它可能先写 800 个 token 的推理过程,再给一句结论。
所以评测时至少记录三个数:是否正确、输出 token 数、耗时。只看正确率,会选出"又慢又贵但多对一题"的模型。
动手实验
动手实验:12 题小集的三模型对照
假设:在"直接摘取"类任务上三个模型差距很小;在"条件判断"和"拒答"上差距明显;开思考模式能提升正确率,但输出 token 数增加数倍。
准备:在 eval/mini/ 里放 12 道题,四类各 3 道,每题一个文件,包含材料、问题、标准答案、判定要点。
命令:
bash
# 前置:把模型路径和简称对上,方便按名字存输出
declare -A MODELS=(
[qwen35-9b]="$MODEL"
# 下面两个需另行下载,见 2.6 节;不下载就注释掉
# [qwen3-14b]="$HOME/models/Qwen3-14B-Q4_K_M.gguf"
# [gemma4-26b]="$HOME/models/Gemma-4-26B-A4B-Q4_K_M.gguf"
)
mkdir -p out
for name in "${!MODELS[@]}"; do
for q in eval/mini/q*.txt; do
llama-completion -m "${MODELS[$name]}" -c 8192 --temp 0 -n 256 \
-f "$q" --no-display-prompt > "out/${name}_$(basename "$q")"
done
done记录:每题的正确/错误、输出 token 数、耗时;按任务类型分组统计。把原始输出和评分表放 benchmarks/mini-eval/,不要只留一个总分。
参考资料
- Hendrycks, D. et al. Measuring Massive Multitask Language Understanding. arXiv:2009.03300. https://arxiv.org/abs/2009.03300
- Chiang, W.-L. et al. Chatbot Arena: An Open Platform for Evaluating LLMs by Human Preference. arXiv:2403.04132. https://arxiv.org/abs/2403.04132
- Sainz, O. et al. NLP Evaluation in Trouble: On the Need to Measure LLM Data Contamination for Each Benchmark. arXiv:2311.09783. https://arxiv.org/abs/2311.09783
- Mirzadeh, I. et al. A Careful Examination of Large Language Model Performance on Grade School Arithmetic. arXiv:2405.00332. https://arxiv.org/abs/2405.00332
- EleutherAI. lm-evaluation-harness. https://github.com/EleutherAI/lm-evaluation-harness