想象你走进一座巨大的考试中心,走廊两侧排列着 57 个考室,门牌上写着“高中化学”“大学数学”“经济学”“法学”“世界历史”“临床心理学”……推门一看,每张考桌上都摆着上百道四选一选择题。这不是人类的高考,而是一场专门给 AI 大模型举办的“综合知识大赛”。它的正式名字,叫作 MMLU(Massive Multitask Language Understanding,大规模多任务语言理解)。 这场大赛的规则很特别:每换一门学科,考官先给选手看 5 道例题——只展示提问格式和作答方式,例题的答案与正式得分无关。然后选手开始作答,最终所有学科的得分汇总成一个总平均分,登上排行榜。今天,无论是 GPT、Claude 还是各大开源模型,都要来这场 57 个考室的大赛里亮亮相。 这篇文章会带你完整看懂这场大赛:考卷怎么出、选手怎么作答、分数怎么算、哪里容易“作弊”、怎么帮忙提分,以及作为一名 AI 工程师,如何用这套规则为自己的模型做标准化“体检”。
掌握 MMLU 的评测原理,你就能科学地评估和对比大模型能力,为选型、训练和优化提供可靠依据——这是所有 AI 从业者的基本功。
目录
可视化演示
三步展示MMLU评测:57学科多选题评测机制(选最高概率)、基础/进阶/专业三级知识深度分类、以及数据污染挑战与记忆≠理解问题。
本节配有交互动效(进入视口后自动加载,约 3KB)。
多选题评测机制 57学科:文理工商医 四选一:选最高概率 指标:准确率Acc Acc = 正确数/总数 15508道题标准化评估。
概念初识:57 个考室的综合知识大赛
想象你走进一座巨大的考试中心,走廊两侧排列着 57 个考室,门牌写着高中化学、大学数学、经济学、法学、世界历史、临床心理学……推门一看,每张考桌上都摆着上百道四选一选择题。这不是人类的高考,而是一场给 AI 大模型举办的“综合知识大赛”,正式名称就叫 MMLU。
MMLU 全称是 Massive Multitask Language Understanding,由 Dan Hendrycks 等人在 2020 年提出。它的核心思想很朴素:要判断一个 AI 是不是“懂很多”,与其让专家主观打分,不如把它扔进 57 门学科的标准考卷,用统一规则考一遍。这里的“多任务”指的就是 57 个学科子任务,“知识理解”则强调不仅要记忆事实,还要能推理应用。
57 个学科被划分为四大学科群:STEM 类 21 科(大学数学、物理、化学、计算机科学等)、人文类 22 科(法学、哲学、世界历史等)、社会科学类 12 科(经济学、心理学、社会学等)、其他类 2 科。数据集共约 1.6 万道题,其中测试题约 1.4 万道。题目风格五花八门:有的是纯粹的事实回忆,有的需要多步计算,有的则是伦理困境或法律条款的应用。这种“广撒网”的设计,让 MMLU 成为衡量大模型通识能力的一面镜子。
简单说,想看一个 AI 是不是“上知天文、下知地理”,带它来这场 57 个考室的综合知识大赛走一遭就知道了。
评测机制:考官怎样保证公平
大赛规则有个特别之处:每走进一个考室,监考老师会先在黑板上贴出 5 道例题,让考生看清“提问长什么样、答案怎么填”,几分钟后擦掉,再发正式考卷。例题和正式题目严格分开——例题只示范格式,答案不算进得分。
这种“先看例、再作答”的机制,在 AI 评测里叫 few-shot(少样本提示)。MMLU 默认采用 5-shot,即从每个学科的开发集(dev 集)中抽取 5 道带标准答案的题目,拼到模型输入的最前面。之所以必须有这一步,是因为大模型的能力高度依赖输入格式:不给示例时,它常常不知道“你要我选字母还是写句子”。
正式作答只允许输出一个字母(A/B/C/D),判卷时拿着标准答案逐题比对,统计答对占比,这就是该学科的准确率(Accuracy)。计算公式如下:
就这样,考官用“统一例题 + 四选一 + 标准答案”的规则,保证 57 个考室的判卷标准完全一致,任何两个模型都能在同一把尺子下比较。
- 单题判定将模型预测的答案 \(\hat{y}_i\) 与标准答案 \(y_i\) 比对,一致则指示函数取 1,否则取 0,相当于给每道题画勾或画叉。
- 累计答对题数把每一题的判定结果全部相加,得到这张考卷上的答对总数。
- 除以总题数用答对总数除以题量 \(N\),得到 0 到 1 的准确率,再乘以 100 就是平时看到的百分制成绩。
核心原理:AI 是怎样“作答”的
AI 考生在考场上并不像人类那样先读懂题目再推理,它的本质是一个“文字接龙选手”:给一段话,它预测下一个词。遇到选择题时,它把四个选项分别当成“接龙的下半句”,看哪句接得最顺、概率最高,就选哪句。
具体来说,大语言模型是自回归模型——每生成一个词,都要基于已经生成的全部内容。评测时,把 5 道例题、题干、以及某个选项拼接成一个完整输入,让模型计算“把这个选项当作后续文字”的概率。四个选项各算一次,概率最高者胜出。记拼接后的上下文为 \(x\)(例题 + 题干),答案选择规则如下:
那么,一段选项文字的概率 \(P_\theta(c \mid x)\) 又是怎么算出来的?模型不是把“氧气”两个字当整体念出来的,而是一个词一个词地接:先预测第一个字,再基于第一个字预测第二个字。假设选项 \(c\) 由 \(T_c\) 个词组成,整段概率等于每一步概率的连乘:
一句话总结:AI 不作弊、不心算,它只是安静地把四个选项“念”了一遍,谁念得最顺,就选了谁。例题虽然也在上下文里,但其中没有任何一道正式题的答案,所以是“开考前的样例教学”,而不是“泄题”。
- 单步词预测\(P_\theta(w_t \mid x, w_{<t})\) 表示模型已经看过上下文 \(x\) 和前 \(t-1\) 个词,预测第 \(t\) 个词是谁。
- 连乘得到整句概率把从第 1 步到第 \(T_c\) 步的预测概率全部相乘,得到整个选项作为续写的概率。
- 改用对数求和概率连乘会让数值极小,工程实现中改为对数相加,排序结果不变。
性能特性:成绩单上的规律
大赛办了几届,考官们总结出三条规律:第一,选手“体量”越大(模型参数越多),平均分越高;第二,几乎没有“全科状元”,高分选手普遍偏科;第三,曾经连及格都难的年代已经过去,顶尖模型开始逼近人类专家。
这些规律在真实数据上非常直观。随机乱猜的期望准确率是 25%;GPT-3 时代最大的 1750 亿参数模型,5-shot 也只有 43.9%;而 GPT-4 做到了约 86%,人类专家平均水平约 89.8%。同时,0-shot(不给例题)通常比 5-shot 低 3 到 8 个百分点,说明示例确实在帮模型理解答题格式。模型内部还有一个常见现象:人文社科类学科随参数增长的提升最明显,因为这类学科依赖知识记忆;而在物理、数学等需要多步推理的学科上提升缓慢——MMLU 不只是“背多分”,它确实测出了推理瓶颈。
官方总分采用宏平均(macro average)而不是把所有题目揉在一起算。公式如下:
所以,看成绩单不能只盯总分。一科一票的宏平均规则,让 57 个学科在总成绩里拥有相等的发言权——这既是公平,也在提醒我们:模型的短板就藏在分科数字里。
- 分科打分\(\text{Acc}_s\) 表示第 \(s\) 个学科按上一节公式算出的准确率,57 个学科各有各的成绩。
- 汇总求和把 57 个学科的准确率全部相加。
- 等权平均除以学科总数 \(S = 57\),每科权重相同、与题量无关,这就是“宏平均”。
实践流程:亲自办一场比赛
想给自家模型也办一场这样的比赛,流程和运动会差不多:准备考卷、安排考场、组织考试、公布成绩。作为 AI 工程师,你把“考卷”从开源数据仓库取回来,把“考场”搭在 GPU 服务器上,让模型一份一份地答卷,最后汇总成榜。
具体分五步。第一步,获取数据:从 HuggingFace 拉取 cais/mmlu 数据集,每个学科包含 train(训练)、dev(开发)、test(测试)三个划分,正式成绩只认 test。第二步,构造 prompt:从 dev 集抽 5 道例题拼在题干前,输出格式强制为“A. 选项文本 B. 选项文本……”,让模型只输出一个字母。第三步,批量推理:对每题构造 4 个候选输入(题干分别接上四个选项),计算各自的续写概率,取最高者为答案。第四步,判分:与标准答案逐题比对,按学科统计准确率。第五步,出榜:输出 57 科成绩表与宏平均分,必要时画雷达图直观展示。
整套流程的本质,是把“办比赛”的每一步自动化,让它变成一套可复现、可比较的标准化学力测试。无论模型大小、无论谁来做,只要规则一致,分数就可以横着比。
优化策略:怎么帮选手提分
办完比赛后,教练想提高成绩。他不能替选手去背答案,但可以优化选手的状态:调整作答习惯、精选热身例题、针对弱科补课。对应到工程上,有三大类行之有效的策略:prompt 设计、示例选择、微调增强,外加一个容易被忽略的细节——选项长度归一化。
第一,prompt 格式要统一且干净,每个选项都写成“A. ……“的编号形式,题目之间用空行隔开,减少模型”出戏”的概率。第二,few-shot 示例的选取与排序有讲究:选与当前题目主题相近、难度适中的示例,并固定顺序,往往能带来 1 到 3 个百分点的提升。第三,对薄弱学科做指令微调,用该学科的高质量问答语料增强模型。
第四,长度归一化需要特别说明。选项越长,逐词概率连乘的次数就越多,总分自然越小——于是模型会无意识地偏向“看起来短”的选项,就像考生偏爱字少的简答题。修正办法是把平均对数概率当作选项得分:
备考的本质不是押题,而是让模型以更稳定、更不受表面线索干扰的方式发挥真实水平——这正是评测优化的核心思路。
- 单步对数概率先对每步词预测概率取对数,得到负数分数,大小关系保持不变。
- 按长度取平均除以选项的 token 数 \(T_c\),抵消“选项越长、连乘次数越多”带来的天然劣势。
- 取最高者为答案四个选项都算一遍平均对数概率,谁高选谁。
常见误区:成绩单背后的陷阱
任何考试都可能被钻空子:有人提前拿到真题,有人只公布总分掩盖偏科,有人把“卷面分高”直接等同于“能力强”。MMLU 同样存在四类常见误读,值得每一位使用者警惕。
第一类,把分数等同于能力。训练语料可能已经包含测试题,分数存在虚高风险,这叫数据污染。第二类,只看总分。宏平均可能掩盖“文科 80 分、理科 40 分”的极端偏科——两个总分相近的模型,能力画像可能完全不同。第三类,误以为 5-shot 示例在“喂答案”。其实示例只示范格式,但如果示例选取不当,也会引入系统性偏差。第四类,忽略选项位置与长度的偏差:例如正确选项位置分布不均时,模型可能学到“蒙 C”的捷径,而不是真正的知识。
看懂成绩单,既要看分数,更要看分数的来源与结构——这才是成熟评测者与业余围观者的分水岭。详细辨析见文末“常见误区”一节。
应用前沿:这场大赛改变了什么
当一场考试足够权威,它就不再只是一场比赛:高校用它招生,教练用它排兵布阵,行业用它定标准。MMLU 正是这样一步步成为大模型圈的“高考”。
今天,MMLU 的身影遍布 AI 研发的各个环节。其一,各大公开排行榜把 MMLU 分数列为头部指标,成为开源模型竞争的标尺,分数差一个点都会引发社区热议。其二,训练团队在预训练和微调过程中定期跑 MMLU 子集,用分科曲线监控“学新忘旧”的灾难性遗忘。其三,按 57 科成绩画能力雷达图,定位薄弱学科,反向指导数据配比与指令微调数据的构造。其四,MMLU 中的法学、伦理等任务被用于价值观与安全对齐的辅助评测,帮助识别模型在敏感场景下的倾向性。
从一张考卷到行业基础设施,MMLU 用“57 个学科、一科一票”的简单规则,给混沌的大模型能力之争,竖起了一把最常用的刻度尺。
AI 应用场景
场景 1:大模型选型——跨考室比成绩
阶段:模型评估与选型
解决的问题:过去选模型靠“聊几句看语感”,主观且片面。MMLU 用 57 科标准考卷给模型做“体检”,让不同模型在同一把尺子下比较,避免被个别亮眼 demo 带偏。
具体案例:某公司要为法律问答产品选底座模型,对比几个候选开源模型时常规总分接近,但查看 MMLU 分科成绩后发现,A 模型在法学、经济学等社科类科目高出 B 模型 8 个百分点,最终选定 A 模型并配合后续微调,产品上线后的答案准确率提升明显。
场景 2:训练过程监控——给模型定期体检
阶段:模型训练与迭代
解决的问题:大模型训练到中后期,训练 loss 在降,但很难判断“旧知识是否在被遗忘”。定期抽考 MMLU 子集,相当于给训练中的模型做随堂测验。
具体案例:某团队训练 7B 模型时,每 500 步用随机抽样的 500 道 MMLU 题快速评测。某次发现新增代码数据后,历史类和社科类分数明显下滑,团队及时调低代码数据占比,抑制了灾难性遗忘。
场景 3:学科能力诊断——画雷达图找短板
阶段:数据与微调优化
解决的问题:总分看不出偏科,分科成绩能精确定位薄弱学科,让数据团队有针对性地补充训练语料,避免“眉毛胡子一把抓”。
具体案例:某团队评估内部模型,发现“大学数学”分科准确率仅 38%,远低于 65% 的平均线。于是构造了 2 万条数学推理问答做指令微调,三个月后该科提升到 55%,总分随之上涨。
Python 演示
import random HARD_SUBJECTS = {"physics", "college_mathematics"} SUBJECTS = [ "high_school_chemistry", "college_mathematics", "economics", "law", "world_history", "clinical_psychology", "computer_science", "physics",] class MMLUExam: """MMLU 风格的综合知识大赛模拟器.""" def __init__(self, subjects, shots=5): self.subjects = subjects self.shots = shots self.acc_map = {} self.question_counter = 0 def build_exemplars(self): """构造 few-shot 示例, 相当于考官的 5 道例题.""" lines = [] for i in range(self.shots): lines.append("Q: 例题 " + str(i + 1)) lines.append("A. 甲 B. 乙 C. 丙 D. 丁") lines.append("Answer: A") return "\n".join(lines) def simulate_scores(self, is_hard): """模拟模型算出的选项概率得分, 正确答案位置轮换.""" scores = [random.random() for _ in range(4)] answer_index = self.question_counter % 4 bonus = 0.85 if not is_hard else 0.35 scores[answer_index] += bonus return scores, answer_index def answer_question(self, is_hard): """对一道题作答, 返回是否答对.""" scores, answer_index = self.simulate_scores(is_hard) chosen = max(range(4), key=lambda i: scores[i]) self.question_counter += 1 return chosen == answer_index def run_subject(self, subject, per_subject=100): hits = 0 for _ in range(per_subject): if self.answer_question(subject in HARD_SUBJECTS): hits += 1 return hits / per_subject def run(self, per_subject=100): total = 0.0 for subject in self.subjects: acc = self.run_subject(subject, per_subject) self.acc_map[subject] = acc total += acc return total / len(self.subjects) def report(exam): for subject, acc in exam.acc_map.items(): print(" %-24s %5.1f%%" % (subject, acc * 100)) if __name__ == "__main__": random.seed(42) exam = MMLUExam(subjects=SUBJECTS, shots=5) mean_acc = exam.run(per_subject=80) print("各学科准确率:") report(exam) print("宏平均准确率(MMLU 总分): %.1f%%" % (mean_acc * 100))
class MMLUExam:定义一个“比赛组委会”,负责出题、判卷与统计。self.question_counter = 0记录已答题目数,让正确答案位置按题号轮换。scores = [random.random() for _ in range(4)]模拟模型对四个选项算出的初始得分。bonus = 0.85 if not is_hard else 0.35给正确答案加上“知识优势分”,难题时优势变小。chosen = max(range(4), key=lambda i: scores[i])用 argmax 选出概率最高的选项,对应模型的“作答”。self.acc_map[subject] = acc把每科准确率记入成绩单。return total / len(self.subjects)各科一票取平均,得到宏平均总分。random.seed(42)固定随机种子,保证考试结果可复现。
常见误区
误区“MMLU 考了 85 分,说明这个模型上知天文下知地理,什么都能干。选它就对了。”
正解MMLU 只覆盖 57 个学科、全是英文四选一,且存在测试题混入训练语料的泄露风险。分数高只能说明“在既定知识点上答对得多”,不能直接推出其在真实业务中的开放生成、长文写作、代码执行等能力。选型时要结合业务场景,用更贴近任务的评测补充验证。就像大赛冠军不一定擅长工地搬砖,考卷考不到的领域还需要另测。
为何常见:排行榜把分数作为唯一显眼的数字,人天性喜欢把“高分”与“优秀”画等号,容易忽略分数背后的局限条件。
误区“这个模型总分 78,另一个总分 75,直接选总分高的那个,准没错。”
正解MMLU 总分是“一科一票”的宏平均,偏科模型只要多数科目尚可,总分就不低。两个模型总分相近,分科画像可能完全不同:一个理工强、法律弱,另一个恰好相反。用在法律问答产品上,后者更合适。应当始终查看分科成绩表,以业务需要的学科为准。就像高考总分接近的两位考生,一个数学满分英语不及格,另一个各科均衡,适合的大学专业完全不同。
为何常见:总分是一个数字,便于比较和传播;分科表格需要费心解读,容易被省事心理跳过。
误区“每科都给了 5 道带答案的例题,这不等于把答案告诉模型了吗?分数有水分。”
正解few-shot 示例来自开发集,与正式测试题完全不同,作用是示范“提问格式 + 作答方式”,比如让模型明白要用字母作答、选项如何编号。模型不会因此知道任何一道正式题的答案。真正需要警惕的是测试集本身混入预训练语料(数据污染),那是另一码事。好比开考前看的是往年模拟题,不是今年的真题。
为何常见:从人类考试经验出发,很容易把“看例题”误解为“看真题”,不明白 few-shot 的本质是格式示范而非内容传授。
误区“模型四个选项的概率都是 25%,说明它答题很谨慎、很稳,四平八稳不冒险。”
正解概率接近均匀意味着模型在四个选项间毫无区分力,本质接近随机乱猜(期望准确率 25%)。真正“稳”的表现是正确选项概率显著高于干扰项。评测时若大量题目出现均匀分布,说明模型在该学科几乎无相关知识。就像一个考生把判断题全部蒙“对错各半”,那不是稳健,是心里没底。
为何常见:把人类语境里的“平均分布 = 均衡全面”套用到概率输出上,忽略了选择题场景下“有区分度”才是能力的体现。
面试题
Q1. MMLU 的“多任务”指的是什么?
- A.同时训练多个 AI 模型
- B.覆盖 57 个学科任务← 正确答案
- C.一次运行多个任务
- D.多台机器并行推理
答案:B。MMLU 用 57 个学科子任务构成“多任务”,每个学科是一份独立的四选一考卷。A、C、D 描述的是训练或部署方式,与数据集定义无关。记住“57 学科”这个数字,就抓住了 MMLU 的骨架。
Q2. MMLU 的题目形式是什么?
- A.开放问答填空题
- B.四选一选择题← 正确答案
- C.代码生成编程题
- D.语音识别转写题
答案:B。MMLU 全部题目都是四选一选择题,答案限定为 A/B/C/D 四个字母,这正是它能用“续写概率”自动判卷的前提。开放式题目无法用这种接龙概率直接打分。
Q3. MMLU 评测默认采用几发式示例?
- A.零发式示例
- B.五发式示例← 正确答案
- C.三发式示例
- D.百发式示例
答案:B。MMLU 默认 5-shot,即每科从开发集抽取 5 道带答案的例题拼在输入前面,帮助模型理解答题格式。这与训练无关,示例答案也不参与正式计分。
Q4. 模型在 MMLU 中选择答案的依据是什么?
- A.选项续写概率最高← 正确答案
- B.选项文本长度最长
- C.选项出现次数最多
- D.选项字母排序靠前
答案:A。模型把每个选项当作“文字接龙”的续写,计算其生成概率,概率最高者胜出。B 是模型可能出现的偏差而非依据,C、D 更是与答题逻辑无关。
Q5. MMLU 总分的正确算法是?
- A.各学科准确率取平均← 正确答案
- B.全部题目直接求平均
- C.只看 STEM 类学科
- D.取所有学科中位数
答案:A。官方采用宏平均,即每个学科先单独算准确率,再一科一票取平均。B 是微平均,会让题量大的学科主导总分,不是 MMLU 的做法。
Q6. 随机瞎猜四选一题的期望准确率是?
- A.大约百分之二十五← 正确答案
- B.大约百分之五十
- C.大约百分之七十五
- D.大约百分之百
答案:A。四个选项等概率随机选,期望正确率就是 25%。这个数字是 MMLU 的“地板”,任何模型分数低于 25% 都意味着比乱猜还差。
Q7. 最容易让 MMLU 分数虚高的因素是?
- A.测试题混入训练数据← 正确答案
- B.示例数量增加到十个
- C.选项顺序被随机打乱
- D.数据集中缺少部分学科
答案:A。数据污染让模型在训练时“背过”测试题,分数自然失真。B 只是调整 few-shot 的常规操作,C 是增强鲁棒性的测试手段,D 属于覆盖问题,都不会直接造成分数虚高。就像考试漏题一样,污染是分数可信度的头号杀手。
Q8. 下列学科中属于 STEM 组的有?
- A.大学数学← 正确答案
- B.世界历史
- C.高中化学← 正确答案
- D.法学理论
答案:AC。STEM 组包含数学、物理、化学、计算机等理工类学科,共 21 科。世界历史与法学理论分别属于人文类和社科类考室。
Q9. 关于 5-shot 示例的作用,说法正确的有?
- A.用来示范作答格式← 正确答案
- B.来自开发数据集← 正确答案
- C.包含正式题答案
- D.属于测试集题目
答案:AB。5-shot 示例从开发集(dev 集)抽取,作用是让模型看清“提问长什么样、答案怎么填”,相当于开考前的例题板。C、D 的说法与事实相反——示例绝不属于测试集,更不含正式题答案。
Q10. 提升 MMLU 分数的合理手段有?
- A.优化示例选择与排序← 正确答案
- B.对选项做长度归一化← 正确答案
- C.把测试题加入训练集
- D.统一全部学科为单科
答案:AB。精选 few-shot 示例、用平均对数概率消除长短选项偏差,都是公认的提分策略。C 属于作弊性质的数据污染,D 会破坏 57 科的多任务结构,两者都不可取。