课程0基础Agent开发课 / LLM基础 / 模型评估基准解读-MMLU-HumanEval-Chatbot-Arena
— 18 min read

模型评估基准解读-MMLU-HumanEval-Chatbot-Arena

> **[进阶选读]** 本文适合想深入理解 LLM 内部机制的读者。看懂 AI benchmark 数据,才能从营销噱头中找到真实有用的模型选型信息。路径 A 的读者可以跳过。

模型评估基准解读:MMLU、HumanEval 与 Chatbot Arena

[进阶选读] 本文适合想深入理解 LLM 内部机制的读者。看懂 AI benchmark 数据,才能从营销噱头中找到真实有用的模型选型信息。路径 A 的读者可以跳过。


"这个模型比那个模型强"——没有具体基准(Benchmark,评测基准,即用标准化题目和评分方式客观衡量模型能力的测试集)支撑,这句话没有意义。不同模型在不同任务上的表现差距可能超过 40 个百分点,"综合最强"的模型在你的具体场景里未必最优。

读懂主流评估基准,才能在模型选型时不被营销数字带偏。


1.1 为什么需要多个不同的基准:单一指标的局限

1.1.1 没有一个基准能衡量"全部能力"

在软件工程中,没有一个测试能覆盖所有场景。同样,没有一个基准能全面衡量 LLM 的所有能力。

主流 LLM 评估基准分类
图 6.16:主流 LLM 评估基准分类图——按知识理解、代码能力、数学推理、综合推理、人类偏好五个维度分组

为什么需要多个基准:

不同能力相对独立。MMLU 测知识广度,但高 MMLU 分数的模型不一定会写代码。HumanEval 测代码生成,但高分模型不一定擅长长文档推理。SWE-bench 测真实工程能力,但需要完全不同的能力组合(理解大型代码库 + 定位问题 + 生成修复补丁)。

基准有盲区。每个基准都有其设计偏见。MMLU 主要测知识记忆,对推理能力覆盖不足。HumanEval 的 164 道题被许多模型"背"过了(数据污染),不再能区分真实能力。Chatbot Arena 反映用户满意度,但用户偏好不等于客观正确性。

任务需求不同。你在选模型时关心的是"这个模型在我的具体场景下表现如何",而不是"它在所有场景的平均表现如何"。选对基准,才能找到对你最有用的模型。


1.2 为什么需要标准化评估

主观感受不靠谱。用户倾向于记住模型答对的情况,忘掉答错的;个人日常场景只是能力空间的一小部分;同一模型在不同 Prompt 下表现差距可达 30%;模型还可以靠表述风格让答案"看起来"更好,但正确率并没提高。

标准化评估基准靠固定题目、固定评分方式、大规模采样,提供相对客观的量化结果。


1.3 各类基准全景

LLM 评估基准

知识类

推理类

代码类

对话类

综合框架

MMLU
57学科知识

C-Eval
中文知识

ARC
科学推理

GSM8K
小学数学

MATH
竞赛数学

BBH
复杂推理

HumanEval
函数补全

MBPP
Python编程

SWE-bench
真实GitHub Issue

MT-Bench
多轮对话

Chatbot Arena
ELO人类评分

AlpacaEval
指令遵循

HELM
斯坦福综合

Open LLM Leaderboard
HuggingFace


1.4 知识类基准

1.4.1 MMLU(Massive Multitask Language Understanding)

发布: UC Berkeley,2020 年
规模: 57 个学科,约 14,000 道四选一选择题
覆盖范围: 数学、物理、化学、历史、法律、医学、经济、伦理……

python
# MMLU 题目示例
mmlu_example = {
    "question": "Which of the following is NOT a characteristic of common law?",
    "choices": [
        "A. It is based on judicial decisions",
        "B. It relies heavily on precedent",
        "C. It is codified in comprehensive statutes",  # 正确答案
        "D. It develops through court interpretations"
    ],
    "answer": "C",
    "subject": "professional_law"
}

# 评估方式:zero-shot 或 few-shot,选择概率最高的选项
# 分数 = 正确题数 / 总题数(随机基线 = 25%)

基准参考线:

  • 随机猜测:25%
  • 人类平均水平:~57%
  • 人类专家水平:~89%
  • GPT-4(5-shot):86.4%
  • 顶级模型(2025):90%+

适用场景: 比较模型的广泛知识覆盖度,适合需要跨领域知识的应用(医疗助手、教育工具、法律问答)。

1.4.2 C-Eval:中文版 MMLU

规模: 52 个学科,约 13,000 道题(含高考、研究生入学考试内容)

C-Eval 特别适合评估模型对中文专业知识的掌握程度,尤其是需要了解中国法律、历史、文化的应用场景。英文模型在 C-Eval 上的表现通常比 MMLU 低 10-20 个百分点。


1.5 推理类基准

1.5.1 GSM8K(Grade School Math 8K)

发布: OpenAI,2021 年
规模: 8,500 道小学数学应用题
特点: 需要多步数值推理,答案唯一,可自动验证

python
# GSM8K 题目示例
gsm8k_example = {
    "question": "Janet 每天早上收集 16 个鸡蛋,自己吃掉 3 个,用 4 个做蛋糕。"
                "剩余的鸡蛋她每个卖 2 美元。她每天能赚多少钱?",
    "answer": "18",
    "solution": "每天收集 16 个 → 吃掉 3 个 → 剩 13 个 → 做蛋糕用 4 个 → 剩 9 个 → "
                "9 × 2 = 18 美元"
}

# 评估方式:pass@1(生成一次答案,提取最终数值与答案对比)
# 推理模型 vs 普通 LLM 在此基准上差距最小(小学题普通 LLM 已接近饱和)

GSM8K 已趋近饱和(顶级模型 95%+),逐渐被 MATH 和 AIME 替代作为推理能力区分指标。

1.5.2 MATH(Competition Mathematics)

规模: 12,500 道竞赛数学题,分 7 个难度级别
特点: 包含微积分、数论、概率论、组合数学,答案需精确匹配 LaTeX 格式

python
# MATH 难度分级(Level 1-5)
math_example_hard = {
    "problem": "对所有正整数 n,证明 ∑_{k=1}^{n} k³ = (∑_{k=1}^{n} k)²",
    "level": "Level 4",
    "type": "Number Theory",
    "solution": "用数学归纳法:基础步骤 n=1,1=1 成立;..."
}

# 参考分数:
# GPT-4(2023):42.5%(Level 5 题目约 25%)
# o1(2024):~83%
# DeepSeek-R1:~97.3%(AIME 2024 接近人类竞赛选手)

1.5.3 ARC(AI2 Reasoning Challenge)

分为 ARC-Easy 和 ARC-Challenge 两个子集,题目来自小学至高中科学考试,ARC-Challenge 中的题目需要真正的推理而非单纯记忆。


1.6 代码类基准

1.6.1 HumanEval

发布: OpenAI,2021 年
规模: 164 道 Python 函数补全题
评估方式: pass@k——生成 k 个答案,只要有 1 个通过所有单元测试即算正确

python
# HumanEval 题目示例(problem_id=1)
humaneval_example = {
    "task_id": "HumanEval/1",
    "prompt": '''def separate_paren_groups(paren_string: str) -> List[str]:
    """ 输入一个包含多组括号的字符串(括号组之间用空格分隔),
    返回一个列表,其中每个元素是一组独立的括号组(保持原始顺序)。
    >>> separate_paren_groups('( ) (( )) (( )( ))')
    ['()', '(())', '(()())']
    """
''',
    "test": "assert separate_paren_groups('( ) (( )) (( )( ))') == ['()', '(())', '(()())']",
    "entry_point": "separate_paren_groups"
}

# 用 lm-evaluation-harness 或 evalplus 评估
# evalplus 是 HumanEval 的增强版(HumanEval+),测试用例更多,防止"投机取巧"

注意: HumanEval 的 164 道题被许多模型的训练数据污染,EvalPlus(HumanEval+)添加了额外测试用例,数据污染模型的分数会大幅下降。

1.6.2 SWE-bench:最接近真实的代码评估

规模: 来自 12 个真实 GitHub 仓库的 2,294 个 Issue(含修复 PR)
任务: 给定代码仓库和 Issue 描述,模型需要生成能通过对应 PR 单元测试的代码修改

bash
# SWE-bench 评估流程
# 1. 模型读取仓库代码 + Issue 描述
# 2. 模型输出 git patch(代码修改)
# 3. 自动化环境执行修改后的测试套件
# 4. 通过率 = 通过测试的 Issue 数 / 总 Issue 数

# SWE-bench Verified(500题子集,人工验证确实可解)参考分数:
# GPT-4 Turbo(2024 初):~3%
# Claude 3.5 Sonnet(2024 年 6 月):~49%
# Claude 3.7 Sonnet(2025 年 2 月):~62%
# Claude Opus 4.6(2025 年):~80.9%
# MiniMax M2.5(2026 年 2 月):~80.2%
# 顶级系统(截至 2026 年 3 月):80%+

SWE-bench 是目前最能反映"真实编程能力"的基准,因为它要求模型理解大型代码库上下文,而非仅写出孤立的函数。


1.7 对话类基准

1.7.1 MT-Bench(Multi-Turn Benchmark)

发布: LMSys,2023 年
规模: 80 道多轮对话题,8 个类别(写作、角色扮演、推理、数学、代码、知识提取、STEM、人文)
评估方式: 用 GPT-4 对每个回答打 1-10 分(LLM-as-Judge)

python
# MT-Bench 第一轮和第二轮的关联性示例
mt_bench_example = {
    "turn_1": "写一首关于四季变换的诗,用 AABB 押韵方式",
    "turn_2": "现在将这首诗改写成散文,保留原有意象但去掉押韵",
    # 评估重点:模型是否真正理解并延续了第一轮的上下文
}

# MT-Bench 的局限:
# - 80 题样本量小,方差大
# - GPT-4 评分存在偏向(倾向于更长、更正式的回答)
# - 随着模型快速迭代,题目难度已不足以区分顶级模型

1.7.2 Chatbot Arena:人类 ELO 评分系统

发布: UC Berkeley LMSys,2023 年
机制: 真实用户发送相同问题给两个匿名模型,选择更好的回答,基于结果更新 ELO 分数

code
ELO 评分系统(来自国际象棋):
- 如果低分模型赢了高分模型,低分模型获得更多分数
- 如果高分模型赢了低分模型,高分模型获得较少分数
- 经过足够多的对战后,排名收敛为稳定的能力排序

优势: 最接近"真实用户满意度",覆盖数百万次真实使用场景,样本量远超其他基准。

局限:

  • 用户偏好不等于客观正确性(更流畅的错误答案可能击败更准确的简单答案)
  • 不同用户群体的任务偏好影响排名(研究者 vs 普通用户 vs 开发者)

1.8 综合评估框架

1.8.1 HELM(Holistic Evaluation of Language Models)

发布: 斯坦福 CRFM,2022 年

HELM 的理念是同时测量多个维度,而非只看准确率:

评估维度 含义
准确率(Accuracy) 核心任务正确性
校准性(Calibration) 置信度与正确率的一致性
鲁棒性(Robustness) 对输入细微变化的稳定性
公平性(Fairness) 对不同群体的一致表现
偏见(Bias) 刻板印象和歧视性输出
毒性(Toxicity) 有害内容生成率
效率(Efficiency) 推理成本

1.9 如何读懂排行榜

1.9.1 关键问题 1:基准污染(Benchmark Contamination)

训练数据中包含测试题目及答案,会导致分数虚高。这是当前 LLM 评估面临的最严重问题之一。

python
# 污染检测的常用方法:n-gram 重叠度检测
from collections import Counter

def ngram_overlap_check(training_data: str, benchmark_question: str, n=8):
    """
    检测 benchmark 题目是否出现在训练数据中。
    n=8 意味着连续 8 个词的序列匹配即可能是污染。
    """
    def get_ngrams(text, n):
        tokens = text.lower().split()
        return Counter([' '.join(tokens[i:i+n]) for i in range(len(tokens)-n+1)])

    train_ngrams = get_ngrams(training_data, n)
    bench_ngrams = get_ngrams(benchmark_question, n)

    overlap = sum((train_ngrams & bench_ngrams).values())
    total = sum(bench_ngrams.values())

    contamination_ratio = overlap / total if total > 0 else 0
    return contamination_ratio

# 一般认为 contamination_ratio > 0.1 就存在显著污染风险

实际案例: 2024 年 GSM8K 几乎所有主流模型都有严重污染嫌疑,这也是其逐渐被 MATH 和 AIME 替代的原因。

1.9.2 关键问题 2:榜上第一 ≠ 你的任务最优

python
# 根据任务类型选择参考基准的实践指南
task_benchmark_mapping = {
    # 任务类型: [首选基准, 次选基准]
    "中文对话助手": ["C-Eval", "MT-Bench(中文)", "Chatbot Arena"],
    "代码补全/生成": ["HumanEval+", "MBPP", "SWE-bench"],
    "数学/科学辅导": ["MATH", "MMLU(STEM)", "GSM8K"],
    "法律/医疗文档": ["MMLU(专业法律/医学)", "MedQA"],
    "长文档分析": ["SCROLLS", "LongBench", "NarrativeQA"],
    "多模态任务": ["MMMU", "MMBench"],
    "指令遵循": ["IFEval", "AlpacaEval 2.0"],
    "安全性评估": ["ToxiGen", "BBQ", "WinoBias"],
}

# 正确的选模型流程:
# 1. 确定你的核心任务类型
# 2. 找到最接近该任务的基准
# 3. 只看该基准上的分数
# 4. 在该基准 top-3 的模型上做小规模真实数据测试
# 5. 最终决策

1.9.3 关键问题 3:看评估方式,不只看分数

相同基准,不同评估方式可能产生 10-20% 的分数差距:

评估配置 含义 适用判断
0-shot 无示例,直接回答(zero-shot,零样本) 测试真实泛化能力
5-shot 给 5 个示例再回答(few-shot,少样本,在 Prompt 里先给几个例子,模型参照例子作答) 测试上下文学习能力
Chain-of-Thought(CoT) 要求展示推理步骤 测试推理能力上限
pass@1 生成 1 次,判断是否正确 测试典型使用场景
pass@10 生成 10 次,至少 1 次正确 测试能力上界

1.10 实战:用 lm-evaluation-harness 跑本地评估

bash
# 安装 lm-evaluation-harness(Eleuther AI 开源评估框架)
pip install lm-eval

# 在本地模型上运行 GSM8K 评估(8-shot CoT)
lm_eval --model hf \
    --model_args pretrained=Qwen/Qwen2.5-7B-Instruct \
    --tasks gsm8k \
    --num_fewshot 8 \
    --batch_size 4 \
    --output_path ./results/

# 运行 MMLU 评估(5-shot)
lm_eval --model hf \
    --model_args pretrained=Qwen/Qwen2.5-7B-Instruct \
    --tasks mmlu \
    --num_fewshot 5 \
    --batch_size 2 \
    --output_path ./results/

# 运行多个基准并输出对比报告
lm_eval --model hf \
    --model_args pretrained=Qwen/Qwen2.5-7B-Instruct \
    --tasks mmlu,gsm8k,hellaswag,arc_challenge \
    --num_fewshot 0 \
    --batch_size auto \
    --output_path ./results/ \
    --log_samples  # 保存每道题的详细输出,用于后续分析
python
# 解析评估结果
import json
import os

def parse_eval_results(results_dir: str):
    """读取 lm-evaluation-harness 的 JSON 结果并格式化输出。"""
    result_files = [f for f in os.listdir(results_dir) if f.endswith('.json')]

    for file in result_files:
        with open(os.path.join(results_dir, file)) as f:
            data = json.load(f)

        model_name = data['config']['model_args']
        results = data['results']

        print(f"\n模型: {model_name}")
        print("-" * 50)
        for task, metrics in results.items():
            # 不同任务的主要指标名称不同
            acc = metrics.get('acc,none') or metrics.get('acc_norm,none') or metrics.get('exact_match,none')
            if acc is not None:
                print(f"  {task}: {acc:.4f} ({acc*100:.1f}%)")

# 调用
parse_eval_results("./results/")

1.11 构建自定义评估集

对于特定业务场景,标准基准可能远不如自定义评估集有价值:

python
import json
from typing import List, Dict

def create_domain_benchmark(examples: List[Dict]) -> Dict:
    """
    创建业务场景评估集的最小结构。
    每道题包含:问题、标准答案(或评分维度)、评分方式。
    """
    benchmark = {
        "name": "domain_specific_eval_v1",
        "description": "针对特定业务场景的评估集",
        "metrics": ["accuracy", "format_compliance", "safety"],
        "examples": []
    }

    for ex in examples:
        benchmark["examples"].append({
            "id": ex["id"],
            "input": ex["question"],
            "reference": ex["answer"],
            # 对于开放式问题,可以定义评分维度而非精确答案
            "rubric": ex.get("rubric", {
                "correctness": "答案是否事实正确",
                "completeness": "是否覆盖关键点",
                "format": "是否符合预期格式"
            }),
            # 指定评估方式:exact_match / llm_judge / regex
            "eval_method": ex.get("eval_method", "llm_judge")
        })

    return benchmark

# 实践建议:
# - 最少 50 道题才有统计意义
# - 人工标注 golden answer,不要用模型输出作为标准
# - 定期更新(模型更新后测试数据可能被污染)
# - 同时包含"模型应该能做到"和"模型不应该做到"的测试用例(安全测试)

1.12 小结

基准 能力维度 题数 评分方式 适合判断
MMLU 广泛知识 14K 自动(选择题) 跨领域知识应用
C-Eval 中文知识 13K 自动(选择题) 中文专业场景
GSM8K 基础数学推理 8.5K 自动(数值匹配) 简单数学(已饱和)
MATH 竞赛数学推理 12.5K 自动(LaTeX 匹配) 高难度推理能力
HumanEval+ 代码生成 164+ 自动(单元测试) 代码补全能力
SWE-bench 真实工程代码 2.3K 自动(测试套件) 软件工程能力
MT-Bench 多轮对话 80 LLM-as-Judge 对话跟随能力
Chatbot Arena 用户满意度 数百万 人类 ELO 真实用户偏好
HELM 多维度综合 多种 多种 全面能力评估

使用基准的正确姿势:不要寻找"综合最强"的模型,而是找到在你的任务类型对应基准上表现最优的模型,再通过小规模真实数据测试做最终验证。任何声称"全面第一"的模型宣传都值得审慎对待。

本页目录