数据 第 12 讲 / 共 17 讲

第 12 讲:Evaluation 评估方法

训练一个语言模型之后,我们需要回答一个关键问题:这个模型到底有多好?这听起来简单,但实际上评估 LLM 是一个极其复杂的问题——语言模型能做的事情太多太杂,没有任何单一指标能全面衡量其能力。本讲将系统介绍 LLM 评估的方法论、主流 benchmark、以及评估中的常见陷阱。

为什么评估困难?

LLM 评估的困难源于几个根本性问题:

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 数据的预测能力。

PPL = exp(-1/N × Σ log P(x_i | x_{<i}))

直觉上,perplexity 可以理解为模型在每个 token 位置的"平均困惑程度"——模型越好,perplexity 越低。Perplexity 为 K 意味着模型在预测下一个 token 时,平均来说和从 K 个等概率选项中随机猜的效果相当。

Perplexity 的优势

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 道题。

# 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 个候选续写中选出最合理的一个。

ARC (AI2 Reasoning Challenge)

ARC 包含小学科学考试题,分为 Easy Set 和 Challenge Set。Challenge Set 专门选取简单检索方法无法解答的题目。

TruthfulQA

TruthfulQA 测试模型是否会复述常见的错误信息和迷信。它包含 817 个问题,涵盖健康、法律、金融、政治等领域的常见谬误。

# 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 步推理来求解。

HumanEval

HumanEval 包含 164 个 Python 编程问题,每个问题给出函数签名和 docstring,要求模型生成函数实现。

# 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/

支持的评估方式

评估方法论

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 个百分点:

这使得不同论文之间的 benchmark 数字比较需要非常谨慎。

Contamination 问题

Data Contamination(数据污染/泄露)是 LLM 评估面临的严重问题:评估数据可能出现在训练数据中,导致模型"见过答案"。

污染的来源

检测方法

  1. N-gram overlap:检查训练数据和测试数据之间的 n-gram 重叠率
  2. Canary strings:在测试数据中嵌入特殊字符串,看模型能否复述
  3. Performance vs. frequency:如果模型在训练数据中出现频次高的题目上表现特别好,可能存在污染
  4. 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 人类评估平台。它的工作方式:

  1. 用户提交一个问题,系统随机选择两个匿名模型回答
  2. 用户看到两个回答(不知道是哪个模型),选择更好的那个(或 tie)
  3. 使用 ELO Rating(类似国际象棋排名系统)从大量对比中计算每个模型的分数

ELO Rating 的计算

E(A) = 1 / (1 + 10^((R_B - R_A) / 400))
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 的优势

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]:
"""

评估的局限性与发展方向

当前评估的主要问题

新兴评估方向

评估的最佳实践

(1)不要只看一个数字:使用多个 benchmark 的综合评估。(2)报告评估细节:few-shot 数量、prompt 格式、采样参数。(3)检查污染:报告训练数据与评估数据的重叠情况。(4)结合人类评估:自动指标和人类偏好互相补充。(5)关注 error analysis:不要只看 accuracy,分析模型在哪些类型的问题上失败。

小结