本文为预训练语言模型专题的第17篇。
今天聊一聊近年来挺火的“多模态”任务。其实这不是我们第一次聊到多模态了,之前发的Kaggle PetFinder比赛方案其实就在解决一个多模态预测的问题。准确地说今天介绍的模型都是“双模态”,即同时处理文本数据和图像数据。
虽然生活中需要处理多模态输入的场景比比皆是,但众所周知,目前的AI水平还比较低,只能处理一些特定的任务。在介绍模型之前,我们先介绍几个在当前研究中常见的多模态问题。
比较有名的是视觉问答VQA,简单的说就是针对图片提问题让计算机回答。有一个叫VQA[1]的著名数据集,发布于2015年,2017年发布了最新的2.0版本。数据集包含大约二十万张图片、一百多万个问题以及一千多万个标注答案。就像之前的ImageNet一样,每年都有针对这个任务的挑战赛,2020年第一名的accuracy已经达到了76.36%,2017年这一数字是69%。
VQA数据集样例
视觉常识推理(visual commonsense reasoning,VCR)也是一个热门且有趣的任务。他比VQA更进一步,计算机不仅要回答问题(Question Answering,Q->A),还需要给出一个理由(rationale)来解释为什么给出这个答案,这个给理由的任务有两种设定,一种是只给Q同时得到A和R(Q->AR)
,另一种是给定Q和A纯粹获得R(Answer Justification, QA->R)。
VCR数据集样例,模型不仅要给出答案,还要给出理由
VCR数据集的leaderboard也很活跃。这里贴一个目前排行榜top5的成绩,从图中可以看出,这个任务目前算法的水平距离人类还有较大差距。
VCR排行榜前五名
最后介绍一个跟大家生活比较贴近的任务,以KDD 2020的Multimodalities Recall challenge[2]为例。简单的说就是用自然语言问句来搜图,这个在大家日常生活中需求很大。由于互联网图片通常有大量的文字上下文,现有技术可以完全不利用多模态交互做到一个比较好的使用体验。但基于多模态的技术会大大扩展检索的使用范围并提高体验。
多模态检索任务示意图,对于这个例子大家在搜索引擎搜“豹纹女鞋”应该都能得到好结果
为了更好地解决多模态问题,大概有以下几个重要的子问题需要解决
下面我们以ICLR 2020上提出的VL-BERT[3]为主线,紧扣这3个问题介绍一下多模态模型。
目前最新的多模态模型基本都是以transformer为backbone,为了达到更好的语言模态处理能力,往往都在预训练语言模型的基础上进行扩展。
从VL-BERT的名字就可以看出它采用了BERT。BERT的输入方式大家应该都已经非常熟悉,在讲文本序列令牌化后,分别转化为word embedding
,position embedding
和segment embedding
输入进多层transformer模型。
下图是VL-BERT的模型结构图,可以看到有三个主要的变化。首先,embedding从三种变成了四种,增加了第二行的visual feature embedding
;其次,引入了特殊的[IMG] token以及相应的token embedding
;最后segment embedding
从原来的0/1两种变成了A、B、C三种,其中A、B对应原来的0和1,C专门留给图像特征。
VL-BERT结构图。值得注意的点:visual feature embedding,两个预训练任务,被抹去的ROI(蓝色斜线)。
visual feature embedding
(以下简称VFE
)是对R-CNN网络输出的ROI(regions of interest,简单理解就是模型认为有意义的区域)进行高维向量表征。其中又分为两个小部分:一个是对图像信息进行表示的appearance feature,另一部分是对位置信息进行表示的geometry。最终的VFE
是这两个特征向量拼接后用全连接降维得到的。对于一张图片,R-CNN网络会给出多个ROI,因此也就得到了多个VFE
。
仔细观察会发现VFE
会叠加在原来的文字输入上(图中黑框),这部分叠加的是从整张图片获得的VFE
。而对于拼接的部分,则是从单个ROI获得的VFE
。另一个细节是视觉信息的position embedding
都是一样的,这是因为ROI并没有所谓的序列位置关系,其图像位置信息已经包含在了VFE
中。
通过以上的方式,图像和文本信息就都输入进了模型里。
由于VL-BERT使用的是BERT作为backbone,很自然的,信息的交互是通过自注意力机制完成的。模型的整体性很好,从我们在NLP领域的经验来看,这种方式的效果也是比较好的。
但这不是唯一的方式,例如更早的模型LXMERT[4]就采用了双塔结构。先分别使用语言编码器和图像编码器对两种信息进行分别编码,再通过一个跨模态编码器(cross-modality encoder)进行交互。如果你熟悉文本匹配,那对这种套路应该再熟悉不过了。
LXMERT模型结构。采用“双塔”分别对文本和图片进行编码,再通过跨模态编码器进行交互
在介绍VL-BERT的预训练之前,我们先简单回顾一下BERT的预训练任务。BERT采用了两个预训练任务,分别是masked language model(MLM)和next sentence prediction(NSP)。这两个任务大家应该也比较熟悉,尤其是MLM被证明是非常有效的预训练任务,NSP在最近倒是有淡出历史舞台的迹象。
VL-BERT的预训练任务是对MLM的扩展,一共有两个。第一个任务是带视觉线索的掩码语言模型(Masked language model with visual clues)。这个任务的扩展是自然的,在就是引入视觉信息之后做MLM。被mask的token只会来自于文本。
第二个任务是带语言信息的掩码ROI分类(Masked RoI Classification with Linguistic Clues)。这个任务是第一个任务的对偶任务,前面那个任务是用视觉信息来辅助语言模型训练,而这个是借助语言信息来进行ROI图像预测。预测的标签来自于R-CNN模型的预测结果(注意,这个结果是来自于视觉信息的)。
这个任务比较复杂,因为需要处理视觉信息泄露。所谓视觉信息泄露,就是直接通过VFE就得到了图像类别。例如R-CNN框出了一只猫并生成了相应的VFE
,那目前的模型基本都可以做到轻松地从视觉特征向量预测出这个框里面是只猫而完全不需要借助文本提供的信息。这是我们不希望看到的,我们希望模型能够建立跨模态的联系,它需要从输入的“kitten drink from bottle”里预测出被mask掉的区域里应该有只猫(因为另一个区域已经有瓶子了)。为了解决视觉信息泄露的问题,需要在数据输入时就做好准备。被预测的ROI需要从图中抹去(像素值置零)。
由于输入信息丰富,除了VL-BERT采用的两个预训练任务外还有好多其他的选择。这里提一下比它稍微早一些的VisualBERT[5],这个模型也采用了两个预训练任务,其中有一个是和VL-BERT一样的MLM,而另一个是图像语言相关性任务(sentence-image prediction)。具体的说,COCO image caption[6]数据集对每张图片有多个caption,模型预训练时会输入两个句子+视觉信息,第一个句子是和图片相关的,而第二个句子有50%的概率是随机挑的,模型需要学会分辨这两种情况。
从历史的后视镜看,VisualBERT的这个任务明显简单于VL-BERT的ROI分类任务。即使不靠图片信息,BERT也已经可以分辨两句话的意思是否相同。从结果也可以看出来,在COCO上进行预训练对VisualBERT的VQA成绩提升是从70.18到70.8,并不是非常显著。
VisualBERT结构图,输入方式和VL-BERT大体相同,但使用了不同的预训练任务。
转过头说回VL-BERT,它的预训练步骤对VQA成绩的提高是从69.58到71.16,除了任务先进,它还做了不带图像信息的单纯MLM预训练(还是第一个训练任务,但没有输入任何图像信息),不仅质高,而且量大,超过前辈自然不在话下。
在VL-BERT论文的附录里有一张表,对近几年重要的多模态模型进行了比较全面的对比。表里面可以直观地看到各模型的结构、视觉信息、数据集、预训练任务以及下游任务信息,感兴趣的朋友可以作为路线图做更细致的研究。
重要多模态模型对比
另外,前面提到的KDD 2020比赛不少前排大佬已经放出了解决方案,例如第一名方案[7]就采用了MCAN[8]和VisualBERT融合,大家可以通过这些材料看一下在实际问题中多模态技术是如何应用的。
今天的文章就到这,欢迎关注我们,方便获取后续更多精彩内容。
[1]
VQA数据集: https://visualqa.org/
[2]
KDD 2020多模态检索赛道: https://tianchi.aliyun.com/competition/entrance/231786/information
[3]
VL-BERT: http://arxiv.org/abs/1908.08530
[4]
LXMERT: https://arxiv.org/abs/1908.07490
[5]
VisualBERT: A Simple and Performant Baseline for Vision and Language: http://arxiv.org/abs/1908.03557
[6]
Microsoft COCO captions: Data collection and evaluation server: https://arxiv.org/abs/1504.00325
[7]
KDD 2020多模态赛道第一名方案: https://github.com/steven95421/KDD_WinnieTheBest
[8]
Deep Modular Co-Attention Networks for Visual Question Answering : https://arxiv.org/abs/1906.10770