LLM 评测体系:从 MMLU 到自建 Eval——「模型好不好」怎么科学回答

· 约 6 分钟 ·
本文目录(11 节)

比较两个模型时,公开榜单可以提供线索,却不能直接回答哪个更适合你的客服或论文检索任务。输入长度、语言、工具调用和错误代价都可能不同。这里把评测拆为公开基准阅读、裁判校准和任务测试集建设,让模型选型有可复查的依据。

前置阅读:建议先读 Prompt Engineering 实战、LLM 对齐技术。

公开基准:能力地图与阅读纪律

主流基准各测什么,一张表建立坐标系:

基准测什么现状
MMLU57 学科知识选择题饱和(头部模型 88%+),区分度下降
GPQA研究生级科学推理还有区分度,专家级难题
HumanEval/MBPP代码生成老牌但偏简单,SWE-bench 更真实
MATH/GSM8K数学推理GSM8K 已饱和,MATH 尚可
C-Eval/CMMLU中文知识中文场景必看
MT-Bench/Arena开放式对话质量人类偏好的代理

读榜单的四条纪律:

  1. 饱和的榜别看:大家都 90% 附近时,2 分差距是噪声不是能力。看还没饱和的(GPQA、前沿数学)。
  2. 警惕污染:基准题早就在互联网上了,训练数据「见过题」的模型分数虚高——MMLU 刷分的灰色地带。看「污染控制后」的复测(有些独立机构做)比官方分可信。
  3. 选择题 ≠ 生成能力:MMLU 测的是「选对」,你的场景是「写对」——生成质量要另外测。
  4. LMSYS Arena(人类对战投票)是当前最接近「真实好用」的公共信号:盲测两模型回答,真人投票——Elo 排名的生态位类似围棋 rating。

LLM-as-Judge:可扩展的裁判,带偏差的那种

开放式回答(摘要、对话、方案)没有标准答案,人工评太贵——让强模型(GPT-4o/Claude)按 rubric 打分是行业标配。但裁判自己有脾气:

  • 位置偏差:两个答案先后呈现,裁判偏向某一边(通常第一个或最后一个)。对策:交换位置各评一次取平均。
  • 长度偏差:偏爱更长的回答(长=看起来详细)。对策:rubric 里明确「不因长度加分」,或控制长度分布。
  • 自家人偏差:GPT-4 评 GPT-4 的答案偏高。对策:裁判模型与被评模型不同家族。
  • 字面匹配偏好:和参考答案字面像的分高,语义等价但措辞不同的吃亏。
JUDGE_PROMPT = """你是严格的评审。按以下标准给回答打分(1-5):
1. 事实准确性(权重最高)2. 完整性 3. 简洁性
注意:不因回答长短加分;只依据给定参考资料判断事实。

[问题] {question}
[参考资料] {context}
[回答] {answer}

先逐项给理由,最后一行输出 JSON: {{"score": N}}"""

校准是刚需:随机抽 50 条让人类专家同样打分,算人机一致率(Cohen’s κ 或简单一致率)——低于 70% 的裁判不能上岗,要么换模型要么改 rubric。裁判也要「持证上岗」。

自建 Eval:唯一回答得了「对我够不够好」的东西

建集:从真实流量里长出来

评估集三来源,按价值排:

  1. 线上真实 query log(分布最真实,抽样 100~300 条)
  2. 历史 badcase(每个坑都要有名字,防回归)
  3. 对抗构造(边界、刁钻、注入攻击——主动找茬)

每条的标配字段:输入、期望行为(不是唯一答案,是可接受的标准)、标签(场景/难度)、通过判定方式(规则/裁判/人工)。

判定:能自动化的别用眼看

任务类型判定方式
分类/提取精确匹配/F1,规则硬判
有参考答案的 QA语义相似度 + LLM 裁判
开放式生成LLM-as-Judge + rubric
代码跑测试用例(可执行评估,最硬)
格式合规JSON Schema 校验/正则
def run_eval(model_fn, eval_set, judge):
    results = []
    for case in eval_set:
        output = model_fn(case["input"])
        passed = judge(output, case)
        results.append({"id": case["id"], "passed": passed,
                        "output": output, "tags": case["tags"]})
    # 按标签分层报告:总分 + 各场景分 + badcase 清单
    return results

纪律:eval 的三条军规

  1. eval 集不许进训练数据——污染后所有分数都是自欺欺人。定期做 n-gram 重叠检查。
  2. 看分层不看总分:总分 90 分可能在「退款类」上全军覆没——按场景/难度切开的分数才有行动指导。
  3. 每次改动跑全量:prompt 改一行、模型换个版本、知识库更新——都可能引发回归。eval 进 CI,像单元测试一样成为发布门禁(MLOps 篇的延伸)。

评测驱动迭代:我的完整工作流

建 eval 集(100 条真实 query + 50 条 badcase + 30 条对抗)
   ↓ 每两周从线上 log 补充
改动(prompt/模型/检索)→ 全量跑 eval
   ↓
分层报告:总分变化 + 各场景变化 + 新增 badcase
   ↓
人工抽检 10%(校准自动判定)→ 通过 → 灰度上线
   ↓
线上指标(采纳率/重试率/人工介入率)回写 → 反哺 eval 集

离线 eval 是门槛,线上行为指标才是终审——两者矛盾时信线上,并检查 eval 哪里脱离了真实分布。

踩坑排查

现象原因解法
基准分高但业务表现差基准与你的任务不匹配自建 eval 为准,榜单只粗筛
裁判给分普遍偏高裁判模型太宽松/自家人偏差换裁判家族;rubric 加严格锚点示例
同一模型两次评测分数波动温度非零 + 样本小温度设 0;每题跑 3 次取多数;扩样本
eval 分数涨线上不涨eval 集偏离真实分布/被污染从线上 log 更新 eval;查污染
两模型对比结论随裁判而变裁判偏差双裁判 + 交换位置 + 人工校准子集

练习

  1. 选你的一个 LLM 应用,建 50 条 eval 集(含 10 条历史 badcase),定义每条的可接受标准。
  2. 实现一个 LLM 裁判:给 rubric,评 30 条输出,然后人工同样评一遍,算人机一致率——不达标就改 rubric 再来。
  3. 做位置偏差实验:同一对答案 AB 两种顺序各评 20 次,统计裁判的偏好分布。
  4. 对比两个模型(如 GPT-4o-mini vs Qwen)在你的 eval 集上的分层表现,写一份 300 字的选型建议。

面试常问

Q:MMLU 分数高说明什么?不说明什么? 说明:广泛的知识覆盖和选择题形式的理解力,底座训练的扎实程度。不说明:开放式生成质量、指令遵循、特定领域表现、安全性、延迟成本。MMLU 是「体检基础项」不是「岗位胜任力」——选人要看场景 eval。

Q:LLM-as-Judge 怎么做得可信? 四步:明确 rubric(每个分数档有具体描述和锚点示例);对抗已知偏差(换序、控长度、异家族裁判);人机校准(抽样人工复核,一致率达标才信任);双裁判/裁判团取共识。把裁判当「有偏但稳定的测量仪器」——定期校准,用其相对差而非绝对分。

Q:eval 集多大合适? 够检出你关心的效应量:要区分 5 个点的差距,二项分布下约需 300+ 样本;粗筛(10 个点差距)100 条够。分层后每层至少 20~30 条才有统计意义。质量 > 数量:100 条精心覆盖关键场景的 eval 胜过 1000 条随机堆砌。

Q:如何防 eval 污染? 训练侧:与训练语料做 n-gram/embedding 去重;使用侧:eval 集私有(不进公开 repo、不进 prompt 示例);时间维度:定期从最新线上数据补充新题(滚动 eval);检测侧:测「题目逐字出现时的表现 vs 同义改写后」——差异大说明靠背题。

Q:业务 eval 和公开基准冲突时信谁? 信业务 eval——公开基准测「平均能力」,你的业务是特定分布。但要检查:eval 是否太小(统计噪声)、是否有偏(只覆盖简单场景)、判定是否过松/过严。冲突本身是信息:说明你的场景与通用分布有结构差异,值得写进模型卡片。

相关阅读

评测是 LLM 工程的罗盘——没有它,所有「优化」都是布朗运动。先建 eval 再迭代,这个顺序值你项目一半的成败。

💬 评论

这套方案在哪一步卡住了?也欢迎补充你的实现方式或踩坑经验。

正在连接评论服务,首次访问可能需要几秒…