想象一座叫“MMLU 学院”的超级考场,每年举办一场覆盖 57 门学科的“AI 联考”:高等数学、美国历史、刑法、医学……同一张卷子里塞进约 1.4 万道四选一选择题。考生是一群叫“大语言模型”的 AI 学生,其中一位叫小蓝。考试结束后,阅卷老师并不看过程,只做一件事:数答对了几道题,除以总题数,得到一个百分数——这就是 MMLU 准确率。听起来像算平均分一样简单?其实藏了不少门道:每道题有四个选项,闭眼瞎蒙也能拿 25 分;57 门课的题数不一样,简单相加会偏袒题多的学科;阅卷严格到“全对才给分,接近不给分”。这篇教程就跟着小蓝一起走进考场,把 MMLU 准确率计算方法的每个细节看明白。
对 AI 从业者来说,MMLU 准确率是衡量大模型知识水平的“硬通货”;把它的计算口径和对比规则吃透,才能在模型发布、论文阅读和技术选型中不被数字误导。
可视化演示
通过准确率计算流程、微/宏平均聚合与随机猜测基线,直观展示MMLU评测中准确率的统计方法。
本节配有交互动效(进入视口后自动加载,约 3KB)。
准确率计算流程 提取答案字母 匹配与计数 acc = correct/total 四环节统计正确率。
考试全景与规则
小蓝是 MMLU 学院的一名 AI 考生。这天它走进考场,发现卷子厚得像本字典:57 门科目同场开考,数学、物理、历史、法律、医学……每门课少则几十题、多则几百题,全卷加起来约 1.4 万道题。不过小蓝松了口气——所有题目都是四选一选择题,A、B、C、D 里挑一个就行。这就是 MMLU 的基本盘:用大量覆盖面极广的客观题,考察模型到底“知道多少知识”。
阅卷规则一句话就能说清:答对 1 题记 1 分,答错记 0 分。等所有卷子批完,阅卷老师把答对题数除以总题数,得到的比值就是准确率。它是 MMLU 最核心的成绩单。你可能会问:这不就是求“答对率”吗?对,宏观上就这么简单,但“简单”两个字下面藏着很多评分细节,后面几节逐一展开。
先把这个最朴素的公式立起来:
就像班主任数全班的对勾:总对勾数除以总题数,得到一个 0 到 100% 的数字。这个数字人人看得懂,但正因为太直观,接下来的“基线”“加权”“部分匹配”这些坑才更容易被忽略。
- 分子——答对题数统计所有题目中,模型给出的答案与标准答案完全一致的题数。这一项是计分的地基。
- 分母——总题数参与统计的题目总数,可以是一门学科,也可以是全部约 1.4 万道题。分母不同,口径就不同。
- 乘 100% 转百分数相除的商是 0 到 1 之间的小数,乘以 100% 变成更直观的百分数,比如 0.732 写作 73.2%。
随机猜对基线
小蓝一题都不会时会怎么办?答案是闭眼在答题卡上乱涂。每道题 4 个选项里只有 1 个正确答案,随便蒙一题猜对的概率就是四分之一。也就是说,一张完全靠蒙的答题卡也能拿到大约 25% 的分数。这 25% 不是能力,是“运气的下限”,术语叫随机基线(random baseline)。
为什么必须把这条线单独拎出来?因为它是评判的“零点”。如果小蓝考了 22%,说明它连瞎蒙都不如;考 30%,也只比瞎蒙好了 5 个百分点,谈不上懂知识。评测界有个经验:面对四选一评测,先看分数离 25% 有多远,再决定要不要夸这个模型。25% 像温度计的冰点,是测量“有没有学到东西”的起点。
把基线写成一个公式就一目了然:
阅卷老师把这根 25% 的线画在成绩单上,就有了参照物。后面我们还会用它做“标准化提升”:用(实测准确率 − 0.25)÷(1 − 0.25)把运气分扣掉,看模型真正靠知识挣到了多少分。这根虚线,小蓝每张成绩单上都印着。
- K选项个数:MMLU 每题固定提供 4 个选项(A/B/C/D),所以 K = 4。
- 1/K单题猜对概率:4 个选项中只有 1 个正确,随机选中它的概率是 1/4。
- 25%基线数值:把四分之一换算成百分数,这就是“完全不学”也能达到的准确率。
标准准确率公式
阅卷室里其实是一台“逐题批改机”:从第 1 题走到第 N 题,每题只问一件事——模型选的答案和标准答案一样吗?一样就记 1,不一样就记 0。它不关心模型“有多接近”正确,只关心“是不是”正确。
“是不是”这种是非判断,数学上用一个叫指示函数(indicator function)的小工具表达:方括号里的条件成立,函数值取 1;不成立取 0。把 N 道题得到的 0 和 1 全部加起来,就是答对题数;再除以 N,就得到准确率。这就是标准准确率公式,也是 MMLU 评分最核心的数学表达:
这台“逐题批改机”的说明书就是上面的公式:逐题独立判分,互不牵连,最后压成一个平均分。小蓝渐渐明白,准确率的本质不是“老师感觉它行不行”,而是 1.4 万个是非判断的算术平均。
- N总题数:所有参与统计的题目数量,对应约 1.4 万道题或某门学科的子集。
- 模型答案与标准答案$\hat{y}_i$ 是模型在第 i 题给出的答案,$y_i$ 是该题的标准答案,下标 i 表示“第 i 题”。
- 指示函数 $\mathbb{1}[\cdot]$括号里若 $\hat{y}_i = y_i$ 成立则取 1,否则取 0,把判断变成数字。
- 求和再平均把所有题的 0/1 累加($\sum$ 是累加符号),再除以 N,得到 0 到 1 的准确率。
学科宏平均
小蓝的成绩单上,除了总分,还有 57 门单科分。班主任发现一个问题:有的科目题多、有的科目题少。如果只看把所有题混在一起算出的总分,题多的科目就会“带节奏”——比如物理有 300 题、音乐只有 80 题,一个物理特别好的考生,总分会被物理拽得很高,音乐偏科却被掩盖。
于是阅卷组采用两种口径配合使用。第一种叫微平均(micro-average),就是把所有题目混进一个大池子,用上一节的标准公式算总体准确率。第二种叫宏平均(macro-average):每门学科先单独算出自己的正确率,得到 57 个数值,再对这 57 个数值取算术平均。这样每门学科权重相同,不因题量多少而偏袒。公式如下:
班主任既看“所有卷子混在一起的总分”,也看“各科平均分”,两个数一起读,才能发现小蓝到底是全面型选手还是严重偏科。论文里报告 MMLU 分数时,两个口径最好都标注清楚,否则读者会误判。
- S学科总数:MMLU 共 57 门学科,外层求和就是逐个学科过一遍。
- 内层单学科正确率:先求第 s 门学科自己的正确率:该科答对数除以该科总题数 $N_s$。
- 外层学科等权平均:把 57 个学科正确率相加,再除以 57,每门课权重完全一样。
- 与微平均对比微平均按“题”等权,题多的学科影响大;宏平均按“学科”等权,防止题数失衡。
全对无部分分
小蓝交卷后最担心的不是“会不会做”,而是“阅卷严不严”。MMLU 的阅卷原则只有八个字:全对才给分,接近不给分。比如历史题标准答案是“1776 年”,小蓝写“1776“,得 1 分;写”18 世纪后半叶“,哪怕历史学家看了觉得对,也是 0 分。选择题更是如此:选中了正确选项就得分,选出”最接近”的选项一样是错。
这种评分叫零一评分(0/1 scoring),也叫全对无部分分。它保证了评测的客观和可复现:机器判卷没有“印象分”“步骤分”。而当模型以自由文本生成答案时,评分会先用规则做规范化预处理——去掉多余空格、统一大小写、剥离标点——再做精确匹配。还有些生成式评测采用“部分匹配”:只要生成文本里包含正确答案或正确选项字母就算对。把小蓝的得分规则写成数学式:
对小蓝来说,答案“差不多对”毫无意义;但对评测者来说,这把“接近就给分”的主观评判赶出了考场,让 1.4 万次打分都能被一台机器精确复现。严格,但公平。
- 条件分支完全一致得 1 分:模型答案与标准答案完全匹配时,该题记 1 分;“完全匹配”指规范化后逐字一致或选项字母一致。
- 否则得 0 分只要不一致,无论多接近都记 0 分,这就是“全对无部分分”的数学化表达。
少样本提示规范
正式作答前,监考老师会给小蓝发一页“答题示例”:先看 5 道带答案的例题,熟悉“题目 + 答案”的书写格式,再开始正式答题。这页示例在术语里叫 few-shot 提示,MMLU 官方默认设置是 5-shot——每个学科 5 道示例题,所有模型共用同一批。这相当于考试说明:题目怎么排版、答案填在哪个位置,全都白纸黑字写清。
示例题不是随便选的,它们来自每门学科的开发集(dev set),官方固定这批样例,保证所有考生拿到的是同一份“说明”。提示模板也必须统一:先拼 5 道示例,再拼当前题目,格式错一点都不行。那模型怎么从 4 个选项里挑答案?标准做法是计算 4 个选项各自的对数似然——可以理解为模型“有多倾向于选它”——选倾向值最大的那个:
示例题就像考场黑板上的“作答样例”,人人都看得到;提示格式则是答题卡的排版规范。只要有一份试卷的样例或格式不同,分数就可能上蹿下跳——这也是下一节“公平对比”的伏笔。
- 候选集合模型只能在 A、B、C、D 四个候选中挑选答案,这是四选一的数学约束。
- 对数似然$\log P(c \mid \text{Prompt}_i)$ 表示“给定完整提示(示例题 + 当前题)后,选项 c 被延续出来的概率的对数”,数值越大代表模型越倾向选它。
- argmax 选取$\arg\max$ 的意思是“让后面这个值最大的那个选项”,即四个对数似然里挑最大者作为最终答案。
评测公平对比
小蓝考了 80 分,能不能说自己比考 70 分的小红强?可以,但有个前提:两人做的是同一张卷子、用同一套答题说明、按同一把尺子阅卷。否则,一个考的是“开卷附加题”,一个考的是“闭卷基础题”,分数再高也没法比。MMLU 的准确率之所以成为行业标尺,靠的就是把“同一张卷子”这个前提锁死:固定官方测试集、统一 5-shot 协议、统一零一评分。
除此之外,还有两条职业操守。第一,警惕数据泄漏:如果测试题混进了模型的训练语料,相当于“考前背过答案”,分数会虚高,评测信号就失真了。第二,报告分数时不只看一个点,还要报告多次运行的均值与方差,避免一次运气定胜负。解读分数时,常用“标准化提升”扣除随机基线的水分,把 25% 的运气分剔掉,只看净能力:
小蓝最终明白了:准确率不是孤立数字,而是一套“同一张卷子、同样的批改尺子、扣掉运气分、警惕泄题”的公平游戏。理解这些规则之后,再看任何一篇论文里的 MMLU 分数,它对你就不再是神奇的黑箱数字,而是可以拆解、可以质疑、可以复算的透明指标。
- 分子扣除运气分:用实测准确率减去 25% 的随机基线,剩下的部分才是“运气之外”挣到的分数。
- 分母剩余提升空间:$1 - 0.25$ 表示从“瞎蒙”到“满分”之间还有多少进步空间。
- 比值净提升比例:两者相除,得到模型靠真实知识挣到的分占可提升空间的比例,范围是 0 到 100%。
AI 应用场景
大模型发布前的“能力体检”
阶段:模型评估
解决的问题:训练团队发布新版本前,需要知道它比上一版强在哪、弱在哪。传统方式靠人工抽查聊天样例,样本少且主观,既看不出 57 个学科层面的细节,也无法量化“提升多少”。用 MMLU 自动评测则能把约 1.4 万道题全部跑完,输出总体准确率和分学科准确率,像体检报告一样逐项对照。
具体案例:某大模型团队在发布前一周跑 MMLU 评测,发现总体准确率比上一版提升了 3 个百分点,但“大学数学”学科准确率反而下降了 5%。团队据此定位到最近一次训练数据改动影响了数学语料配比,及时回滚后重新评测,避免了带病发布。
模型选型时的横向对比
阶段:模型选型
解决的问题:企业采购大模型 API 时,各家厂商官网都报自己的 MMLU 分数,但口径可能完全不同:有的是 0-shot、有的是 5-shot;有的按总体微平均、有的按学科宏平均。直接拿宣传数字对比,就像拿不同省份的高考分数线比高低。用统一脚本、同一测试切片、同一提示模板重新跑分,才能得到可比的准确率。
具体案例:某公司评测小组用官方 5-shot 模板同时测评三家 API,发现厂商甲官网宣称 85%,自测却只有 72%,原因正是官网使用了不同的提示格式。换成统一口径后,三家模型的排名发生反转,选型结论也因此改变。
学科能力诊断与定向优化
阶段:模型分析与优化
解决的问题:教育科技公司想让模型在“高中物理”上表现更好,直接全量微调成本高、风险大。借助 MMLU 学科级准确率,可以先做精准诊断:把 57 个学科的得分排成雷达图,找出垫底学科,再针对性地补充该学科的训练语料或做局部微调,形成“评测—诊断—优化—再评测”的闭环。
具体案例:一家做 AI 家教产品的公司发现模型总准确率不错,但“高中物理”只有 41%,明显低于均值。团队收集了更多物理题目和解题思路语料进行二次微调后,该学科准确率提升到 58%,产品在物理答疑场景的满意度同步上升。
Python 演示
#!/usr/bin/env python3# -*- coding: utf-8 -*-"""MMLU 风格准确率评估:总体准确率、学科宏平均、随机基线对比。""" SUBJECTS = { "高中物理": [("A", "A"), ("B", "C"), ("C", "C"), ("D", "A"), ("A", "A")], "美国历史": [("A", "B"), ("B", "B"), ("C", "A"), ("D", "D")], "刑法基础": [("A", "A"), ("A", "A"), ("B", "A"), ("D", "D"), ("C", "C"), ("D", "D")],} GENERATED_ANSWERS = [ ("答案是 B", "B"), ("正确答案应该是 C 选项", "C"), ("我觉得是 A", "A"), ("D", "D"),] def subject_accuracy(items): """计算单个学科的正确率:答对数 / 总题数。""" if not items: return 0.0 correct = sum(1 for pred, true in items if pred == true) return correct / len(items) def contains_answer(text, answer): """部分匹配:规范化文本后,判断是否包含正确选项字母。""" norm = text.strip().lower().replace(" ", "") return answer.lower() in norm def evaluate(subjects): """返回总体准确率(微平均)、学科宏平均和每科正确率。""" results = {} total_correct = 0 total_count = 0 for subject, items in subjects.items(): acc = subject_accuracy(items) results[subject] = acc total_correct += sum(1 for pred, true in items if pred == true) total_count += len(items) overall = total_correct / total_count macro = sum(results.values()) / len(results) return overall, macro, results def main(): overall, macro, per_subject = evaluate(SUBJECTS) baseline = 0.25 print("=== MMLU 风格准确率评估 ===") for subject, acc in per_subject.items(): print(f"{subject}: 正确率 {acc * 100:.1f}%") print(f"总体准确率(微平均): {overall * 100:.1f}%") print(f"学科宏平均: {macro * 100:.1f}%") print(f"随机基线: {baseline * 100:.1f}%") improved = (overall - baseline) / (1 - baseline) print(f"相对基线的标准化提升: {improved * 100:.1f}%") match = sum(contains_answer(text, ans) for text, ans in GENERATED_ANSWERS) print(f"生成式部分匹配: {match} / {len(GENERATED_ANSWERS)}") if __name__ == "__main__": main()
correct = sum(1 for pred, true in items if pred == true)一行统计该学科答对题数:把每题判断结果 0/1 累加overall = total_correct / total_count总体(微平均)准确率:所有题合并计算,题多的学科影响更大macro = sum(results.values()) / len(results)学科宏平均:每科正确率先算好再取算术平均baseline = 0.25四选一的随机蒙对概率,评测的“零点”improved = (overall - baseline) / (1 - baseline)标准化提升:扣掉运气分后看真实净得分比例norm = text.strip().lower().replace(" ", "")规范化预处理:去空白、统一小写,为部分匹配做准备
常见误区
误区我训练的模型在 MMLU 上拿到了 25% 的准确率,虽然不高,但至少不是零分,说明它已经学到了一些基础吧?
正解四选一纯随机蒙也有 25%,这个分数只是“运气分”,恰恰说明模型没有掌握任何领域知识。准确率的判读要始终以随机基线为参照:接近 25% 等于瞎蒙,显著高于 25% 才谈得上“学到知识”。更严谨的做法是用标准化提升(扣除基线后的净得分比例)来量化真实能力。
为何常见:人们习惯把“非零分数”等同于“有能力”,忽略了选择题本身自带概率得分这一前提。
误区反正都是同一份卷子,把 1.4 万道题放进一个大池子统计答对率,所有模型都这么算,多公平!
正解各学科题量不均,混在一起算会让题量大的学科主导总分,掩盖模型严重的偏科。标准做法是同时报告两个口径:微平均(总体准确率)和宏平均(学科正确率的算术平均)。一个模型可能总体 70%,但宏平均只有 55%——这说明它只是在题多的强势学科上表现好。
为何常见:直觉上“混在一起求平均”符合日常经验,但评测场景里分布不均衡会悄悄扭曲结果。
误区模型选了错误选项,但它在推理里分析得头头是道,理由几乎全对,阅卷老师应该酌情给 0.5 分吧?
正解MMLU 采用零一评分:与标准答案完全匹配得 1 分,否则一律 0 分,没有“接近分”“步骤分”。这样评分离散、可复现、无主观裁决。生成式回答会先做规范化预处理再做精确匹配;只有部分评测协议才允许“文本包含正确答案即算对”的部分匹配。用人类考试的“酌情给分”直觉来套机器评测,会破坏可比性。
为何常见:习惯了人类考试中的步骤分和卷面分,把主观评分直觉带入了机器评测场景。
误区论文里大家都是 MMLU 准确率,数字大的就厉害,直接横向比就完事了。
正解必须确认双方使用了同一测试集切片、同一 few-shot 设置、同一提示模板、同一评分方式,否则相当于“换了一张卷子”。此外还要警惕数据泄漏:测试题若混进训练语料,分数会严重虚高。所以看论文里的 MMLU 数字,先查它的评测协议细节,再谈排名。
为何常见:“同名基准 = 同标准”的直觉,忽略了评测协议细节对分数的影响可能高达数十个百分点。
面试题
Q1. MMLU 评测中每道题通常提供几个候选选项?
- A.2 个选项
- B.3 个选项
- C.4 个选项← 正确答案
- D.5 个选项
答案:C。MMLU 全部题目都是四选一选择题,选项固定为 4 个(A/B/C/D)。这决定了随机蒙对的基线是 1/4 = 25%,也决定了评分时可以用选项的对数似然直接比较。
Q2. 一个模型在 MMLU 四选一题目上完全随机作答,预期准确率约为多少?
- A.约 10%
- B.约 15%
- C.约 25%← 正确答案
- D.约 50%
答案:C。四个选项中只有一个是正确答案,随机选择每道题猜对的概率是 1/4 = 25%。这就是“闭眼填答题卡也能拿到的分数”,评测时必须先记住这条基线,低于它的成绩说明连瞎蒙都不如。
Q3. MMLU 基准测试大约覆盖多少个学科?
- A.37 个学科
- B.47 个学科
- C.57 个学科← 正确答案
- D.67 个学科
答案:C。MMLU 从 STEM、人文、社科、专业领域选取了 57 个学科,共约 1.4 万道题。覆盖面广正是它受欢迎的原因,就像“一张卷子考 57 门课”,能较全面地反映模型的多学科知识储备。
Q4. MMLU 官方推荐的少样本评测设置是什么?
- A.0-shot 零样本
- B.5-shot 五样本← 正确答案
- C.10-shot 十样本
- D.50-shot 五十样本
答案:B。官方标准协议是 5-shot:每个学科先给模型 5 道带答案的示例题,再让它回答正式题目。示例题相当于“考场说明”,帮助模型理解作答格式;零样本也可以测,但通常低于少样本结果。
Q5. 关于 MMLU 准确率的两种平均方式,下列说法正确的有?
- A.总体准确率是微平均← 正确答案
- B.宏平均按学科等权← 正确答案
- C.宏平均按题目等权
- D.两者结果必然相同
答案:AB。总体准确率把所有题合并计算,是微平均;宏平均先算每科正确率,再对 57 个学科取算术平均。题多的学科在微平均中影响更大,所以两者结果不一定相同,就像“各科平均分”与“总平均分”的差别。
Q6. 以下哪些因素会影响 MMLU 准确率结果的公平可比性?
- A.测试集切片有差异← 正确答案
- B.提示格式不一致← 正确答案
- C.模型参数量更大
- D.是否采用 5-shot← 正确答案
答案:ABD。对比公平要求“同一张卷子、同一把尺子”:测试集切片、提示格式、few-shot 设置都会直接影响分数。参数量是模型自身属性,不是评测协议的一部分,不能因此认为分数不可比——这正是评测要解决的事。
Q7. 宏平均准确率的计算方式是?
- A.所有题目合并计算
- B.各学科正确率取算术平均← 正确答案
- C.按题目数量加权平均
- D.各学科正确率取中位数
答案:B。宏平均先算出 57 个学科各自的正确率,再对这 57 个数值取算术平均,每门学科权重相同,避免题多的学科“带节奏”。它对应“各科平均分”,而微平均对应“把所有卷子混在一起数对勾”。
Q8. 某模型在四选一 MMLU 上准确率为 62.5%,相对随机基线 25% 的标准化提升幅度为?
- A.25.0%
- B.37.5%
- C.50.0%← 正确答案
- D.62.5%
答案:C。标准化提升 = (实测准确率 − 随机基线) ÷ (1 − 随机基线) = (0.625 − 0.25) ÷ 0.75 = 0.5 = 50%。它把“运气分”扣除后衡量真实学习量,就像把裸分换算成“扣掉蒙对部分的净得分”。
Q9. 关于 MMLU 的零一评分(全对无部分分),下列说法正确的有?
- A.与标准答案完全匹配才得分← 正确答案
- B.答案意思接近可给部分分
- C.生成式回答需规范化后匹配← 正确答案
- D.选择题天然适用该评分← 正确答案
答案:ACD。零一评分即答对得 1 分、答错得 0 分,没有“接近分”。选择题选项离散,天然适用;生成式答案通常先做去空格、统一大小写等规范化预处理,再做精确匹配或部分匹配。这与“作文按意思给分”的评判完全不同。
Q10. 训练语料中混入 MMLU 测试题会带来什么问题?
- A.模型准确率虚高评测失真← 正确答案
- B.模型参数量自动增加
- C.模型推理速度明显变慢
- D.评分公式需要重新定义
答案:A。测试题如果进入训练语料,模型相当于“考前背过答案”,准确率虚高,评测信号失效。保持测试集不被污染,才能保证分数真实反映模型学到的一般知识,而不是记住了真题——这和高考“试题保密”同理。