为什么需要模型评估
模型评估帮助我们回答三个核心问题:这个模型有多强?它在哪些方面擅长,哪些方面不足?多个模型之间如何比较?科学的评估体系是模型选型、优化和迭代的基础。
主流基准测试
| 基准 | 测试领域 | 题型 |
|---|---|---|
| MMLU | 57个学科知识 | 选择题 |
| HumanEval | 代码生成 | 编程题 |
| C-Eval | 中文综合能力 | 选择题 |
| CMMLU | 中文多学科 | 选择题 |
| GSM8K | 数学推理 | 应用题 |
| MATH | 竞赛数学 | 解答题 |
| HellaSwag | 常识推理 | 完形填空 |
| IFEval | 指令遵循 | 指令执行 |
运行评估实战
# 使用 lm-evaluation-harness 运行评估
pip install lm-eval
# 运行 MMLU 评估
lm_eval --model hf \
--model_args pretrained=deepseek-ai/deepseek-llm-7b-chat \
--tasks mmlu \
--batch_size 8 \
--output_path ./results/mmlu.json
# 运行 HumanEval 代码评估
lm_eval --model hf \
--model_args pretrained=deepseek-ai/deepseek-llm-7b-chat \
--tasks humaneval \
--batch_size 1
# 同时运行多个评估
lm_eval --model hf \
--model_args pretrained=deepseek-ai/deepseek-llm-7b-chat \
--tasks mmlu,gsm8k,hellaswag,winogrande \
--batch_size autoLLM-as-Judge:用 AI 评估 AI
对于开放式生成任务,传统基准测试难以覆盖。LLM-as-Judge 使用 GPT-4 等强模型作为评判者:
def llm_judge_eval(question, answer, reference):
prompt = f"""请评估以下AI回答的质量。
问题:{question}
参考答案:{reference}
待评估回答:{answer}
请从以下维度评分(1-5分):
1. 准确性:回答是否事实正确
2. 完整性:是否覆盖了所有关键点
3. 清晰度:表达是否清晰易懂
4. 有用性:是否对用户有帮助
请以JSON格式输出评分。"""
response = judge_llm(prompt)
return parse_scores(response)竞技场排名(Chatbot Arena)
LMSYS Chatbot Arena 是目前最受认可的模型能力排名。它通过匿名用户投票(盲测)来比较模型,避免作弊和基准测试的数据污染问题。Elo 评分系统让排名更加公平。
构建自定义评估集
通用基准不能完全反映你的业务需求。建议构建领域专属评估集:
- 收集真实场景数据:从生产日志中提取用户真实问题
- 标注参考答案:由领域专家标注高质量答案
- 定义评估维度:确定准确率、召回率、用户满意度等指标
- 自动化评估:使用 LLM-as-Judge 或规则引擎自动评分
- 持续更新:定期加入新的测试用例
避免常见陷阱
- 数据污染:训练数据可能包含测试数据,导致虚高分数
- 过拟合基准:为刷榜而优化,实际能力没有提升
- 单一指标:只看准确率而忽略其他维度如延迟、成本
- 忽略分布外能力:基准测试外的能力可能差距很大
总结
模型评估是一门科学也是艺术。建议使用「基准测试 + LLM-as-Judge + 人工评估」的三层评估体系,确保评估结果的全面性和可靠性。