小白也能看懂的大模型评估体系:给AI出一份“期末考卷“ 系列文章AI大模型知识体系 | 第四周·第三篇引言怎么知道模型好不好——给AI考试打分上一篇我们聊了对齐与红队测试知道了怎么让模型又乖又听话。但问题来了——你把模型训好了对齐也做了怎么证明它真的行这就好比一个学生说自己学得特别好你信吗不信。你得——考试大模型评估就是这么回事给模型出一份考卷看看它到底能考多少分。你说你GPT-4级别行来做做MMLU你说你代码能力爆表来写写HumanEval你说你数学无敌来算算GSM8K。但大模型评估又不像学校考试那么简单。学校考试有标准答案对就是对、错就是错。而大模型的输出往往是开放式的——你让它写一首诗写得好不好谁来定你让它回答一个问题答案可能不止一个怎么打分更离谱的是有些模型还会作弊——把考题偷偷背下来考试的时候直接默写分数虚高得离谱。今天我们就来彻底搞懂大模型评估体系考什么、怎么考、有哪些坑、以及怎么自己动手跑一次评测。一、大模型评估的三大维度能力、安全、对齐想象你在招聘一个员工你会从哪些方面考察他能力——他能不能干好这份工作专业能力安全——他会不会干坏事人品底线对齐——他愿不愿意按你的方式干价值观匹配大模型评估也是一模一样的三大维度┌─────────────────────────────────────────────────────────┐ │ 大模型评估体系 │ ├───────────────┬───────────────┬─────────────────────────┤ │ 能力评估 │ 安全评估 │ 对齐评估 │ ├───────────────┼───────────────┼─────────────────────────┤ │ · 知识储备 │ · 有害输出 │ · 指令遵循 │ │ · 推理能力 │ · 偏见歧视 │ · 人类偏好 │ │ · 代码能力 │ · 隐私泄露 │ · 诚实性 │ │ · 数学能力 │ · 越狱攻击 │ · 有用性 │ │ · 多语言 │ · 幻觉检测 │ · 无害性 │ └───────────────┴───────────────┴─────────────────────────┘维度生活类比核心问题代表性评测能力评估专业技能面试你能不能干MMLU、HumanEval、GSM8K安全评估背景调查 品行考核你会不会搞事ToxiGen、RealToxicityPrompts、红队测试对齐评估价值观面试 试用期你听不听话MT-Bench、AlpacaEval、Chatbot Arena上一篇我们已经聊过安全评估和对齐评估红队测试、RLHF等今天我们重点聊能力评估和综合评估方法——这是大模型评估的主战场。二、主流Benchmark详解五张王牌考卷Benchmark就是标准考卷。大模型圈子里有几个最著名的Benchmark几乎每家发新模型都要拿它们来秀肌肉。2.1 MMLU——全科会考MMLUMassive Multitask Language Understanding翻译过来就是大规模多任务语言理解。这就像高考的综合卷——涵盖57个学科从初等数学到大学法律从历史到计算机科学从医学到哲学考的就是模型的知识广度和理解深度。MMLU 学科分布部分 STEM 人文社科 其他专业领域 ┌──────┐ ┌──────────┐ ┌──────────┐ │ 数学 │ │ 历史 │ │ 法律 │ │ 物理 │ │ 哲学 │ │ 医学 │ │ 化学 │ │ 政治学 │ │ 会计 │ │ 生物 │ │ 经济学 │ │ 计算机科学│ │ 计算机│ │ 心理学 │ │ 工程学 │ └──────┘ └──────────┘ └──────────┘ 17门 21门 19门考试形式四选一选择题。每道题有A/B/C/D四个选项模型选对了得分选错了不得分。难度等级分为 elementary初级、high school高中、college大学、professional专业级四个难度。典型分数GPT-4 约86.4%Claude 3 Opus 约86.8%开源模型Llama-3-70B 约82.0%小模型通常在50-60%徘徊。2.2 HumanEval——编程上机考HumanEval是专门考代码能力的Benchmark由OpenAI在2021年发布。想象一下编程面试的上机考试——给你一个函数签名和文档描述你把函数体写出来然后跑测试用例全过了就算通过。考试形式164道Python编程题每道题给函数签名docstring模型补全函数体用单元测试验证正确性。# HumanEval 示例题目 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 # 模型需要补全这里的代码核心指标passk——k次尝试中至少通过一次的概率。最常用的是pass1一次写对率。典型分数GPT-4 pass1 约67%Claude 3.5 Sonnet 约92%CodeLlama-34B 约48%。2.3 GSM8K——小学数学应用题GSM8KGrade School Math 8K8500道小学数学应用题。别小看小学数学——对大模型来说这可比写代码还难。因为数学推理需要严格的逻辑链条错一步就全错。GSM8K 题目示例 Janet 的鸭子每天下 16 个蛋。 她每天早上吃 3 个做早餐 每天用 4 个烤松饼给朋友 剩下的每个卖 2 美元。 她每天赚多少钱 模型需要输出 每天剩余的蛋 16 - 3 - 4 9 每天赚的钱 9 × 2 18 美元考试形式模型需要给出最终数值答案同时输出推理过程Chain-of-Thought。典型分数GPT-4 约92%Claude 3 Opus 约95%Llama-3-8B 约80%。2.4 C-Eval——中国版MMLUC-Eval是中文大模型评测的标杆覆盖52个学科从初中到研究生级别专为中文场景设计。这就像中国高考——MMLU是美国高考C-Eval是中国高考考的知识体系和语言习惯完全不同。对比项MMLUC-Eval语言英文中文学科数5752题目数~15,000~13,948难度等级4级4级初中/高中/大学/研究生特色学科美国法律、西方哲学中国法律、马克思主义理论典型分数GPT-4 约68.7%ChatGLM3-6B 约51.2%Qwen-72B 约83.3%中文模型在中文评测上天然有优势。2.5 MT-Bench——开放问答辩论赛前面四个都是客观题——有标准答案对就是对错就是错。但大模型最核心的能力是开放域对话这怎么评MT-BenchMulti-Turn Benchmark就是专门评测多轮对话能力的。它包含80道多轮对话题覆盖8个领域写作、角色扮演、推理、数学、编程、信息提取、人文社科、自然科学。考试形式模型跟考官进行两轮对话然后由另一个大模型通常是GPT-4当裁判打分1-10分。MT-Bench 评测流程 ┌──────────┐ 第一轮对话 ┌──────────┐ │ 评测题目 │ ──────────────→ │ 被评模型 │ │ (问题1) │ ←────────────── │ 回答1 │ └──────────┘ └────┬─────┘ │ │ │ 第二轮对话追问 │ │ ──────────────────────────→ │ │ ←────────────────────────── │ │ │ ▼ ▼ ┌──────────┐ 评分请求 ┌──────────────┐ │ 问题12 │ ────────────→ │ GPT-4裁判 │ │ 回答12 │ ←──────────── │ 打1-10分 │ └──────────┘ └──────────────┘典型分数GPT-4 约9.0Claude 3 Opus 约8.8Llama-3-8B 约8.1。三、评估的坑数据污染、Benchmark泄露、刷榜你以为评测就是老老实实考试天真大模型圈子的考试作弊比学校里还离谱。3.1 数据污染——考前背答案数据污染是最普遍、最隐蔽的作弊方式。想象一个学生考试前偷偷把考卷看了一遍。虽然他不是故意作弊——可能只是在刷题的时候无意中做过了原题——但他的分数肯定虚高。大模型也是一样。训练数据来自互联网而很多Benchmark的题目也在互联网上公开着。模型在预训练时可能已经见过这些题目评测时自然表现超好。数据污染的典型路径 互联网数据 ──→ 预训练语料 ──→ 模型记住了考题 │ │ └──→ Benchmark题目也在互联网上 ──→ 评测时默写答案 分数虚高怎么检测常见方法有n-gram重叠检测看模型输出和训练数据是否有大段重复成员推断攻击判断某条数据是否在训练集中换题测试把题目改改表述看模型成绩是否断崖式下降3.2 Benchmark泄露——考卷直接流出比数据污染更恶劣的是Benchmark泄露——训练团队故意把评测集混进训练数据里。这就像老师把期末考试卷直接发给学生背然后考试的时候考满分说我教得好。真实案例2023年多个国产模型被发现在MMLU和C-Eval上分数异常偏高后来发现评测集数据混入了训练集一些模型在某个Benchmark上分数逆天但在实际使用中表现拉胯典型的刷榜行为3.3 Leaderboard刷榜——应试教育就算没有故意作弊过度追求Benchmark分数也会导致应试教育问题——模型变成了做题家只会做标准题遇到真实场景就不灵了。刷榜 vs 真实能力的差距 分数 │ │ ┌──────┐ │ │ 刷榜 │ ┌─────────┐ │ │ 分数 │ │ 真实能力 │ │ │ 虚高 │ │ 缓慢增长│ │ └──┬───┘ └────┬────┘ │ │ │ │ │ ← 差距越来越大 →│ │ │ │ └─────┴───────────────────┴──── 时间 过度优化Benchmark应对之道使用动态更新的Benchmark如Chatbot Arena题目不断变化多维度综合评测不要只看一个分数关注真实场景表现而非排行榜名次四、LLM-as-Judge用大模型评估大模型前面说了很多评测需要裁判来打分。但人工打分太贵、太慢怎么办让大模型当裁判这就是LLM-as-Judge的核心思路。4.1 为什么需要LLM当裁判想象你是一个作文阅卷老师一天要批改1000篇作文。每篇要读5分钟一天就要83个小时——根本不可能。大模型评测也是一样。MT-Bench有80道题每道题要评估两轮对话的质量人工评估一个人可能要一整天。而GPT-4当裁判几秒钟就搞定了。4.2 LLM-as-Judge的三种模式┌──────────────────────────────────────────────────────────┐ │ LLM-as-Judge 三种裁判模式 │ ├────────────────┬────────────────┬────────────────────────┤ │ 评分模式 │ 比较模式 │ 参考模式 │ ├────────────────┼────────────────┼────────────────────────┤ │ 给一个回答 │ 给两个回答 │ 给一个回答 │ │ 直接打1-10分 │ 判断哪个更好 │ 加上参考答案 │ │ │ │ 再打分 │ │ │ │ │ │ 优点简单 │ 优点更稳定 │ 优点更客观 │ │ 缺点不稳定 │ 缺点有位置 │ 缺点需要参考答案 │ │ │ 偏好 │ │ └────────────────┴────────────────┴────────────────────────┘4.3 实操用GPT-4当裁判import openai def llm_judge(question: str, answer: str, model: str gpt-4) - dict: 用大模型当裁判给回答打分 prompt f请作为一个专业的AI助手评估专家对以下回答进行评分。 ## 评估维度每项1-10分 1. 有用性Helpfulness回答是否真正解决了用户的问题 2. 相关性Relevance回答是否紧扣问题没有跑题 3. 准确性Accuracy回答中的事实是否正确 4. 深度Depth回答是否有足够的细节和深度 ## 用户问题 {question} ## AI回答 {answer} ## 请输出JSON格式 {{helpfulness: 分数, relevance: 分数, accuracy: 分数, depth: 分数, overall: 总分, reason: 评分理由}} response openai.chat.completions.create( modelmodel, messages[{role: user, content: prompt}], temperature0.0 # 温度为0保证评分一致性 ) return response.choices[0].message.content # 使用示例 question 请解释什么是量子纠缠用通俗的语言。 answer 量子纠缠就像一对魔法骰子不管它们相隔多远当你掷出一个6另一个也会立刻变成6。这种关联是瞬间的连爱因斯坦都觉得不可思议称之为鬼魅般的超距作用。 result llm_judge(question, answer) print(result)4.4 LLM-as-Judge的坑别以为用大模型当裁判就万事大吉了它也有自己的偏见偏见类型说明生活类比位置偏好倾向于给排在前面的回答更高分阅卷老师先看第一篇作文印象分偏高长度偏好倾向于给更长的回答更高分字数多的作文看起来更认真自我偏好GPT-4当裁判时倾向于给GPT-4的回答更高分老师给自己班的学生打分偏高语气偏好偏好自信、礼貌的表达方式说话好听的学生更容易得高分应对方法交换回答顺序取平均、控制长度差异、使用多个裁判模型投票。五、人工评估Chatbot Arena的Elo评分机制虽然LLM-as-Judge方便快捷但最靠谱的评估方式还是——让人来评。问题是人工评估太贵了。直到Chatbot Arena出现它用一种巧妙的方式解决了这个问题。5.1 Chatbot Arena是什么Chatbot Arena聊天机器人竞技场由LMSYS组织搭建是目前最权威的大模型评测平台。它的核心思路是——让用户免费当裁判。Chatbot Arena 的运作流程 ┌──────────┐ │ 用户 │ 输入一个任意问题 └────┬─────┘ │ ▼ ┌──────────────────────────────────┐ │ Arena 同时调用两个匿名模型 │ │ Model A: 答案是... │ │ Model B: 答案是... │ │ 用户不知道A和B分别是哪个模型 │ └────┬─────────────────────────────┘ │ ▼ ┌──────────────────────────────────┐ │ 用户投票A更好 / B更好 / 差不多 │ │ 也可以选都很差 │ └────┬─────────────────────────────┘ │ ▼ ┌──────────────────────────────────┐ │ 系统记录结果更新Elo评分 │ │ A赢了 → A的Elo上升B的下降 │ └──────────────────────────────────┘这就像盲品——你不知道杯子里装的是茅台还是二锅头只凭口感来评价。这样就不会被品牌名气影响判断。5.2 Elo评分机制Chatbot Arena用的是Elo评分系统——没错就是国际象棋、围棋用的那个评分系统。核心思想很简单赢了加分输了扣分但加分多少取决于对手的强弱。赢了强对手 → 加很多分赢了弱对手 → 加很少分输了弱对手 → 扣很多分输了强对手 → 扣很少分def calculate_elo(rating_a: float, rating_b: float, result: str, k: float 32.0) - tuple: 计算Elo评分变化 result: A表示A赢, B表示B赢, tie表示平局 # 计算预期胜率 expected_a 1.0 / (1.0 10 ** ((rating_b - rating_a) / 400)) expected_b 1.0 - expected_a # 根据实际结果计算得分 if result A: score_a, score_b 1.0, 0.0 elif result B: score_a, score_b 0.0, 1.0 else: # tie score_a, score_b 0.5, 0.5 # 更新评分 new_rating_a rating_a k * (score_a - expected_a) new_rating_b rating_b k * (score_b - expected_b) return round(new_rating_a), round(new_rating_b) # 示例GPT-4 (Elo1250) vs Llama-3-8B (Elo1050) new_a, new_b calculate_elo(1250, 1050, A) # GPT-4赢了 print(fGPT-4: {1250} → {new_a} (强队赢弱队加很少分)) print(fLlama-3-8B: {1050} → {new_b} (弱队输强队扣很少分)) # 反过来Llama-3-8B赢了GPT-4爆冷 new_a, new_b calculate_elo(1250, 1050, B) print(fGPT-4: {1250} → {new_a} (强队输弱队扣很多分)) print(fLlama-3-8B: {1050} → {new_b} (弱队赢强队加很多分))输出GPT-4: 1250 → 1251 (强队赢弱队加很少分) Llama-3-8B: 1050 → 1049 (弱队输强队扣很少分) GPT-4: 1250 → 1229 (强队输弱队扣很多分) Llama-3-8B: 1050 → 1071 (弱队赢强队加很多分)5.3 为什么Chatbot Arena最靠谱优势说明盲测用户不知道模型身份消除品牌偏见真实问题用户问的是真实场景的问题不是精心设计的考题动态更新新模型随时加入排行榜实时变化大规模数百万用户参与统计显著性极高难以作弊模型无法预知用户会问什么截至2025年Chatbot Arena已累计超过1000万次人类投票是大模型评测的金标准。六、实操用lm-evaluation-harness跑一次评测说了这么多理论是时候动手了我们来用lm-evaluation-harnessEleutherAI开源的评测框架跑一次真实的Benchmark评测。6.1 安装# 克隆仓库 git clone https://github.com/EleutherAI/lm-evaluation-harness.git cd lm-evaluation-harness # 安装推荐使用pip pip install -e .6.2 跑一次GSM8K评测# run_eval.py - 用lm-eval跑GSM8K评测 import subprocess import json def run_gsm8k_evaluation(model_name: str, model_args: str): 运行GSM8K评测 model_name: 模型名称用于记录 model_args: 模型参数如路径、dtype等 cmd [ lm_eval, --model, hf, # 使用HuggingFace模型 --model_args, model_args, --tasks, gsm8k, # 评测GSM8K --num_fewshot, 8, # 8-shot给8个示例 --batch_size, 8, # 批量大小 --output_path, f./results/{model_name}, --log_samples # 保存每个样本的输出 ] print(f开始评测 {model_name} ...) print(f命令{ .join(cmd)}) result subprocess.run(cmd, capture_outputTrue, textTrue) if result.returncode 0: print(评测完成) print(result.stdout[-2000:]) # 打印最后部分输出 else: print(评测出错) print(result.stderr) # 示例1评测HuggingFace上的开源模型 run_gsm8k_evaluation( model_namellama3-8b, model_argspretrainedmeta-llama/Meta-Llama-3-8B,dtypebfloat16 ) # 示例2评测本地模型 run_gsm8k_evaluation( model_namemy-model, model_argspretrained./my-finetuned-model,dtypefloat16 )6.3 一次跑多个Benchmark# run_multi_bench.py - 多维度综合评测 def run_comprehensive_eval(model_args: str, output_name: str): 一次性跑多个Benchmark全面评估模型能力 # 定义评测任务组 task_groups { 知识理解: mmlu, # 全科知识 数学推理: gsm8k, # 小学数学 代码能力: humaneval, # Python编程 中文能力: ceval, # 中文综合 } results {} for category, task_name in task_groups.items(): print(f\n{*50}) print(f正在评测{category} ({task_name})) print(f{*50}) cmd [ lm_eval, --model, hf, --model_args, model_args, --tasks, task_name, --num_fewshot, 5, --batch_size, auto, --output_path, f./results/{output_name}, --log_samples ] result subprocess.run(cmd, capture_outputTrue, textTrue) results[category] 完成 if result.returncode 0 else 失败 print(f\n{*50}) print(评测汇总) print(f{*50}) for cat, status in results.items(): print(f {cat}: {status}) return results # 运行综合评测 run_comprehensive_eval( model_argspretrainedQwen/Qwen2-7B,dtypebfloat16, output_nameqwen2-7b-comprehensive )6.4 解读评测结果评测完成后结果会以JSON格式保存。关键指标{ results: { gsm8k: { acc: 0.796, // 准确率 79.6% acc_norm: 0.796, // 归一化准确率 }, mmlu: { acc: 0.628, // 总体准确率 62.8% acc_stem: 0.581, // STEM学科准确率 acc_humanities: 0.683, // 人文学科准确率 } }, configs: { model: Qwen/Qwen2-7B, num_fewshot: 5, batch_size: auto } }怎么看结果指标优秀良好一般较差MMLU (5-shot)80%65-80%50-65%50%GSM8K (8-shot)85%70-85%50-70%50%HumanEval (0-shot)70%50-70%30-50%30%C-Eval (5-shot)75%55-75%40-55%40%七、评估体系全景图一张图看懂大模型怎么考试┌─────────────────────────────────────────────────────────────────┐ │ 大模型评估体系全景 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 自动化Benchmark评测 │ │ │ │ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ │ │ │ │ │ MMLU │ │Human │ │GSM8K │ │C-Eval│ │HEval │ ... │ │ │ │ └──┬───┘ │Eval │ └──┬───┘ └──┬───┘ └──┬───┘ │ │ │ │ └─────┴──┬───┴────┴────────┴────────┘ │ │ │ │ ▼ │ │ │ │ lm-evaluation-harness / OpenCompass │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ LLM-as-Judge 评估 │ │ │ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │ │ │ │ 评分模式 │ │ 比较模式 │ │ 参考模式 │ │ │ │ │ └──────────┘ └──────────┘ └──────────┘ │ │ │ │ 裁判模型GPT-4 / Claude / 自研模型 │ │ │ │ 代表MT-Bench、AlpacaEval、Arena-Hard │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ │ ▼ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 人工评估 │ │ │ │ ┌──────────────────────────────────────────────────┐ │ │ │ │ │ Chatbot Arena盲测 Elo评分 │ │ │ │ │ │ 1000万 人类投票最权威的排行榜 │ │ │ │ │ └──────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ │ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ ⚠️ 评估的三大坑数据污染 | Benchmark泄露 | 刷榜 │ │ │ └─────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────────┘八、总结与下篇预告今天我们聊了大模型评估体系核心要点三大维度能力评估能不能干、安全评估会不会搞事、对齐评估听不听话五大BenchmarkMMLU全科会考、HumanEval编程上机、GSM8K数学应用题、C-Eval中文高考、MT-Bench开放问答三大坑数据污染背答案、Benchmark泄露偷考卷、刷榜应试教育LLM-as-Judge用大模型当裁判方便但有偏见Chatbot Arena盲测Elo评分目前最靠谱的评测方式实操用lm-evaluation-harness跑评测几行命令搞定一句话总结评测不是目的是手段。别只看排行榜分数要看模型在真实场景中的表现。就像高考状元不一定是最好的员工Benchmark第一也不一定是最好的模型。下篇预告我们即将进入一个全新的领域——多模态大模型。前面聊的都是只会说话的模型下一篇我们聊聊既能看图、又能听音、还能说话的多模态大模型。从CLIP到GPT-4V从视觉理解到跨模态生成带你理解AI如何睁开眼睛看世界。系列文章AI大模型知识体系 | 第四周·第三篇