多模态大模型专家级评估:MMMU与MMMU-Pro基准深度解析与实践指南
1. 项目概述:一个为“专家级”多模态AI设计的“高考”
如果你最近在关注多模态大模型(LMMs)的进展,可能会发现一个现象:很多模型在常见的图像描述、视觉问答(VQA)基准上已经取得了接近甚至超越人类的分数。这不禁让人疑惑,这些模型真的“理解”了图像和文本吗?还是说,它们只是在拟合我们设计得过于简单的测试题?
这正是MMMU(Massive Multi-discipline Multimodal Understanding)及其升级版MMMU-Pro诞生的背景。简单来说,你可以把它理解为给AI模型设计的一场“多学科高考”。它不再问你“图片里有什么”,而是直接甩给你一道大学级别的考题,比如一张复杂的电路图、一份财务报表、一首乐谱的片段,或者一个化学反应式,然后让你基于这些视觉信息,结合领域知识进行推理和解答。
我最初接触这个项目,是因为在评估自己团队开发的模型时,深感现有基准的局限性。像VQAv2、ScienceQA这些数据集,要么问题过于简单,要么领域过于单一,很难真正衡量模型在复杂、专业场景下的综合能力。MMMU的出现,就像是为这个领域引入了一个新的“标尺”——一个更接近真实世界专家任务的标尺。
这个基准的核心价值在于其大规模、多学科和高难度。它包含了超过1.15万个来自真实大学教材、考试和习题的多模态问题,横跨艺术设计、商业、科学、健康医学、人文社科、技术与工程六大核心学科,细分到30个科目和183个子领域。题目中的图像类型多达32种,从常见的图表、地图,到专业的化学结构式、乐谱、机械图纸,几乎涵盖了所有需要视觉理解的专业场景。
最让我印象深刻的是,即使是目前公认最强的GPT-4V模型,在MMMU上的准确率也只有56%左右。这个数字清晰地告诉我们:当前的多模态模型距离“专家级AGI”还有很长的路要走。而MMMU-Pro在此基础上更进一步,通过一系列严谨的设计(如过滤纯文本可答问题、增加干扰选项、将问题文本也嵌入图像),将模型的成绩“打回原形”,各大模型准确率骤降至16.8%到26.9%之间,这为我们揭示了模型能力中更本质的短板。
接下来,我将从一个实践者的角度,深入拆解MMMU/MMMU-Pro的设计思路、使用方法,并分享在本地进行评估和参与官方排行榜时,你可能需要知道的一切细节与避坑指南。
2. 核心设计思路:为什么说它是“专家级”的试金石?
要理解MMMU的价值,我们得先看看它解决了现有基准的哪些痛点。在我过去几年的模型评估工作中,常常遇到以下几个问题:
- “看图说话”陷阱:许多VQA数据集的问题答案,很大程度上可以从问题文本本身推断出来,或者图像只是提供了非常浅层的上下文。模型可能不需要真正理解图像细节就能蒙对答案。
- 领域单一性:大多数基准集中在1-2个领域(如通用视觉、科学QA),模型在一个领域表现好,不代表它能处理跨学科的复杂知识。
- 缺乏高阶推理:问题多停留在识别、描述层面,很少需要结合领域知识进行多步逻辑推理、计算或批判性思考。
MMMU的设计直击这些痛点。它的核心思路是:构建一个需要“领域知识”和“深度推理”才能解决的多模态问题集合。这听起来简单,但实现起来需要精心的设计。
2.1 数据收集与构建:从“题海”到“精选题库”
项目团队的数据收集策略非常务实。他们没有从头生成问题,而是直接从真实世界的知识载体中挖掘,这保证了问题的真实性和难度。主要来源包括:
- 大学教科书与习题集:这是核心来源,确保了问题的学术性和专业性。
- 公开的考试与测验:如AP课程考试、职业资格考试题目。
- 在线教育平台:如Coursera, edX等平台课程中的测验题。
注意:这里涉及一个非常关键的版权问题。项目方在构建数据集时,明确要求标注员严格遵守原始数据源的版权和许可协议,避免使用禁止复制和再分发的网站材料。他们在项目主页也提供了联系方式,承诺一旦发现侵权样本会立即移除。这一点对于任何希望构建类似数据集的研究者来说都是重要的警示:合规性是第一位的。
收集到原始材料后,团队进行了严格的筛选和清洗:
- 模态筛选:只保留那些必须同时理解图像和文本才能正确回答的问题。如果一个问题仅凭文本或仅凭图像就能解答,它就会被剔除。这是保证基准“多模态”属性的关键一步。
- 质量审核:由相关领域的学生或研究者对问题进行审核,确保问题清晰、答案正确、图像质量合格。
- 格式统一:将所有问题转化为统一的多项选择题格式。这虽然简化了评估的复杂性(只需判断选项),但题目的内容本身丝毫没有简化。选项的设计也很有讲究,干扰项往往是与正确答案在知识上相关但细微处有错的选项,增加了区分度。
2.2 MMMU-Pro:让评估更“残酷”也更“真实”
如果说MMMU是高考,那么MMMU-Pro就是高考的“加强版”,它通过三个步骤,进一步剥离了模型可能存在的“侥幸”成分:
过滤纯文本可答问题:这是对MMMU的第一次提纯。团队使用了一个强大的纯文本模型(例如GPT-4),让它仅根据问题文本(不提供图像)进行作答。如果文本模型能达到很高的准确率,说明该问题可能并不强制依赖图像信息。这类问题会被从MMMU-Pro中移除。这一步确保了基准中的每一个问题都真正需要视觉理解。
增强候选选项:在原有选择题选项的基础上,人工添加更多看似合理的“迷惑项”。例如,如果原题是问“根据图表,哪一年的增长率最高?”,除了正确的年份和明显错误的年份,可能会加入一个“增长率第二高”的年份作为新选项。这迫使模型必须进行更精确的计算和推理,而不是靠排除明显错误答案来猜。
视觉唯一输入:这是MMMU-Pro最具特色的设计。在MMMU中,问题和图像是分开的(例如,文本问题+图片URL)。而在MMMU-Pro中,问题文本被直接渲染到图像上,与原有的图表、公式等视觉元素融为一体。模型接收到的只有一个合并后的图像。这意味着模型必须像人一样,具备从一张复杂的图片中同时“读取”文字信息和“解析”非文字视觉元素的能力。这个设置模拟了人类阅读教科书、分析带标注的图表时的真实认知过程,极大地增加了难度。
下表对比了MMMU和MMMU-Pro的核心区别:
| 特性 | MMMU | MMMU-Pro |
|---|---|---|
| 核心目标 | 评估多学科知识下的多模态理解与推理 | 评估更鲁棒、更接近真实场景的多模态理解 |
| 问题筛选 | 需同时理解图文 | 在MMMU基础上,额外过滤掉纯文本模型可答的问题 |
| 输入形式 | 图像与问题文本分离输入 | 问题文本被嵌入图像中,仅提供单张图像作为输入 |
| 选项设计 | 原始选择题选项 | 在原始选项基础上,人工添加了更多强迷惑性选项 |
| 评估难度 | 高(GPT-4V ~56%) | 极高(最佳模型 ~27%) |
| 模拟场景 | 开卷考试,可以分别看题和看图 | 闭卷考试,所有信息都在一张纸上 |
这种设计使得MMMU-Pro的评估结果更能反映模型内在的多模态融合与推理能力,而不仅仅是它在特定数据格式上的表现。
3. 数据集详解与本地使用指南
对于想要使用MMMU/MMMU-Pro来评测自己模型的研究者和开发者来说,第一步就是理解数据集的结构并能在本地跑通评估流程。官方代码库提供了清晰的指引,但其中有些细节和潜在坑点,我这里结合自己的实践经验详细说明。
3.1 数据集结构与获取
数据集托管在Hugging Face Datasets上,这是目前最方便的方式。
- MMMU数据集:
https://huggingface.co/datasets/MMMU/MMMU - MMMU-Pro数据集:
https://huggingface.co/datasets/MMMU/MMMU_Pro
使用datasets库可以轻松加载:
from datasets import load_dataset # 加载MMMU验证集 mmmu_val = load_dataset("MMMU/MMMU", "validation") # 加载MMMU-Pro验证集 mmmu_pro_val = load_dataset("MMMU/MMMU_Pro", "validation")每个样本通常包含以下关键字段(以MMMU为例):
id: 样本唯一标识符。question: 问题文本。options: 一个列表,包含所有选项文本,如['A. ...', 'B. ...', ...]。answer: 正确答案的索引(如0代表选项A)或字母(如'A')。image: 一个PIL.Image对象,包含问题所需的图像。category: 所属的一级学科类别(如Art and Design)。task: 所属的二级学科任务(如Art History)。explanation(部分集合有): 对答案的详细解释。
数据集被划分为三个部分,用途分明:
- 开发集 (Dev Set, 150条):用于小样本学习(Few-shot Learning)或上下文学习(In-context Learning)。你可以从这里面挑选一些例子,作为提示词(Prompt)的一部分输入给模型,让模型学会解题格式和风格。
- 验证集 (Val Set, 900条):用于模型调试、超参数选择和快速评估。这是你本地迭代的主要依据。所有模型的论文中报告的“Val”性能都基于此集合。
- 测试集 (Test Set, 10500条):用于最终评估和排行榜排名。注意:在2026年2月12日之前,测试集的答案是不公开的,评估必须在官方的EvalAI平台上进行。而在此日期之后,官方已经发布了测试集的答案(
answer_dict_test.json),这意味着你现在可以在本地对测试集进行完整的评估,但用于排行榜提交的官方流程可能仍有独立要求。
3.2 本地评估流程拆解
本地评估的核心是让你的模型对数据集中的每个样本生成一个答案(选项字母),然后将你的预测结果与标准答案进行比较,计算准确率。官方仓库(https://github.com/MMMU-Benchmark/MMMU)提供了评估脚本的参考实现。其核心步骤可以概括为以下流程图所示的过程:
graph TD A[开始评估] --> B[加载数据集<br>(Dev/Val/Test)]; B --> C[遍历每个样本]; C --> D{数据集类型?}; D -- MMMU --> E[构建Prompt:<br>文本问题 + 图像]; D -- MMMU-Pro --> F[构建Prompt:<br>仅包含嵌入问题的图像]; E --> G[调用多模态大模型<br>(API或本地)生成回答]; F --> G; G --> H[后处理模型输出:<br>提取选项字母]; H --> I[保存预测结果<br>(ID: 预测答案)]; C --> J[所有样本处理完毕?]; J -- 否 --> C; J -- 是 --> K[加载标准答案文件]; I --> L[计算指标:<br>准确率、分科准确率]; K --> L; L --> M[输出评估报告];下面,我们针对图中的几个关键环节进行深入探讨。
1. 构建模型输入(Prompting)这是影响模型表现的关键。对于MMMU,你需要将question文本和image图像一起组织成模型能接受的格式。一个常见的Prompt模板如下:
请回答以下选择题。首先仔细分析图像,然后结合问题做出选择。 图像:[此处插入图像] 问题:{question} 选项: {options} 请只输出答案的选项字母,例如‘A’。对于MMMU-Pro,由于问题文本已在图像中,你的Prompt可以更简洁,直接让模型分析图像即可。
实操心得:Prompt的设计需要细微调整。例如,加上“逐步思考”或“让我们一步步推理”的指令(即Chain-of-Thought, CoT),通常会提升需要复杂推理题目的性能。你可以用开发集(Dev Set)快速尝试几种不同的Prompt模板,看看哪种在你的模型上效果最好。
2. 调用模型生成答案你需要将构建好的Prompt和图像输入到你想要评估的多模态大模型中。这可能是:
- 商业API:如OpenAI的GPT-4V、Anthropic的Claude-3、Google的Gemini等。你需要处理API调用、速率限制和错误重试。
- 开源模型:如LLaVA-Next、Qwen-VL、InternVL等。你需要在本地或自己的服务器上部署模型,并使用相应的推理库(如vLLM, transformers)进行调用。
3. 后处理与答案提取模型生成的原始输出可能是“答案是A”,或者一段思考后以“因此,选A”结尾。你需要编写一个稳健的后处理函数(通常用正则表达式),从模型输出中提取出A、B、C、D这样的单个字母。
4. 计算准确率收集完所有样本的预测答案后,将其与标准答案对比。计算整体准确率(Overall Accuracy)是基本操作。但MMMU更有价值的是分学科准确率。你应该分别计算每个一级学科(如Art and Design, Science等)下的准确率,这能帮你清晰了解模型的优势学科和短板。
# 一个简单的计算示例 def calculate_accuracy(predictions, ground_truth): correct = 0 total = len(predictions) category_correct = {} category_total = {} for id, pred in predictions.items(): gt = ground_truth[id]['answer'] # 假设ground_truth是字典 cat = ground_truth[id]['category'] if pred == gt: correct += 1 category_correct[cat] = category_correct.get(cat, 0) + 1 category_total[cat] = category_total.get(cat, 0) + 1 overall_acc = correct / total category_acc = {cat: category_correct.get(cat, 0)/category_total[cat] for cat in category_total} return overall_acc, category_acc3.3 使用官方评估脚本
官方仓库的eval目录下提供了更完整的评估脚本。我强烈建议以官方脚本为基础进行修改,因为它处理了所有细节,比如数据加载、答案格式对齐、分科统计等。你的主要工作就是实现一个“模型推理器”,即一个函数,它接收问题数据,返回模型预测的答案字母。
避坑指南:注意数据集中的答案格式。有些可能是整数索引(0,1,2,3),有些可能是字符串字母(‘A’,‘B’,‘C’,‘D’)。在比较和计算时务必统一。官方提供的
answer_dict_val.json和answer_dict_test.json文件通常将答案存储为字母。
4. 参与官方排行榜与模型提交
虽然现在可以本地评估测试集,但如果你想在官方排行榜(Leaderboard)上与其他模型一较高下,或者让你的模型结果被社区广泛认可,了解官方的提交流程仍然很重要。
4.1 排行榜与历史提交方式
官方排行榜曾托管在EvalAI平台上(挑战页面通常已关闭,以官方最新通知为准)。参与流程一般如下:
- 注册与报名:在EvalAI上注册账号,并报名参加MMMU挑战赛。
- 生成测试集预测:在本地,使用你的模型对不提供答案的测试集生成预测结果。你需要严格按照测试集的文件列表顺序,生成一个预测文件(如
predictions.json),格式为{“id_1”: “A”, “id_2”: “B”, …}。 - 提交结果:将预测文件上传到EvalAI平台。平台的后台会自动将你的预测与隐藏的标准答案对比,计算出各项分数并更新到排行榜上。
- 限制:通常会有每日或每周的提交次数限制,以防止对测试集进行过度拟合。
重要更新:根据项目首页的新闻(2026-02-12),测试集的答案已经发布。这意味着EvalAI的盲测提交可能不再是唯一方式,或者平台规则已变。你需要密切关注项目GitHub仓库或主页的最新说明,以了解当前官方的排名提交机制。很可能现在鼓励研究者直接在论文中报告基于公开测试集计算的结果,并在Leaderboard上通过引用论文进行登记。
4.2 如何解读排行榜结果
查看排行榜时,不要只看总排名和整体准确率。深入分析分科成绩至关重要:
- 识别模型强项:如果一个模型在“Business”和“Tech & Engineering”上表现突出,但在“Art & Design”上表现很差,这可能意味着它的训练数据更偏向于逻辑、图表类,而缺乏艺术史、设计原理方面的知识。
- 分析模型类型:比较纯视觉语言模型(如LLaVA)与那些集成了外部工具(如计算器、代码解释器)的模型之间的表现差异。后者可能在需要计算的“Science”科目上有优势。
- 关注MMMU vs MMMU-Pro:对比同一个模型在两个基准上的表现落差,可以直观看出该模型在“纯视觉理解”和“抗干扰推理”上的能力差距。落差越大,说明模型在MMMU上的成绩可能更多依赖于文本线索或简单的模式匹配。
5. 实践中的挑战与解决方案
在实际使用MMMU进行评估的过程中,我遇到了不少挑战,也总结出一些经验。
5.1 模型推理的工程挑战
长上下文与高分辨率图像:MMMU中的许多图像(如详细的地图、复杂的电路图)包含大量细节。为了不错失关键信息,你需要以高分辨率处理图像。但这会显著增加模型的输入token数量,可能导致:
- API成本剧增:对于按token收费的API,评估一次完整测试集费用不菲。
- 显存溢出:对于本地部署的大模型,高分辨率图像可能轻易撑爆GPU显存。
- 解决方案:
- 智能切分:对于非常大的图像,可以尝试将其分割成多个重叠的区块,分别输入模型,再综合各区块的答案信息。但这会引入额外的逻辑复杂性。
- 有损压缩:在保持关键信息可读的前提下,适当降低图像分辨率或采用更高效的编码。需要谨慎测试压缩对精度的影响。
- 使用视觉编码器:许多开源LMM采用Vision Transformer (ViT) 作为视觉编码器,它有固定的输入尺寸(如224x224, 336x336, 448x448)。你需要了解你的模型使用哪种预处理方式,并确保你的图像预处理流程与之匹配。
提示工程(Prompt Engineering):如前所述,Prompt对结果影响巨大。除了尝试CoT,还可以:
- 角色扮演:让模型扮演“某学科专家”,有时能激发其相关知识。
- 格式强化:在Prompt中非常严格地规定输出格式(如“你的回答必须是单个大写字母,不要有任何其他文本。”),可以减少后处理错误。
- 少样本示例:从开发集中挑选几个不同学科的典型样例,连同解题过程一起放入Prompt,能有效引导模型。
5.2 结果分析与模型改进方向
评估不是终点,而是诊断模型问题的起点。拿到评估结果后,应该怎么做?
错误分析(Error Analysis):这是最重要的一步。不要只盯着准确率数字。随机采样几百个模型预测错误的样本,人工逐一检查。错误主要集中在哪里?
- 知识性错误:模型根本不具备回答该问题所需的领域知识(如不认识某个历史事件、不理解某个物理公式)。这说明需要扩充模型在该领域的预训练或指令微调数据。
- 感知性错误:模型未能从图像中正确提取信息(如看错了图表上的数据点、误读了电路符号)。这说明模型的视觉编码器或视觉-语言对齐能力有待加强。
- 推理性错误:模型具备了相关知识和感知,但逻辑推理链条出错(如计算错误、因果推断错误)。这可能需要通过数学、逻辑相关的数据进一步训练,或者引入外部工具(如计算器、符号推理引擎)。
- 格式性错误:模型理解了内容,但输出格式不符合要求(如输出了完整句子而非单个字母)。这可以通过强化指令遵循训练来解决。
分学科针对性优化:根据错误分析的结果,你可以有针对性地收集或生成特定学科的数据,对模型进行继续预训练或指令微调。例如,如果模型在“Health & Medicine”上表现差,可以引入医学教科书、解剖图谱、病例报告等多模态数据。
集成外部知识与工具:对于MMMU中大量需要计算、符号操作或事实核查的题目,纯端到端的模型有其局限性。可以考虑为模型配备“外挂”:
- 检索增强:当遇到需要最新或非常用知识的问题时,让模型先调用搜索引擎或知识库检索相关信息。
- 代码执行:对于数学计算、数据处理题,让模型生成Python代码并执行,将结果作为答案的一部分。
- 专业工具:对于化学结构式、乐谱等,可以连接专业的解析库来辅助分析。
5.3 常见问题与排查清单
以下是我在多次评估中遇到的一些典型问题及解决方法:
| 问题现象 | 可能原因 | 排查与解决思路 |
|---|---|---|
| 整体准确率极低(<10%) | 1. 数据加载/预处理错误 2. Prompt格式严重不符模型预期 3. 模型权重加载错误或版本不对 | 1. 先用开发集的几个样本手动测试,确保图像能正常显示,问题文本读取正确。 2. 检查Prompt是否与模型训练时的指令格式匹配。尝试最简单的Prompt(如“请回答:”+问题)。 3. 确认模型名称、路径正确,并成功加载。 |
| 准确率波动大,同一模型多次评估结果不同 | 1. 模型生成具有随机性(温度参数>0) 2. 图像预处理存在随机性(如随机裁剪、缩放) | 1. 评估时,将模型的生成温度(temperature)设置为0,以确保确定性输出。 2. 固定图像预处理的所有随机种子,确保每次评估的输入完全一致。 |
| 后处理提取答案失败率高 | 1. 模型输出格式不稳定 2. 正则表达式覆盖不全 | 1. 分析一批模型的原始输出,观察其规律。可能需要在Prompt中更严格地约束格式。 2. 改进后处理脚本,采用更鲁棒的匹配方式(如寻找最后一个出现的选项字母)。 |
| 在MMMU上表现尚可,但在MMMU-Pro上暴跌 | 1. 模型严重依赖文本问题中的关键词 2. 模型OCR能力弱,无法有效读取嵌入图像的文字 | 1. 这正说明了MMMU-Pro的价值。你需要专门增强模型的视觉问答能力,而非图文分离的QA能力。 2. 考虑在训练数据中加入更多“文字在图中”的样本,或使用更强的视觉编码器。 |
| 评估速度非常慢 | 1. 模型本身推理慢 2. 没有使用批处理 3. 网络延迟(API调用) | 1. 对于开源模型,尝试使用更快的推理后端(如vLLM, TensorRT-LLM)或量化版本。 2. 如果模型支持,将多个样本组成一个批次(batch)进行推理。 3. 对于API,合理设置并发数和重试机制,并考虑使用异步调用。 |
最后,我想分享一点个人体会。MMMU/MMMU-Pro的出现,像一面镜子,照出了当前多模态大模型“华而不实”的一面。它在提醒我们,让模型描述一幅画很美很容易,但让它看懂一张财务报表并做出分析,或者理解一首乐谱的情感,还有很长的路要走。这个基准不仅仅是一个排行榜,更是一个研究方向的指引。它告诉我们,未来的多模态模型需要更深的领域知识、更严谨的推理能力,以及更紧密的视觉-语言融合。对于从业者而言,与其追逐在简单基准上的分数,不如沉下心来,用MMMU这样的基准认真检验自己的模型,分析它的失败案例,那才是通向真正“智能”的路径。
