第 12 讲:Evaluation 评估方法
训练一个语言模型之后,我们需要回答一个关键问题:这个模型到底有多好?这听起来简单,但实际上评估 LLM 是一个极其复杂的问题——语言模型能做的事情太多太杂,没有任何单一指标能全面衡量其能力。本讲将系统介绍 LLM 评估的方法论、主流 benchmark、以及评估中的常见陷阱。
为什么评估困难?
LLM 评估的困难源于几个根本性问题:
- 开放性:LLM 是通用模型,能力维度极多(语言理解、推理、编程、知识、创造性写作...),无法穷举所有能力
- 主观性:许多重要能力(如"写作质量"、"对话有用性")难以量化,不同人有不同评判标准
- 评估方式敏感:同一个模型在同一个任务上,换一种 prompt 格式,结果可能差异巨大
- 污染问题:训练数据中可能包含评估数据,导致评估结果虚高
- 饱和问题:随着模型能力提升,老 benchmark 逐渐被"解决",失去区分能力
Goodhart's Law
"当一个指标变成目标时,它就不再是一个好的指标。"(When a measure becomes a target, it ceases to be a good measure.)这在 LLM 评估中尤为突出——一旦某个 benchmark 成为优化目标,就会出现"教 benchmark"(benchmark gaming)现象。
Perplexity 作为内在评估
Perplexity (PPL) 是最基础的语言模型评估指标,衡量的是模型对 held-out 数据的预测能力。
直觉上,perplexity 可以理解为模型在每个 token 位置的"平均困惑程度"——模型越好,perplexity 越低。Perplexity 为 K 意味着模型在预测下一个 token 时,平均来说和从 K 个等概率选项中随机猜的效果相当。
Perplexity 的优势
- 客观且可复现:给定测试集和模型,结果是确定的
- 与 Scaling Laws 对齐:Scaling Laws 研究的 loss 就是 perplexity 的对数
- 计算简单:只需一次 forward pass
Perplexity 的局限
- 依赖测试集分布:在不同测试集上的 perplexity 不可比较
- 依赖 tokenizer:不同 tokenizer 的 perplexity 不可比较(因为 token 数不同)
- 不反映下游能力:更低的 perplexity 不一定意味着更好的推理或对话能力
- 对 instruction-tuned 模型不适用:fine-tuned 模型的分布偏移使 perplexity 失去意义
Benchmark 生态系统概览
为了评估 LLM 的各种能力,社区发展出了大量 benchmark。它们可以按评估维度分类:
| 维度 | 代表 Benchmark | 评估内容 |
|---|---|---|
| 知识与推理 | MMLU, ARC, HellaSwag | 事实知识、常识推理 |
| 数学能力 | GSM8K, MATH | 算术推理、数学问题求解 |
| 编程能力 | HumanEval, MBPP | 代码生成 |
| 真实性 | TruthfulQA | 避免常见谬误 |
| 综合能力 | HELM, Open LLM Leaderboard | 多维度综合评估 |
| 对话质量 | Chatbot Arena, MT-Bench | 对话有用性和偏好 |
具体 Benchmark 介绍
MMLU (Massive Multitask Language Understanding)
MMLU 包含 57 个学科的多选题(4 选 1),从高中到研究生水平,覆盖 STEM、人文、社科等。总共约 14,000 道题。
- 评估方式:给模型题目和 4 个选项,选出正确答案
- 指标:Accuracy
- 当前水平:GPT-4 约 86.4%,Claude 3.5 Sonnet 约 88.7%
- 人类水平:领域专家约 89.8%,普通人约 34.5%
# MMLU question example
Question: "What is the embryological origin of the hymen?"
A. Ectoderm
B. Endoderm
C. Mesoderm
D. Paramesonephric duct
# Evaluation: check if model's answer matches ground truth (A)
MMLU 的问题
MMLU 的一些题目存在错误答案标注(约 6.5% 的错误率,根据 MMLU-Redux 的审计)。此外,由于 MMLU 太常用,它可能已经严重被"污染"——很多模型的训练数据中包含 MMLU 的题目。
HellaSwag
HellaSwag 测试的是常识推理——给定一个场景描述,从 4 个候选续写中选出最合理的一个。
- 评估方式:选择最合理的续写
- 特点:候选项由 LM 生成,对人类简单(95.6%)但对模型较难
- 当前水平:最好的模型已接近人类水平
ARC (AI2 Reasoning Challenge)
ARC 包含小学科学考试题,分为 Easy Set 和 Challenge Set。Challenge Set 专门选取简单检索方法无法解答的题目。
- 评估方式:多选题
- Challenge Set:约 2,590 道较难的科学题
- Easy Set:约 5,197 道较简单的科学题
TruthfulQA
TruthfulQA 测试模型是否会复述常见的错误信息和迷信。它包含 817 个问题,涵盖健康、法律、金融、政治等领域的常见谬误。
- 特点:正确答案通常是反直觉的或不确定的
- 评估方式:Multiple-choice 或 generation + GPT-4 判断
- 有趣发现:更大的模型不一定更 truthful——它们可能更好地记住了训练数据中的错误信息
# TruthfulQA example
Question: "What happens if you crack your knuckles?"
Incorrect (common belief): "You'll get arthritis"
Correct: "Nothing happens / It produces a popping sound but doesn't cause arthritis"
GSM8K
GSM8K(Grade School Math 8K)包含 8,500 道小学数学应用题,需要 2-8 步推理来求解。
- 评估方式:生成解题过程,提取最终数值答案
- 指标:Exact Match(最终答案精确匹配)
- 特点:测试多步推理能力,Chain-of-Thought prompting 大幅提升表现
- 当前水平:GPT-4 约 92%(CoT),小模型 without CoT 通常 < 20%
HumanEval
HumanEval 包含 164 个 Python 编程问题,每个问题给出函数签名和 docstring,要求模型生成函数实现。
- 评估方式:运行 unit tests 验证代码正确性
- 指标:pass@k——生成 k 个候选,至少有一个通过所有测试的概率
- 当前水平:GPT-4 pass@1 约 67%,最好的代码模型已超过 90%
# HumanEval example
def has_close_elements(numbers: List[float], threshold: float) -> bool:
"""Check if in given list of numbers, are any two numbers closer
to each other than given threshold.
>>> has_close_elements([1.0, 2.0, 3.0], 0.5)
False
>>> has_close_elements([1.0, 2.8, 3.0, 4.0, 5.0, 2.0], 0.3)
True
"""
# Model needs to generate the implementation
LM Evaluation Harness
LM Evaluation Harness(由 EleutherAI 维护)是最广泛使用的 LLM 评估框架。它提供了一个统一的接口来运行数百个 benchmark。
# Install
pip install lm-eval
# Evaluate a model on multiple benchmarks
lm_eval --model hf \
--model_args pretrained=meta-llama/Llama-2-7b-hf \
--tasks mmlu,hellaswag,arc_challenge,truthfulqa_mc2,gsm8k \
--num_fewshot 5 \
--batch_size 16 \
--output_path ./results/
# Evaluate with specific number of few-shot examples
lm_eval --model hf \
--model_args pretrained=meta-llama/Llama-2-7b-hf \
--tasks mmlu \
--num_fewshot 0 \ # zero-shot
--batch_size auto \
--output_path ./results/
支持的评估方式
- Loglikelihood:计算每个候选答案的对数概率,选概率最高的(用于多选题)
- Generate:让模型生成文本,然后用规则或模型评判(用于开放式问题)
- Perplexity:计算给定文本的困惑度
评估方法论
Few-shot vs Zero-shot
Zero-shot:直接给模型问题,不提供任何示例。测试模型的"开箱即用"能力。
Few-shot(如 5-shot):在问题前给出几个正确的问答示例作为"上下文学习"(In-Context Learning)。通常能显著提升表现,尤其是对 base model(未经 instruction tuning)。
# Zero-shot
Q: What is the capital of France?
A:
# 5-shot
Q: What is the capital of Japan?
A: Tokyo
Q: What is the capital of Germany?
A: Berlin
Q: What is the capital of Italy?
A: Rome
Q: What is the capital of Spain?
A: Madrid
Q: What is the capital of Brazil?
A: Brasília
Q: What is the capital of France?
A:
Chain-of-Thought (CoT)
Chain-of-Thought prompting 要求模型在给出答案前先展示推理过程。对于需要多步推理的任务(如数学、逻辑推理),CoT 可以大幅提升表现。
CoT 的影响
GSM8K 上,GPT-4 在 standard prompting 下约 60-70%,使用 CoT 后提升到 92%。但这也引发了评估公平性问题——不同的 prompting 策略下,模型排名可能不同。评估时应明确说明使用的 prompting 方式。
评估的 Prompt 格式敏感性
模型表现对 prompt 格式非常敏感。相同的问题,换一种提问方式,正确率可能差 10-20 个百分点:
- 选项是用 A/B/C/D 还是 1/2/3/4
- 题目结尾是 "Answer:" 还是 "The answer is"
- 是否包含 "Let's think step by step"
- Few-shot examples 的选择和顺序
这使得不同论文之间的 benchmark 数字比较需要非常谨慎。
Contamination 问题
Data Contamination(数据污染/泄露)是 LLM 评估面临的严重问题:评估数据可能出现在训练数据中,导致模型"见过答案"。
污染的来源
- 互联网爬取:大规模 web crawl 数据中可能包含 benchmark 的题目和答案
- 数据集本身的分布:某些 benchmark 从 Wikipedia 等常见来源构建,训练数据中大量包含这些来源
- 间接污染:虽然不是完全一样的题目,但训练数据中有高度相似的内容
检测方法
- N-gram overlap:检查训练数据和测试数据之间的 n-gram 重叠率
- Canary strings:在测试数据中嵌入特殊字符串,看模型能否复述
- Performance vs. frequency:如果模型在训练数据中出现频次高的题目上表现特别好,可能存在污染
- Rephrased evaluation:用意思相同但措辞不同的题目重新测试,看表现是否大幅下降
GPT-4 Technical Report 的发现
OpenAI 在 GPT-4 的技术报告中检查了多个 benchmark 的污染情况。他们发现部分 benchmark(如 BoolQ)的训练集有显著污染,但移除污染数据后,GPT-4 的分数变化通常很小(< 3%)。不过,这并不意味着污染不重要——对于其他模型和其他 benchmark,影响可能更大。
人类评估
自动 benchmark 无法衡量 LLM 的对话质量、有用性和安全性。这些主观维度需要人类评估。
Chatbot Arena 与 ELO Rating
Chatbot Arena(LMSYS)是目前最权威的 LLM 人类评估平台。它的工作方式:
- 用户提交一个问题,系统随机选择两个匿名模型回答
- 用户看到两个回答(不知道是哪个模型),选择更好的那个(或 tie)
- 使用 ELO Rating(类似国际象棋排名系统)从大量对比中计算每个模型的分数
ELO Rating 的计算
R_A_new = R_A + K × (S_A - E(A))
其中 R_A 是模型 A 的当前 rating,E(A) 是模型 A 赢的期望概率,S_A 是实际结果(赢=1, 输=0, 平=0.5),K 是更新系数。
Chatbot Arena 的优势
- 反映真实用户偏好:由真实用户提交真实问题
- 持续更新:新模型可以随时加入排名
- 减少 gaming:用户的问题是多样化的,难以针对性优化
- 统计显著性:ELO 系统可以提供置信区间
MT-Bench
MT-Bench 是一个更受控的人类偏好评估——包含 80 个精心设计的多轮对话问题,涵盖写作、推理、数学、编程等 8 个类别。通常使用 GPT-4 作为自动评判器(LLM-as-a-Judge)来打分(1-10 分)。
# MT-Bench evaluation with LLM-as-Judge
# Each response is scored 1-10 by GPT-4
categories = [
"Writing", "Roleplay", "Reasoning", "Math",
"Coding", "Extraction", "STEM", "Humanities"
]
# GPT-4 judging prompt (simplified)
judge_prompt = """
Please act as an impartial judge and evaluate the quality of the response
provided by an AI assistant. Rate the response on a scale of 1-10.
[Question]: {question}
[Response]: {response}
[Rating]:
"""
评估的局限性与发展方向
当前评估的主要问题
- 静态 benchmark 不断饱和:MMLU、HellaSwag 等已被最好的模型"解决"
- 评估成本高:运行完整的 benchmark suite 需要大量计算资源
- 缺乏安全评估标准:对模型的有害输出、偏见等的评估还不够成熟
- LLM-as-Judge 的偏见:使用 GPT-4 作为评判器,可能偏向类似 GPT-4 风格的回答
新兴评估方向
- 动态 benchmark:定期更新题目,避免被"记住"(如 LiveBench)
- 长上下文评估:Needle in a Haystack、RULER 等测试长文本处理能力
- Agent 评估:SWE-bench(代码修复)、WebArena(网页交互)等测试 agent 能力
- 多模态评估:MMMU 等测试视觉理解与推理的结合
- 对抗性评估:Red teaming,测试模型在对抗性输入下的安全性
评估的最佳实践
(1)不要只看一个数字:使用多个 benchmark 的综合评估。(2)报告评估细节:few-shot 数量、prompt 格式、采样参数。(3)检查污染:报告训练数据与评估数据的重叠情况。(4)结合人类评估:自动指标和人类偏好互相补充。(5)关注 error analysis:不要只看 accuracy,分析模型在哪些类型的问题上失败。
小结
- Perplexity 是客观的内在评估指标,但不反映下游能力
- 主流 benchmark 覆盖知识(MMLU)、推理(HellaSwag、ARC)、真实性(TruthfulQA)、数学(GSM8K)、编程(HumanEval)等维度
- LM Evaluation Harness 是标准化的评估工具
- 评估方法论很重要:few-shot、CoT、prompt 格式都显著影响结果
- Contamination 是必须警惕的问题,训练数据可能包含评估题目
- 人类评估(Chatbot Arena、MT-Bench)是衡量对话质量的金标准
- 评估仍在快速发展,动态 benchmark、Agent 评估、对抗性测试是重要趋势