一位班主任拿到全班期中考试的成绩册,只看总排名,发现小明排第一。可翻开各科卷面:语文 99、数学 61、英语 98、物理 58——总分的“漂亮”掩盖了严重的偏科。真正了解一个学生,必须把总分拆开,按学科逐一看过去。 大模型的能力评估与此如出一辙。MMLU(大规模多任务语言理解)就是给模型出的“跨学科摸底考”,覆盖 57 个学科,最终给出一个总体准确率。但总分高的模型,真的一定样样精通吗?学科分组分析,就是把总成绩拆成一张“按学科排列的成绩单”,找出模型的优势学科、薄弱学科,甚至定位知识盲区,从而指导训练数据的补充和优化方向。 这篇文章里,我们会像班主任读成绩单一样,一步步学会用学科分组分析读懂大模型的真实强弱。
学会学科分组分析,你将能从总分数字背后挖掘模型的真实能力剖面,这是模型选型、数据治理和评测驱动迭代中不可或缺的核心技能。
可视化演示
展示MMLU评测结果的学科分组分析:不同学科类别的准确率柱状图对比,以及多模型在各学科的强弱热力分布。
本节配有交互动效(进入视口后自动加载,约 3KB)。
学科分组准确率 STEM: 数学/物理/化学 人文:历史/哲学/法律 社科:经济/心理/政治 准确率 = 正确题数 / 总题数 × 100% 学科分组分析揭示模型知识盲区,指导针对性训练
MMLU考试设计
班主任手中的“联合摸底考”,和普通的单元测不同:它覆盖了数学、语文、物理、历史、法律、医学等几十个科目,每一科都有独立的卷面。大模型的 MMLU 基准考试,正是这样一份跨学科的“摸底卷”。
MMLU(Massive Multitask Language Understanding)由加州大学伯克利分校等机构发布,用来衡量大模型在广泛知识领域上的掌握程度。它从百科全书、教材、考试题库中抽取题目,覆盖57 个学科,题型全部是多项选择题,模型只需从若干选项中选出正确答案。这样设计的好处是客观、可复现,每一道题都有明确标准答案,机器可以自动判分。
为了不把 57 个学科堆成一团,评测方通常把它们归入几大知识领域:STEM(科学、技术、工程、数学)、人文、社会科学,以及法律、医学、商业等专业领域。学科分组分析的第一步就从这份“类目表”开始。就像班主任把卷子按文理科分好,才能判断一个学生是“文科脑”还是“理科脑”。
1. 统计答对数量:模型每答对一道题,正确题数加 1,最终得到 C。
2. 归一化为比率:用正确题数除以总题数 N,将绝对数量转化为 0 到 1 之间的比率,便于跨模型、跨学科比较。
这份“大考卷”如此设计,决定了总分只是起点。我们看成绩时,不光要问“考了多少分”,还要问“每一科各考了多少分”。这正是学科分组分析登场的时刻。
总分掩盖差异
小明总分 90,家长高兴坏了,但翻看各科成绩才发现:语文 98、数学 72、英语 95、物理 60。平均分很漂亮,可物理已经亮起了红灯。总分就像一块压缩饼干,把丰富的营养信息挤进了小小一块,嚼起来方便,却看不出原本的配方。
大模型的评测同样存在这个问题。两个模型总分都是 70 分,一个可能是各科均匀分布在 70 分附近,另一个可能是人文法律 90 分、STEM 数学 50 分。如果只看总分,你会以为它们“能力相当”,实际上它们的知识结构完全不同。
学科分组分析正是为了对抗这种“平均分幻觉”。它把 57 个学科拆开来看,计算每个学科组的得分,再观察这些组内得分之间的波动。如果各组得分差异很大,就说明模型存在严重的学科不均衡——某些知识领域很强,另一些却很弱。
1. 计算学科组均值:先把所有学科组的平均分算出来,得到基准线 $\bar{S}$。
2. 求偏差平方:每个学科组得分减去总平均,差值越大说明偏离越远;平方处理是为了消除正负抵消。
3. 汇总取平均:把所有偏差平方加总,再除以学科组数量 K,得到“平均偏离程度”即方差。
看到方差大,班主任就知道小明偏科严重,需要重点关注弱科;看到方差小,才知道他是“均衡型选手”。总分这张压缩饼干,必须还原成各科明细才能指导下一步行动。
学科分组维度
班主任整理成绩单时,不会只写一个“总分 90”,而是按科目列一张表:语文一列、数学一列、物理一列……这就是分组。MMLU 的学科分组分析,也要决定“按什么维度去切”这个成绩单。
最常见的分组方式是按学科类别:57 个学科本身就是天然分组,每个学科一个格子。但有时学科太细,每个学科只有几十道题,统计结果不稳定。于是人们把学科归并成更大的知识领域组:STEM 组、人文组、社科组、专业领域组,每个组的样本量较大,统计更可靠。
另一种维度是按题目难度分层:把 MMLU 的题目按难易程度切片,观察模型在简单题、中等题、困难题上的表现差异。这有点像老师不但看科目,还看“基础题得分率”和“压轴题得分率”。分组维度的选择取决于你想要回答什么问题:想知道“模型懂不懂法律”,按学科分;想知道“模型是不是只会背常识”,按难度分。
1. 定义学科组 D_g:把属于同一学科组(如 STEM)的题目收集到一个集合中。
2. 组内得分累加:将组内所有题目的得分加起来,得到组的原始总分。
3. 除以组内样本量:用组内题目数 $|D_g|$ 做平均,得到学科组平均分,这个分数可以跨组比较。
分组维度选得越合理,成绩单的“颗粒度”就越贴合分析目标。小组看科目、大组看领域、纵切看难度,多维度交叉阅读,才能拼出完整的能力地图。
细粒度解读方法
班主任拿到成绩单后怎么读?先看每科分数排到全班什么位置,再和平均线比一比,最后在脑中画出一条“偏科曲线”。这套阅读流程,对应着学科分组分析的标准方法。
流程第一步是数据准备:从评测结果中提取每个样本的学科标签和是否正确,构建结构化数据。第二步是按组聚合统计:根据选定的分组维度,计算每个组的平均分,这就是上一节讲的分组平均分。第三步是与总体均值对比:把每个组的分数放在总体平均线的上下方观察,高出的是优势区,低出的是劣势区。
第四步是标准化处理:由于不同学科组的题目难度和样本量不同,直接比较原始分可能不公平,所以可以对每组计算 z-score,把原始分转化为“偏离总体多少个标准差”的标准化数值。最后一步是可视化呈现:用柱状图、雷达图等形式把分组结果画出来,让强弱分布一目了然。四个步骤合起来,就是一套可复用的学科分组解读流程。
1. 计算总体均值:先求出所有学科组的总体平均值 μ,作为中心参考点。
2. 计算偏差:用学科组平均分减去总体均值,得到该组与中心的距离。
3. 除以标准差:把这个距离除以整体标准差 σ,得到以标准差为刻度的 z-score,方便识别离群组。
z-score 大于 0 说明该组高于平均,小于 0 说明低于平均。班主任用“高于平均线还是低于平均线”来判断强弱,我们也用同样的逻辑,只是把感觉变成了精确的数值。
优势学科识别
班主任在成绩单上点出几科:“语文、英语稳定在前五,是班级优势科目。”学科分组分析同样要回答:这个模型哪些学科组最拿手?
方法是计算相对优势:用学科组平均分减去总体平均分,得到正数意味着该组领先于模型自身平均水平。领先越多,优势越明显。比如某模型总分 68 分,总体平均每科约 68 分,而法律组 91 分、医学组 88 分,说明它的知识强项集中在专业领域。
进一步,我们可以把这些优势学科聚成“能力簇”:如果模型同时在高能物理、化学、计算机多个 STEM 学科表现优异,就说它具有“理工科能力画像”;如果在历史、哲学、文学上拔尖,则偏向“人文能力画像”。这种画像对选型很有用:做医疗问答的产品,当然优先选医学组和生物组得分高的模型。
1. 保留学科组得分:拿出某学科组的平均分 S_g,它代表该组的知识水平。
2. 求出总体平均线:把全部学科组平均分再取平均,得到模型自身的“平均水位” $\bar{S}$。
3. 两者相减:学科组得分减去平均水位,超过 0 就是优势,超过越多优势越大。
优势学科是模型身上的“长板”。识别出长板,就能理解这个模型适合承担什么任务;同时,长板的另一面——那些落在平均线之下的学科,正是下节要关注的盲区。
知识盲区定位
如果优势学科是成绩单上闪着光的星,那知识盲区就是被红笔圈出的及格线以下的科目。班主任给小明圈出物理,说“这科拖后腿,要补”。学科分组分析也要在成绩单上划出这些“拖后腿”的学科组。
判定盲区不能只看绝对分数,因为不同学科组难度不同。更合理的做法是设定一个差距阈值:当学科组得分显著低于总体平均分,且差距超过某个阈值 γ 时,就判定该学科组为知识盲区。比如总体平均 68 分,数学组只有 41 分,差距 27 分,远超阈值,显然是个大坑。
定位盲区后,还要追溯成因:是训练语料中该学科的文本占比太少?还是该领域专业术语复杂、模型难以理解?又或是相关题目涉及多步推理,模型力所不能及?只有结合盲区分布和题目特征,才能真正理解“模型为什么不会做这道题”。
1. 设定参照:总体平均线:用所有学科组的平均分 $\bar{S}$ 作为“期望水平”。
2. 计算偏离差距:总体平均减去该学科组得分,得到差距 Gap_g,正差距越大越薄弱。
3. 设置阈值判定:当差距超过预设阈值 γ 时,把该学科组标记为知识盲区,进入重点观察名单。
如果说总分是“平均水位”,那么盲区就是水下的深坑。只靠总分看不出深坑的存在,学科分组分析却能把每个坑的位置和深度精确画出来,为下一步的“补习计划”提供靶点。
针对性优化策略
班主任圈出了物理这个弱科,接下来的补习计划就有了方向:物理作业加量、周末物理辅导、考试前重点复习。针对盲区制定策略,远比无差别“全面补课”高效。大模型训练中的优化,同样遵循这个逻辑。
基于学科分组分析得到的盲区清单,优化策略的第一个抓手是弱科样本加权:在训练或微调时,提高数学或法律等薄弱学科样本的采样权重,让模型在这些题目上见到更多高质量样例。第二个抓手是盲区语料补充:针对薄弱领域采集更多语料——比如补充法律条文、案例判决和法学期刊,增强模型在专业领域的知识密度。
第三个抓手是建立评测驱动迭代的闭环:每次训练后重新跑 MMLU 学科分组分析,对比前后各学科组的分数变化,看盲区是否缩小、优势是否被破坏。用公式来说,就是在损失函数上做文章:给不同学科组的损失赋予不同权重,盲区学科的权重更高,引导优化器把注意力集中到弱项上。
1. 计算各学科组损失:模型在学科组 g 上的预测损失记为 L_g,该值越大说明模型在该组越不擅长。
2. 乘以学科权重:学科组 g 的权重 ω_g 由盲区程度决定,越薄弱权重越高。
3. 加权汇总平均:将各组加权损失求和再做平均,得到整体训练目标,让模型优先学习薄弱学科。
从评测到盲区定位,再到数据补充和权重调整,最后回到评测——这条闭环让大模型的优化不再是盲人摸象。就像班主任的补习计划,每一次月考都检验补习效果,然后调整下一轮计划,学科分组分析就是这条闭环上精确的“体检仪”。
AI 应用场景
模型能力基线审计
阶段:评测分析
解决的问题:传统评测只看整体准确率,无法回答“模型上线后适合做什么任务”这个核心问题。通过 MMLU 学科分组分析,团队能在几分钟内获得模型在 STEM、法律、医学等学科组的能力剖面图,识别出哪类任务可以放心交给模型,哪类任务需要人工兜底。
具体案例:某 AI 医疗创业公司要选择一个底座模型做辅助诊断问答。候选模型 A 和 B 总分都是 71 分,但分科后 A 的医学组高达 88 分、STEM 组 74 分,而 B 的医学组只有 69 分。团队据此选定了 A,并把它定位为“擅长医学知识+具备基础推理能力”,产品上线后准确率显著高于 B 方案。
训练数据定向补充
阶段:数据工程
解决的问题:大模型知识盲区往往源于训练语料分布不均。学科分组分析给出精确的盲区学科清单,数据团队不再盲目爬取数据,而是针对薄弱学科定向采集高质量语料,用最小的数据成本补齐知识短板。
具体案例:某企业微调模型时发现数学组得分仅 42 分,远低于总体平均 65 分。数据团队定向收集了 50 万条含详细推导步骤的数学题解语料,加入第二轮微调后,模型数学组分数提升到 63 分,而其他学科组分数没有明显下降。
评测驱动的持续迭代
阶段:模型迭代与上线监控
解决的问题:模型升级时,“总分提升了但实际体验变差”的现象时有发生。学科分组分析把升级前后的成绩单对齐展示,让团队清楚地看到哪些学科提升了、哪些退步了,避免盲目追求总分而引入回退。
具体案例:某团队发布 v2 模型,总分从 70 涨到 72,看起来一切向好。分组分析却发现法律组从 81 分降到 73 分,原因是新训练阶段减少了法律语料比例。团队立即调整数据配比,在 v3 中恢复了法律组得分,同时保住了总分提升。
Python 演示
# -*- coding: utf-8 -*-"""MMLU 学科分组分析示例输入: (学科名, 是否正确) 的样本列表输出: 总体准确率、各学科准确率、知识盲区清单"""from collections import defaultdict def group_by_subject(samples): groups = defaultdict(list) for subj, correct in samples: groups[subj].append(1 if correct else 0) return groups def compute_accuracy(groups): total = sum(sum(hits) for hits in groups.values()) count = sum(len(hits) for hits in groups.values()) return total / count if count else 0.0 def subject_scores(groups): return {subj: sum(hits) / len(hits) for subj, hits in groups.items()} def find_weak_subjects(scores, overall, threshold=0.1): gaps = {subj: overall - acc for subj, acc in scores.items()} weak = [s for s, g in gaps.items() if g > threshold] return gaps, weak def main(): samples = [ ("STEM", True), ("STEM", True), ("STEM", False), ("humanities", True), ("humanities", False), ("social", False), ("social", False), ("law", False), ("law", False), ("law", True), ("medicine", True), ("medicine", True), ("math", False), ("math", False), ("math", False), ("business", True), ("business", True), ] groups = group_by_subject(samples) overall_acc = compute_accuracy(groups) scores = subject_scores(groups) gaps, weak = find_weak_subjects(scores, overall_acc) print("总体准确率: {:.2%}".format(overall_acc)) for subj in sorted(scores): flag = " <== 盲区" if subj in weak else "" print(" {:<12} {:.2%} gap={:+.2%}{}" .format(subj, scores[subj], gaps[subj], flag)) if __name__ == "__main__": main()
groups = group_by_subject(samples)按学科名把样本分入不同桶,为分组统计做准备。return total / count if count else 0.0用答对总数除以总题数得到总体准确率,避免除零错误。acc = sum(hits) / len(hits)每个学科组内部求平均,得到该学科准确率。gaps = {subj: overall - acc for subj, acc in scores.items()}计算总体平均与各学科得分的差距,差距为正表示低于平均。weak = [s for s, g in gaps.items() if g > threshold]差距超过阈值(默认 10%)的学科被标记为知识盲区。
常见误区
误区模型 MMLU 总分高,就说明它各个学科都很强,可以直接用于各种业务场景。
正解总分是各学科得分的加权平均,具有天然的“平滑效应”。一个模型可以在法律组拿 92 分、数学组只有 35 分的情况下,靠其他学科拉高总分。就像学生小明总分全班第一,物理照样不及格。只要不拆开学科组,总分就会把严重的偏科藏得严严实实。
为何常见:人类习惯用单一指标做快速判断,平均分是日常生活里最熟悉的评价方式,而学科分组分析需要额外计算和阅读成本,容易被跳过。
误区模型 A 和模型 B 的 MMLU 总分都是 70 分,产品的选型哪个便宜选哪个就行。
正解总分相同只代表两者在 57 个学科上的平均表现一致,知识分布可能完全不同。A 可能是 STEM 组 85 分、人文组 55 分,B 可能均匀分布在 70 分附近。对数学教育产品来说 A 是优品,对文史创作产品来说 B 更合适。不看分组分析就选型,等于不看成绩单项就决定谁当数学课代表。
为何常见:总分是官方公布的最显眼指标,横向对比时最容易获取,学科分布需要额外下载细粒度数据才能获得。
误区分组粒度越细越能看清模型能力,最好把 57 个学科再切成几百个子类。
正解分组过细会导致每个组样本量过小。MMLU 每个学科平均只有几十道题,如果切到子类层面,可能一组只剩三五道题,一个随机波动就能让得分变化十几分,统计结果失去可信度。合理的策略是粗细结合:大领域粗分看趋势,个别重点学科单独看。
为何常见:分辨率越高信息越丰富的直觉在图像领域成立,但统计学的样本量约束在细粒度分析中同样不可忽视。
误区模型在某学科组拿了 90 分,就可以放心让它处理该领域的真实业务。
正解MMLU 考查的是静态知识的多项选择能力,与真实业务中的开放问答、多步推理、工具调用等复杂场景存在差距。一个法律组 92 分的模型,未必能写好一份合规审查意见书。学科分组分析告诉我们的是“知识储备侧的强弱”,不能直接推导出“应用侧的成败”。
为何常见:把基准测试的高分等同于实际任务能力,是评测圈最常见的认知偏差;因为人们容易把“考试好”和“能力强”画等号。
面试题
Q1. MMLU 基准测试一共覆盖约多少个学科?
- A.约 10 个学科
- B.约 30 个学科
- C.约 57 个学科← 正确答案
- D.约 100 个学科
答案:C。MMLU 由加州大学伯克利分校等机构发布,精心设计了 57 个学科的多项选择题,覆盖 STEM、人文、社会科学、专业领域等。10 个和 30 个数量级偏小,100 个以上则夸大了覆盖面。
Q2. 只看 MMLU 总分来评估模型,最大的问题是什么?
- A.计算过程过于复杂
- B.平均分掩盖学科差异← 正确答案
- C.无法横向对比模型
- D.评测结果不够稳定
答案:B。总分是所有学科的平均,天然会把高分组和低分组“中和”掉,导致偏科被隐藏。计算复杂度、横向对比和稳定性都不是总分本身的缺陷,而平均分掩盖学科差异恰恰是学科分组分析要解决的问题。
Q3. 下列哪个指标最适合衡量模型各学科组的得分波动程度?
- A.学科组的平均分
- B.学科组成绩的众数
- C.学科组得分的方差← 正确答案
- D.学科组的题目总数
答案:C。方差衡量一组数据偏离平均值的程度,正好刻画“偏科”的严重性。平均分只给出中心趋势,众数描述出现最多的分数,题目总数与得分波动没有直接关系。
Q4. 学科分组分析中常见的分组维度有哪些?
- A.按学科类别划分← 正确答案
- B.按知识领域划分← 正确答案
- C.按题目难度分层← 正确答案
- D.按模型参数量划分
答案:ABC。学科类别(如法律组)、知识领域(如 STEM 组)、难度分层都是分析模型知识结构的常见维度。模型参数量是模型本身的属性,不属于评测数据的分组维度。
Q5. 学科组平均分公式 $S_g = \frac{1}{|D_g|}\sum_{i \in D_g} acc_i$ 中的分母代表什么?
- A.该学科组的学科总数
- B.该学科组内的样本数量← 正确答案
- C.该学科组的模型参数量
- D.全部测试集的样本数量
答案:B。$|D_g|$ 表示学科组 g 内包含的样本数,即该组有多少道题。统计学上,求和除以样本量才能得到组内平均分。学科总数、模型参数量、全局样本量都不参与该公式的分母运算。
Q6. 某学科组的相对优势 Adv_g 大于 0,说明什么?
- A.该学科组水平与总体平均持平
- B.该学科组水平显著低于总体平均
- C.该学科组水平显著高于总体平均← 正确答案
- D.信息不足,无法判断高低
答案:C。相对优势定义为学科组平均分减去总体平均分。结果大于 0 意味着该学科组得分超过模型自身整体平均,属于优势学科;小于 0 则偏弱,等于 0 才说明与整体持平。
Q7. 关于 z-score 标准化在学科分组分析中的作用,下列说法正确的有哪些?
- A.能消除不同学科组难度差异带来的偏差← 正确答案
- B.标准化后所有学科组的均值变为 0← 正确答案
- C.标准化后学科组数据的方差固定为 1← 正确答案
- D.标准化后可以直接用于模型总排名
答案:ABC。z-score 用“距总体均值几个标准差”来衡量位置,让不同难度、不同量纲的学科组变得可比,标准化后均值恒为 0、方差恒为 1。但它并不直接给出总排名,排名需要额外排序操作。
Q8. 判定某个学科组是否为“知识盲区”,最合理的做法是?
- A.该学科组平均分高于总体平均
- B.该学科组平均分低于总体平均且差距超过阈值← 正确答案
- C.该学科组平均分低于 60 分
- D.任何学科组都可以判为盲区
答案:B。盲区的核心是“显著低于模型自身平均水平”,需要与总体平均线比较并设置差距阈值 γ。高于平均当然不是盲区;固定 60 分线忽略了学科难度差异;任意判定则毫无分析价值。
Q9. 训练阶段利用学科分组分析的结果,可以采取哪些优化措施?
- A.增加薄弱学科样本的采样权重← 正确答案
- B.删除优势学科样本以减少冗余
- C.定向补充薄弱学科领域的训练语料← 正确答案
- D.减少评测迭代的频率以节约算力
答案:AC。针对盲区,正确做法是加权和对症下药地补充语料。删除优势学科样本会损害模型已有能力;降低评测频率会让反馈闭环变慢,不是合理优化方向。
Q10. 某个学科组只有 5 道测试题时,分组统计面临的最大风险是什么?
- A.结论精度反而更高
- B.随机波动可能带来巨大误差← 正确答案
- C.模型计算速度会明显变慢
- D.该学科数据永远无法收集
答案:B。样本量过小时,个别题目的答对与否就能让组均分大幅震荡。比如 5 题组多答对 1 题,正确率就跳升 20%,这样的统计结果不可靠。计算速度、数据可收集性与样本量无关,而“精度更高”恰恰与统计规律相反。