当前位置:首页 > 科研成果库

多模态对齐翻车记:那个把运动鞋当高跟鞋的模型,后来修好了吗?

2026-11-06 10:43:27小研科研成果库8
昨天下午,产品经理甩过来一个bad case。用户搜“红色高跟鞋”,结果返回的十张图里,有六张是红色运动鞋。用户气得在评论区打了一星。我盯着屏幕看了半分钟,脑子里就一个念头:这模型眼睛是不是有点毛病? 真的。红色高跟鞋和红色运动鞋,长得能一样吗?但我们的图文检索模型就是分不清。查了一下相似度分数,好家伙,图像和文本的余弦相似度都在0.8以上,模型觉得这俩简直是亲兄弟。

那天的bad case,让我重新理解了“对齐”

多模态对齐,说白了就是让图像和文本在同一个语义空间里找到彼此。你给一张“猫在沙发上睡觉”的图,再给几段描述,模型得把正确的文本和图片对到一起。常见做法是对比学习:用双塔分别编码图像和文本,把正样本对(匹配的图文)拉近,负样本对(不匹配的)推远。损失函数叫InfoNCE,本质是个交叉熵。 听起来很简单对吧?问题就出在“语义空间”这四个字上。全局对齐,是把整张图压成一个向量,把整段文本也压成一个向量。压的时候,细节就被平均掉了。红色高跟鞋和红色运动鞋,共享“红色”和“鞋”这两个高权重概念,全局向量自然就很像。 打一个不太恰当的比方:假设你要给两篇关于水果的文章找相似。一篇讲苹果,一篇讲梨,但两篇都反复出现“水果”“甜”“多汁”这些词。用词袋模型,相似度肯定高。但你能说这两篇文章讲的是同一件事吗?不能。多模态对齐面临同样的问题——粗粒度的表示,抓不住细粒度的差异。 电商图文检索细粒度对齐错误案例示意图电商图文检索细粒度对齐错误案例示意图 我当时就感叹:模型哪是色盲,它是近视眼。站远了看,红鞋都是红鞋;凑近了看,才分得清高跟和平底。

对齐,到底在“对”什么?

后来我们拆了一下数据,发现训练集里“红色高跟鞋”和“红色运动鞋”的图文对,各自有几千条,但负样本采样是随机的。也就是说,模型在训练时,遇到“红色高跟鞋”的文本,邻居图像大概率是一双完全无关的图(比如一只狗),而不是那双容易混淆的红色运动鞋。模型也就没机会学会区分它们。 这里有个关键概念:难负样本。对比学习能work,很大程度上取决于负样本的质量。随机采样出来的负样本太“简单”了,模型闭着眼睛都能推开,梯度信息很少。难负样本,比如“红色高跟鞋”和“红色运动鞋”这种共享颜色和品类但细节不同的,才能逼着模型去关注鞋跟的形状、系带方式这些更细的特征。 不过话说回来,难负样本挖掘也有坑。我们之前用过一个笨办法:把同一批次里相似度高的非匹配对当成难负样本。结果呢?有一批文本描述“酒红色高跟鞋”,被当成了“红色高跟鞋”的负样本。可这俩在语义上多接近啊!模型被强行推远,最后反而把酒红色高跟鞋和运动鞋拉近了。这叫假阴性。多模态对齐里,假阴性问题比假阳性还恐怖,因为模型会学到一个扭曲的空间。 多模态对比学习难负样本挖掘中假阴性示意图多模态对比学习难负样本挖掘中假阴性示意图

别只看全局损失,区域对区域才是真功夫

别只看全局损失,区域对区域才是真功夫别只看全局损失,区域对区域才是真功夫 那怎么解决呢?一个思路是细粒度对齐。不要让整张图对整个文本,而是让图像的区域(比如检测框或者注意力区域)对齐到文本的实体词。比如“红色高跟鞋”这段文本,应该让“红色”对齐到鞋面区域,“高跟”对齐到鞋跟区域。这样即使鞋子颜色相同,高跟和平底的区域向量差异也会被捕捉到。 实现上有几种路子。一种是用目标检测先抠出候选区域,再和词向量做对比。另一种是直接用交叉注意力,让文本的每个token去attend图像的不同patch。比如GLIP这类工作,就把检测和短语对齐融合在一起。最近视觉-语言大模型里常用的区域级对比损失,也是这个思路。 对了,这里插一句:很多人把多模态对齐和多模态融合搞混。对齐是“找对应关系”,融合是“把信息合起来做决策”。先对齐再融合,顺序反了或者跳过对齐直接融合,效果往往一塌糊涂。

对齐的边界:它不能解决所有问题

对齐的边界:它不能解决所有问题对齐的边界:它不能解决所有问题 说个实在话,多模态对齐不是万能的。我们后来那个模型修好了,高跟鞋和运动鞋的检索准确率上去了。但是新的bad case又来了:用户搜“复古红色高跟鞋”,返回了一堆“复古红色高跟鞋”的图片,可其中有几张明明是高跟鞋形状的台灯。模型把“高跟鞋”这个词对齐到了台灯的鞋形灯罩上——视觉上确实像,但语义上差远了。 这就是多模态对齐的边界:它依赖训练数据中的语义分布。如果数据里没有“高跟鞋形状的台灯”这种长尾案例,模型就无法学到“高跟鞋”这个词在文本语境里指的是鞋子,而不是所有像鞋的东西。 还有一点,多模态对齐对模态缺失很敏感。如果用户只给了文本,没有图像,那对齐就变成了文本内部的语义匹配,跟多模态没关系了。别指望对齐能凭空变出缺失模态的信息。 末了吐槽一句:多模态对齐这事儿,像极了刚谈恋爱的直男。你跟他说“我想要那束花”,他转头买了个西兰花——都是绿的,都是植物,但他没对齐“花”和“可食用”这两个属性。模型也是,光在全局特征上对齐,不关注局部细节,最后就是高分低能。所以下次debug,别只盯着loss和召回率,多看看那些分数高得离谱的bad case。那里藏着模型真正没学会的东西。