1. 多模态评估为什么难:感知和认知根本不是同一个量纲
先说一个经常被忽视的事实:我们嘴上说的“多模态大模型很强”,其实大部分时候指的是“它能看图说话”“能听懂语音”,也就是感知层面的能力。但真正拉开模型档次、决定它能不能在真实业务里落地的,是它在认知层面的表现——比如能不能理解图表背后的业务含义、能不能根据一张模糊的现场照片推理出故障原因、能不能结合图文信息做多步判断。
这就引出了多模态评估最核心的矛盾:感知能力和认知能力,度量方式完全不同。
感知层面,我们测的是“机器看见了什么”。图像分类准不准、语音转写错字率多少、目标检测框得准不准,这些都是相对客观的、有明确对错的指标。哪怕模型内部是黑盒,我们也能通过人工标注好的答案,用准确率、召回率这类硬指标把它量出来。
认知层面,我们测的是“机器理解了什么意思”。这件事就没有唯一标准答案了。比如给模型一张“冰箱里塞满食物”的照片,问它“晚餐该做什么”,模型说“火锅”和“三明治”可能都对,但理由完全不一样。这时候用传统的准确率指标去打分,就显得很苍白。
这个差异不是简单的“难度不同”,而是度量的本质不同。感知度量是在测映射关系——输入到输出的对应是否准确;认知度量是在测推理结构——模型有没有在内部建立起概念之间的关联,并且能沿着这个关联做多步推导。
我见过不少团队在做多模态模型时,评测方案就一张表:图像描述CIDEr多少分、视觉问答准确率多少、跨模态检索Recall@K多少。跑完一看分数都挺高,模型一上真实业务几乎没法用。原因很简单:这些分数全部停留在感知层,而业务要的全是认知层的东西。
所以这篇文章想认真聊清楚一件事:如果我们要给一个多模态大模型做评估,怎么把“感知”和“认知”分开测、用不同的方法测、最后再把两个维度的结果拼成一个能指导模型迭代的整体方案。
2. 感知层度量:从这里开始量化机器的“眼睛和耳朵”
感知层是评估体系的底座,它回答的是一个朴素的问题:模型能不能准确地把多模态输入转成可计算的表示。这个层面的评估相对成熟,但恰恰因为成熟,很多人容易犯“唯指标论”的毛病。
2.1 单模态感知指标:先确保耳朵和眼睛没坏
评估一个多模态模型,第一步永远是拆开看单模态的底子。视觉编码器好不好,我们通常会看它在下游任务上的表现——图像分类、目标检测、图像分割。语音部分则看语音识别准确率和说话人识别率。这些指标的特点是有标准答案、可复现、对算力要求相对可控。
以图像理解为例,常用的指标有这么几个梯队:
| 指标层级 | 典型指标 | 度量内容 | 弱点 |
|---|---|---|---|
| 像素级 | PSNR、SSIM | 生成图像与参考图的相似度 | 与语义理解无关 |
| 区域级 | mAP、IoU | 检测和分割的定位精度 | 依赖标注框质量 |
| 语义级 | Top-1 Accuracy、Macro-F1 | 图像分类的正确性 | 类别体系影响大 |
这里我最想提醒的是:语义级指标比像素级指标更能反映模型的实际感知能力,但前提是类别体系设计得合理。我见过有人用ImageNet-1K的分类准确率去衡量一个多模态模型的视觉感知,结果模型分数不错,但实际业务里的物体类别和ImageNet根本不重叠。你测的和你用的,完全不是一回事。
正确的做法是构建一个贴近目标场景的感知评估集。比如你的模型要给电商场景做图文匹配,那就应该收集电商图片和商品属性标签,按类目分层采样,而不是用通用数据集凑数。这样测出来的准确率,才对模型迭代有真实指导意义。
音频和视频模态同理。语音识别要看领域词汇的覆盖度,不能只看通用错字率;视频理解要看时序建模能力是否到位,不能只看单帧抽帧的结果。有一个很常见的坑:模型在抽帧视频上表现优异,一换成连续视频流就崩——因为感知层没测时序一致性,模型根本没“看见”运动信息。
2.2 跨模态感知对齐:嵌入空间里的距离度量
单模态底座没问题之后,多模态模型的核心能力就变成了“对齐”——把图像、文本、语音嵌入到同一个语义空间。这个层面对齐得好不好,最常用的度量方式是跨模态检索:给定一张图,能不能从文本库里找出对应描述;给定一句话,能不能从图库里找出对应的图。
检索指标主要是Recall@K和Mean Reciprocal Rank。这些东西大家都很熟,我就不展开了。但我必须说一个实操中的经验:千万别只看Top-1的准确率,一定要看Recall@10甚至Recall@30。理由很简单——很多多模态场景,候选集里本就有多个正确答案,Top-1只反映模型最自信的选择,Recall@K才反映模型的召回能力边界。
另外,嵌入空间的评估还有一个“看不见的维度”:方向一致性。也就是说,模型对不同模态的编码结果,在空间里的相对位置是否有语义规律。举个我实测过的例子:给模型输入“一只白色的猫”,再输入“一只黑色的猫”,两个文本向量之间的距离应该小于“一只白色的猫”和“一辆白色的车”之间的距离。如果这个规律都不满足,那说明跨模态对齐只做到了“表面上匹配”,没学到真正的语义结构。
检查这个性质的简单办法,是构造语义三元组:锚点、正样本、负样本。锚点是“一只白色的猫”,正样本是“一只黑色的猫”,负样本是“一辆白色的车”。好模型的嵌入空间中,锚点到正样本距离小于锚点到负样本距离的比例,应该在90%以上。这个指标叫Triplet Accuracy,不复杂,但很多团队从来没测过。
3. 认知层度量:模型到底有没有“真的懂”
感知层过了之后,真正的硬仗来了。认知层的评估,目的是回答“模型对内容有没有建立真正的理解”。这个理解不体现在“识别出画面里有一只猫”,而体现在“知道一只猫在什么场景下会做什么事、为什么画面里会出现这只猫、以及接下来大概率会发生什么”。
3.1 从VQA到推理链:答案正确不等于推理正确
视觉问答(VQA)是认知评估最经典的形态,但也是最容易被“刷分”的形态。原因很直接——VQA问题通常只需要答案,不需要推理过程。模型完全可以靠训练数据里的统计规律、语言先验,把大部分问题蒙对。那种“地球上唯一的大陆叫什么”“天空为什么是蓝的”这类高频常识题,模型不需要真正看图,光靠文本分布就能答对。
所以我在搭建认知评估体系时,不再把VQA当成“问一句答一句”,而是改造成推理链任务:让模型输出从观察、假设、验证到结论的完整推理步骤,然后对推理过程中的关键节点逐段打分。这里用的指标不是简单的答案准确率,而是每步推理与标准推理链的一致性。
这个评估方式在实践中非常有效。我用它测过两个VQA准确率几乎一样的模型,拆开推理链一看,高下立判:一个确实在“看清图→定位关键区域→结合上下文→推出结论”,另一个只是从文本里“背”出了答案。前者的推理链正确率能到75%,后者只有30%出头。
具体打分时,我会把一条推理链拆成四段:
- 观察段:是否正确提到了图像中的关键实体和属性
- 关联段:是否正确建立了实体之间的关系(空间关系、因果关联等)
- 推断段:是否基于观察和关联给出了合理的中间结论
- 结论段:最终答案是否与前面的推理保持一致,并且正确回答提问
每段可以设置独立的得分点,最后加权求和,得出这个模型在“推理路径”上的综合得分。这么做有个额外好处:模型哪里弱一目了然。如果观察段失分多,就往感知层去优化;如果推断段失分多,那是逻辑能力的问题,和数据规模的关系往往更大。
3.2 常识与反事实:认知评估里最有信息量的探针
除了推理链,我还强烈推荐两类认知评测任务:常识推理和反事实推理。
常识推理测的是模型对世界运行规律的基本把握。比如给一张“一个人撑伞在雨中跑”的图,问他“这个人最可能去干什么”,好模型应该结合“下雨”“奔跑”“撑伞”三个要素,推出“他在赶路躲避淋雨”,而不是只泛泛地说“他在散步”。
反事实推理更有意思,它测的是模型的因果建模能力,而不是关联记忆能力。比如还是这张撑伞图,问“如果没有雨伞,这个人会怎样”,模型应该答“他大概率会被淋湿,或者加快脚步找地方避雨”。这个过程中模型不能用训练数据里的直接答案,必须在内部把“伞”这个因素去掉,推演剩余因素的结果。
我管这类题目叫“认知探针”,因为它们就像探针一样,能精准探测模型的哪个环节是真理解、哪个环节是死记硬背。识别统计相关性和因果结构,是认知评估里最值钱的测试点。
实践中,我建议每个评测集里都要混入20%~30%的反事实样本。这个比例不是拍脑袋定的,是经过对比测试得出的。比例太低,模型的因果推理缺陷暴露不出来;比例太高,评估集本身又会失真,因为它偏离真实业务分布,测出来的分数在实战里没有参考意义。
3.3 认知评测的评分方式:人工、模型、规则的三层结构
认知评测没有“标准答案”,那谁来当裁判?我个人的做法是三层评分结构,各有分工:
规则评分负责客观部分——答案是否包含某个关键词、是否指定了正确的实体。这部分用正则表达式和字典匹配即可,速度快、成本低。
模型评分负责语义相似度——答案表达不同但意思相同。用一个评分模型来做语义匹配,比单纯算BLEU或ROUGE要可靠得多,因为认知层的答案天然允许多样化表达。
人工评分负责终极裁决——逻辑合理性、推理链完整性这类偏主观且高风险的判断,只能靠人来兜底。
我特别不建议在认知评估里只依赖任何一种单层评分。规则太死、模型可能偏、人工太贵,三层结合才能兼顾效果和成本。实际落地上,通常先让规则层和模型层跑完,把得分低、分歧大的样本捞出来给人工看,而不是所有样本都人工过一遍,否则预算根本扛不住。
4. 跨模态联结评估:真正拉开差距的维度
感知和认知分开测完之后,还缺一个非常关键的维度:跨模态联结。为什么单说它?因为多模态模型的独特价值,不在于单模态多强,而在于把不同模态的信息缝合成一个整体。很多模型单看视觉很强、语言也很强,一混合就露馅,这就是联结能力弱。
4.1 信息互补场景:1+1>2到底成不成立
联结能力最典型的测试场景是“单模态信息不足、必须双模态配合才能解”的任务。
举个例子:给一张画面模糊、甚至只露出半个物体的照片,同时配上一句残缺的语音描述,问模型照片里的人正在做什么。这种任务单看图片或单听语音都答不出来,只有把两个模态的信息拼起来,互相补足残缺部分,才能推理出正确答案。
我给这类任务起名叫“互补推理任务”,评估指标上直接用正确率就够——因为正确答案是明确的,关键是看模型有没有能力“把两个弱信号组合成一个强信号”。
这类任务非常能区分模型档次。我测过的模型里,感知很强但联结弱的模型,这类正确率通常不到50%;真正做到了模态深度融合的模型,正确率能到70%以上。差距主要来自模型内部是用简单的拼接(concatenation)还是真正的交叉注意力来融合特征。
4.2 模态冲突场景:考验模型的“协调机制”
联结能力不只体现在互补上,还体现在冲突处理上。给出一张“晴天海边”的照片,文字却写“窗外正在下大雪”,模型应该怎么回应?
- 善于协调的模型会说:图片和文字不一致,图片显示晴天,但文字描述的是大雪,可能是两个场景。
- 联结能力差的模型会有两种表现——要么忽略图片死信文字,要么忽略文字死信图片,都不敢承认信息出现了矛盾。
冲突场景是评估联结能力的“照妖镜”,因为模型必须同时感知两个模态的信息,并且建立一个“一致性判断”机制。这个机制弱的话,模型面对矛盾信息时只会强行输出一个模态的结果,假装另一个模态不存在。
评测冲突场景时,我会额外统计一个指标:矛盾识别率。也就是在所有图文不一致的样本里,模型明确指出“信息存在冲突”的比例。一个成熟的通用多模态模型,这个识别率应该达到80%以上。如果低于50%,说明联结架构大概率有问题,不是因为数据少,而是融合策略本身不对。
4.3 联结能力对业务场景的映射关系
做联结评估的最终目的,不是让模型在测试集上跳舞,而是找到它和真实业务的对应关系。我自己常用的做法是绘制能力映射表:
| 评估场景 | 考察能力 | 对应业务场景 |
|---|---|---|
| 互补推理 | 跨模态信息补充 | 多源情报研判、产品缺陷分析 |
| 冲突识别 | 跨模态一致性校验 | 内容审核、防伪核验、舆情监控 |
| 指代消解 | 跨模态引用理解 | 智能助手、图像编辑指令理解 |
举个例子,给智能助手发指令“把这个改成蓝色的”,模型需要知道“这个”指的是图片里哪个物体。这就不是单模态的问题,必须在语言指令和视觉元素之间建立指代关系。评测里专门设计指代消解任务,业务场景的映射价值非常直接。
我见过不少团队只测了前两类任务,就把模型推到线上,结果在指代消解上翻车翻得很惨。所以我的经验是,多模态评估至少要让这三类联结任务共存,不要因为某个任务短期测不出来就砍掉,联结能力是需要长期迭代才能慢慢长出来的。
5. 把指标拼成体系:总分怎么算、权重怎么分、结论怎么读
前面讲了感知、认知、联结三个层面的大量指标,现在问题来了:这些指标怎么拼成一个整体评估体系?如果不做汇总,每个维度都测一遍,模型整体强不强还是说不清楚。
5.1 分层加权:感知占多少、认知占多少,取决于业务目标
首先要明确一点:没有“普适最优”的权重方案。权重必须跟着业务走。
- 如果模型用于工业质检:感知层占60%以上,认知层只是辅助,联结层中冲突识别也要给到一定的比例。
- 如果模型用于智能助手:认知层要占大头,推理链正确率比图像分类准确率重要得多。
- 如果模型用于内容理解和生成:联结层是关键,权重可以拉到不低于认知层。
一个通用的起步配比可以参考:感知40%、认知35%、联结25%。这个配比适合通用型的多模态模型。后续再根据具体业务调。
加权计算总分的时候要注意,各指标的量纲不一样——有的最高100,有的Recall@10是0到1,有的正确率是百分比。必须先在组内做归一化,把每个指标映射到0到1区间,再按层级加权。
5.2 指标卡不是越密越好:砍掉噪声指标,留住诊断力
这里我得泼一盆冷水:评估体系最怕指标泛滥。一张满屏指标的评估卡,看着专业,实际用起来根本不知道下一步该优化什么。
我自己建评估体系的原则有两条:
一是每个指标必须有动作关联。如果这个指标跌了,你能立刻知道应该去调数据、调模型结构、还是调训练策略,那就留着;如果跌了你只能挠头,那这个指标就是噪声,果断砍掉。
二是指标之间的信息冗余不要过高。比如BLEU、ROUGE、METEOR这三个文本生成指标,在很多场景下高度相关,留一个就够了。多留几个除了让报告变长,没有任何诊断价值。
实践中最有价值的,往往是那些“跨维度交叉指标”——比如“感知正确但推理错误的占比”。这个指标能告诉你,模型的失败到底是“看错了”还是“想错了”,对优化方向的指导意义极大。我建议每个模型的评估报告里,至少要有一个这种交叉维度的诊断指标。
5.3 结论怎么读:不是“分数高就好”,而是“差异有解释”
最后这点也许最重要。很多人拿到评估报告,只看总分排行。但成熟的评估体系,结论应该是一份“解释文档”,不是一个“分数数字”。
我会从评估结果里重点读三类信息:
第一,各层级的均衡性。如果感知90分、认知40分,说明模型是个“眼睛挺好、脑子不行”的偏科生。业务上如果只看图说话,还能用一阵子;一旦用户开始问“为什么”,模型就露馅了。
第二,认知层内部的具体薄弱点。前面说的推理链四段打分,就是为了把“观察弱”还是“推断弱”拆清楚。同样是认知分低,一个可能是视觉注意力机制有问题,另一个可能是语言推理模块欠训,修起来完全是两条路。
第三,联结层的盲区类型。是互补不行、冲突不行、还是指代不行,对应的解决方案也完全不同。互补弱要调融合方式,冲突弱要加矛盾样本,指代弱要看注意力机制能不能跨模态对齐。
读到这三类信息之后,模型下一轮迭代才有明确方向。评估体系存在的价值不是给模型发奖状,而是变成一条可执行的改进路径。
6. 构建一个可落地的多模态评估实践:样本、流程与坑
前面把框架讲完了,最后这部分我想回到地面,说点可复现的做法。毕竟评估体系好不好,最终要看能不能长期稳定运行。
6.1 构建评估集的四条铁律
第一,数据来源要隔离。训练数据里不要混入评估样本,这个道理大家都知道,但实操中特别容易漏——很多人从爬取的数据里直接抽样本做评测,模型早见过这些图了,测出来的分数虚高得离谱。评估集必须独立维护,单独管理。
第二,样本要分层采样。不能只挑好看的图片、常规的问题。要让评估集覆盖长尾场景——模糊图像、低光照、方言语音、生僻词、非常规构图,这些都是模型在真实世界里必然会撞上的输入。
第三,答案要接受多样性。认知层任务尤其如此。标注时要允许同一道题有多个正确答案,标完还要做一轮答案合并,把近义表达聚成同一个标准答案组,这样自动评分才有依据。
第四,要持续对抗数据污染。模型每跑一轮,评估集被投喂的风险就增加一分。我的习惯是维护一个“污染样本池”,模型在训练日志里出现过的样本,一旦在评测集里发现,立刻移出。这个动作虽然粗糙,但能有效保住评测的长期有效性。
6.2 评测流程的工程化:从离线到准实时
评估体系不是一次性工程,它要伴随模型整个生命周期运行。我的做法是分三层:
离线评测在每次训练出完新模型后跑,覆盖全量评估集,输出完整报告。这个环节慢一点没关系,但要全。
回归评测在每次调参、小迭代时跑,只跑关键指标子集——感知的Top-1、Recall@10,认知的推理链正确率,联结的冲突识别率。跑完对比基线,有回归立刻报警。
准实时评测在模型上线后跑,从线上流量采样一部分数据,再注入一些构造探针样本,跟踪模型在真实输入分布上的表现。这一步的目的是监控数据漂移和模型退化。
工程化上,我强烈建议做一套重放系统:线上采样的所有样本和模型输出,都落盘保存。之后任何一次离线评估,都可以基于这些真实数据重放,确保离线评分和线上表现之间的误差越来越小。
6.3 数据标注和分数解释要有人兜底
自动评估跑得再好,最后的分数解释也离不开人。我通常会让评估报告里附上“人工复核样本集”:自动评分拿不准的样本、低分高置信的样本、跨模态冲突最剧烈的样本,都捞出来给有经验的人复核。
不要小看这个环节。很多时候,模型在推理链上失分,不是模型错了,而是标准推理链太死板,把模型合理的替代推理链判错了。这种情况通过人工复核能发现,改成“多条可接受推理链”的标注形式,评估质量会立刻上一个台阶。
6.4 长期看待:评估体系本身也要持续迭代
最后我想说一句可能不太好听的话:评估体系不是一次建好就一劳永逸的。模型的认知能力上来了,旧评估集的区分度就会下降——大家分数都90多,评估体系就废了。
所以我每年都会做一次“评估集升级”:砍掉一批模型已经轻易对付的题目,加一批当前模型普遍做不好、但有明确业务意义的新题。每轮升级的分数差,恰恰能说明模型在过去一年里到底进步了多少。
这个思路对应到文章标题里的“从感知到认知的度量”,其实就是一句话:我们在评估中测量的内容,要随着模型的能力增长而同步爬升。感知层测满意了,就往认知层走;认知层测顺手了,就尝试打开联结层。度量本身,就是牵引模型前进的那根绳子。真正做评估的人,图的不是当下的分数,而是让评估体系始终跑在模型能力前面半步。能做到这一步,你知道的就是一个真实而完整的模型。