模型评测是怎么回事
训练完模型,怎么知道好不好?靠评测。
评测是大模型领域非常重要但又很复杂的事。这篇讲清楚评测的基本概念和方法。
为什么需要评测
对比模型
「我们的模型比 GPT-4 强」——怎么证明?靠评测数据。
指导训练
训练过程中要看评测指标,判断是否过拟合、是否学到了该学的能力。
用户选型
用户选模型,要看各项评测得分,选最适合自己场景的。
行业标准
没有评测就没有标准,大家各说各的,没法比较。
评测的难点
大模型评测比传统机器学习评测难很多:
1. 能力维度多
大模型要评测的能力太多:
- 语言理解
- 知识问答
- 数学推理
- 代码生成
- 多轮对话
- 指令遵循
- 安全性
- ...
一个 benchmark 只能测一个方面。
2. 主观性强
很多任务没有标准答案:
问:写一首关于春天的诗
回答A:春风又绿江南岸...
回答B:桃花依旧笑春风...
哪个更好?主观。
3. 容易作弊
如果评测集公开,模型可以「背答案」:
- 训练数据混入评测集
- 针对评测集优化
- 过拟合特定格式
评测分数高,实际能力不一定强。
4. 不断演化
模型能力在进步,评测集也要跟着进步。
GPT-3 时代的评测,对 GPT-4 可能太简单了。
评测的类型
客观评测
有标准答案,可以自动计算分数。
问:法国的首都是哪里?
答:巴黎
正确答案:巴黎
得分:1
优点:可重复、成本低、可大规模 缺点:只能测有限的能力
主观评测(人工评测)
人来判断回答质量。
问:写一封道歉信
模型回答:...
评测员打分:内容 4/5,语气 3/5,格式 5/5
优点:能评测开放式任务 缺点:成本高、主观性强、难以大规模
LLM-as-Judge
用另一个大模型(如 GPT-4)来评判。
评测 prompt:
请评价以下回答的质量,从 1-10 打分:
问题:{question}
回答:{answer}
请给出分数和理由。
优点:成本低、可大规模 缺点:评判模型本身有偏见
评测指标
准确率(Accuracy)
最直接的指标:答对了多少。
正确数 / 总数 × 100%
适用于选择题、判断题。
BLEU
机器翻译常用,衡量生成文本和参考答案的相似度。
计算 n-gram 重合度
ROUGE
摘要任务常用,衡量召回率。
Perplexity(困惑度)
语言模型质量指标,越低越好。
模型对测试集的「困惑程度」
困惑度低 = 模型对正确答案更「自信」
Pass@k
代码生成常用。生成 k 个答案,只要有一个通过测试就算对。
Pass@1:生成 1 个答案,通过率
Pass@10:生成 10 个答案,至少 1 个通过的概率
Elo Rating
竞技对战评分系统,用于模型之间的对比。
Chatbot Arena 用这个方法让用户投票,给模型排名。
评测流程
1. 选择 Benchmark
根据要测的能力选择合适的评测集:
- 综合能力:MMLU
- 数学:GSM8K、MATH
- 代码:HumanEval、MBPP
- 中文:C-Eval、CMMLU
2. 准备环境
# 加载模型
model = load_model("llama-7b")
# 加载评测集
dataset = load_dataset("cais/mmlu")
3. 生成答案
for sample in dataset:
prompt = format_prompt(sample["question"], sample["choices"])
answer = model.generate(prompt)
results.append({
"question": sample["question"],
"answer": answer,
"ground_truth": sample["answer"]
})
4. 计算分数
correct = sum(1 for r in results if r["answer"] == r["ground_truth"])
accuracy = correct / len(results)
5. 分析结果
- 整体分数
- 各类别分数
- 错误分析
- 和其他模型对比
评测工具
lm-evaluation-harness
EleutherAI 开源的评测框架,支持几十个 benchmark。
# 安装
pip install lm-eval
# 运行评测
lm_eval --model hf \
--model_args pretrained=meta-llama/Llama-2-7b-hf \
--tasks mmlu \
--batch_size 8
OpenCompass
上海人工智能实验室的评测平台,对中文支持好。
python run.py --datasets mmlu_ppl ceval_ppl \
--hf-path meta-llama/Llama-2-7b-hf
Hugging Face Evaluate
HuggingFace 的评测库。
import evaluate
bleu = evaluate.load("bleu")
results = bleu.compute(predictions=preds, references=refs)
评测的坑
1. Prompt 敏感
同一个模型,不同 prompt 格式,分数可能差很多:
格式A:请回答以下问题:{question}
格式B:Question: {question}\nAnswer:
格式C:{question}
三种格式,准确率可能差 5-10%
所以要说明用的什么 prompt。
2. 采样参数影响
# 贪心解码 vs 采样
temperature=0 # 确定性输出
temperature=0.7 # 有随机性
同一模型,不同参数,分数不同
3. few-shot 数量
few-shot 越多,效果通常越好:
0-shot:直接问
5-shot:给 5 个例子
要说明用的几 shot。
4. 数据污染
训练数据包含评测集 = 作弊。
一些模型在特定 benchmark 分数特别高,可能是因为训练数据里有。
5. 时效性
评测集是静态的,模型一直在进步。
老的评测集可能区分度不够。
如何看评测报告
看到模型评测报告,要注意这些信息:
必须有的信息
- 用了哪些 benchmark
- prompt 格式
- few-shot 数量
- 采样参数
- 模型版本/checkpoint
要关注的点
- 和基线对比:比 GPT-4 高多少不重要,关键看用的是不是同样的评测设置
- 多个 benchmark:只看一个 benchmark 不全面
- 分类别分数:总分高但某类别低,说明有短板
- 是否开源评测代码:能复现才可信
常见的坑
- 「超越 GPT-4」:可能只是某一个 benchmark 超了
- 只报好看的分数,不报差的
- 评测设置不一致,没法比较
小结
模型评测的核心知识:
为什么难:
- 能力维度多
- 主观性强
- 容易作弊
- 需要持续更新
评测类型:
- 客观评测:有标准答案
- 主观评测:人工打分
- LLM-as-Judge:用模型评模型
关键指标:
- Accuracy:准确率
- BLEU/ROUGE:文本相似度
- Pass@k:代码生成
- Elo:对战排名
注意事项:
- prompt 格式
- few-shot 数量
- 数据污染
- 评测设置要一致
下一篇详细介绍常见的 Benchmark:MMLU、HumanEval、GSM8K 等。