HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于

模型评测是怎么回事

训练完模型,怎么知道好不好?靠评测。

评测是大模型领域非常重要但又很复杂的事。这篇讲清楚评测的基本概念和方法。


为什么需要评测

对比模型

「我们的模型比 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

要关注的点

  1. 和基线对比:比 GPT-4 高多少不重要,关键看用的是不是同样的评测设置
  2. 多个 benchmark:只看一个 benchmark 不全面
  3. 分类别分数:总分高但某类别低,说明有短板
  4. 是否开源评测代码:能复现才可信

常见的坑

  • 「超越 GPT-4」:可能只是某一个 benchmark 超了
  • 只报好看的分数,不报差的
  • 评测设置不一致,没法比较

小结

模型评测的核心知识:

为什么难:

  • 能力维度多
  • 主观性强
  • 容易作弊
  • 需要持续更新

评测类型:

  • 客观评测:有标准答案
  • 主观评测:人工打分
  • LLM-as-Judge:用模型评模型

关键指标:

  • Accuracy:准确率
  • BLEU/ROUGE:文本相似度
  • Pass@k:代码生成
  • Elo:对战排名

注意事项:

  • prompt 格式
  • few-shot 数量
  • 数据污染
  • 评测设置要一致

下一篇详细介绍常见的 Benchmark:MMLU、HumanEval、GSM8K 等。