导读:本文是“数据拾光者”专栏的第五十四篇文章,这个系列将介绍在广告行业中自然语言处理和推荐系统实践。本篇从理论到实践介绍了当前超火的多模态学习模型,想了解多模态学习模型并应用到业务实践的小伙伴可以多交流。 欢迎转载,转载请注明出处以及链接,更多关于自然语言处理、推荐系统优质内容请关注如下频道。 知乎专栏:数据拾光者 公众号:数据拾光者
摘要:本篇从理论到实践介绍了当前超火的多模态学习模型。首先介绍了背景,将文本模态和图像模态在语义空间上对齐进行联合训练可以得到高质量的多模态embedding;然后介绍了多模态学习模型三种不同的划分方式;接着重点介绍了四种当前超火的多模态学习模型,包括VisualBERT、Unicoder-VL、VL-BERT和ViLT;最后基于Hugging Face的Transformer开源项目实践了多模态学习模型。想了解多模态学习模型并应用到业务实践的小伙伴可以多交流。
下面主要按照如下思维导图进行学习分享:
01
背景介绍
上一篇《广告行业中那些趣事系列53:多模态学习在CTR预估模型中的应用实践》介绍了我们在CTR模型中多模态学习的业务应用实践,主要思路是得到文本模态的Textual embedding和图像模态的Visual embedding,分别以concat的方式和传统特征进行拼接,放到深度学习模型中去学习。这种方法的好处是简单便捷,能快速验证效果,经过实践验证发现在一些广告浅层转换场景中(比如CTR场景)模型效果提升明显。但这种方法也存在一些缺点,将文本模态和图像模态特征同时添加到模型中并没有出现1+1大于2的效果,可能的原因是文本和图像在语义空间上并没有对齐,为了解决这个问题进一步学习了最近几年主流的多模态学习模型。
02
多模态学习模型不同划分方式
2.1 按Textual embed和Visual embed参数量和计算量划分
通常情况下多模态学习模型主要包含三部分:Textual embed(TE)、Visual embed(VE)和Modality Interaction(MI)三部分。Textual embed是获取文本模态embedding,目前主流做法是使用BERT类预训练模型获取文本embedding;Visual embed是获取图像模态embedding,这里提取图像特征的方式有很多,下面会详细介绍;最后是Modality Interaction,主要是将文本模态和图像模态在深层网络中进行交互从而实现文本和图像在语义空间中对齐融合。
根据Textual embed和Visual embed参数量和计算量不同可以将多模态预训练模型分成以下四类:
第一类VE>TE>MI。这一类模型的典型代表是视觉语义嵌入(VSE)、VSE++、SCAN等,将图像和文本分别使用单独的编码器进行编码,图像编码的参数量远大于文本。文本和图像交互时使用简单的点积或浅层注意力层表示两个模态embedding的相似性。VE>TE>MI类模型如下图所示:
图1 VE>TE>MI类模型
第二类VE=TE>MI。这一类模型的典型代表是CLIP,将文本和图像分别使用复杂的
Transformer编码器进行编码,VE和TE的参数量都很大,使用池化后的图像特征点积计算特征相关性。VE=TE>MI模型如下图所示:
图2 VE=TE>MI类模型
第三类VE>MI>TE。这一类模型的典型代表是ViLBERT、UNTER和Pixel-BERT,图像特征通过卷积网络进行提取,图像和文本模态的交互也使用深层Transformer,VE和MI的参数量都很大。VE>MI>TE模型如下图所示:
图3 VE>MI>TE类模型
第四类MI>VE=TE。这一类模型的典型代表是ViLT,图像和文本都使用轻量级的浅层网络,模型的参数量和计算量都集中在多模态交互部分。MI>VE=TE模型如下图所示:
图4 MI >VE=TE类模型
下面是根据Textual embed和Visual embed参数量和计算量划分四类汇总图:
图5 根据TE和VE参数量和计算量划分
2.2 按模态相互作用方式划分
多模态学习模型按照模态相互作用方式可以划分成单流模型和多流模型:单流模型中文本信息和视觉信息一开始就进行了融合,比如VisualBERT、Unicoder-VL、VL-BERT等;多流模型中文本信息和图像信息刚开始分别进行独立编码,然后通过相互注意力机制实现不同模态信息的融合,比如ViLBERT、LXMERT等。
2.3 按Visual Embedding架构划分
前面说过文本模态embedding目前主流的做法是使用BERT类模型进行编码,主要区别在于图像模态Visual embed的获取。整体来看Visual embed获取主要有三大类:第一类是Region Feature,这类方法通常采用Faster R-CNN算法提取兴趣图像区域的特征,比如ViLBERT、UNITER等;第二类是Grid Feature,这类方法直接使用卷积网络(比如ResNet)获取图像整体网格特征,比如Pixel-BERT;第三类是Patch Projection,这类方法将图像切片投影提取特征,比如ViLT。下面是按Visual Embedding架构划分多模态模型结构图:
图6 按Visual Embedding架构划分多模态模型结构图
03
详解几种当前超火的多模态学习模型
上一节主要介绍了三种不同的多模态学习模型划分方式,下面会重点介绍几种经典的多模态学习模型。因为部分多模态学习模型主要参考BERT,建议可以先补充点相关知识可以更好的理解下列模型,关于BERT的讲解可以参考我之前写过的一篇文章《广告行业中那些趣事系列3:NLP中的巨星BERT》。
3.1 VisualBERT(2019.8)
VisualBERT是2019年8月在论文《VisualBERT: A Simple and Performant Baseline for Vision and Language》中提出来的。VisualBERT整体结构如下图所示:
图7 VisualBERT整体结构
VisualBERT在模型结构上参考了BERT,使用堆叠的Transformer作为编码器进行编码,模型一开始将文本和图像信息通过注意力机制层进行融合对齐。
VisualBERT输入包括文本和图像两种模态信息,对于文本模态信息来说和BERT一样,将文本转化为word embedding、segment embedding和position embedding三层向量;对于图像模态信息来说将图像也转化为和文本一样的三层embedding,只不过对应于图像的“token embedding”是使用Faster R-CNN算法提取兴趣图像区域的特征,segment embedding则使用特殊符号IMG代替。VisualBERT模型文本和图像输入获取embed如下图所示:
图8 VisualBERT文本和图像输入获取embed流程
VisualBERT同样使用了预训练和微调两阶段流程,预训练阶段使用COCO数据集,和BERT不同的是,VisualBERT预训练流程包括两个阶段:
VisualBERT模型代码已开源,github地址如下::
https://github.com/uclanlp/visualbert
3.2 Unicoder-VL(2019.12)
Unicoder-VL是2019年12月在论文《Unicoder-VL: A Universal Encoder for Vision and Language by Cross-modal Pre-training》中提出来的。Unicoder-VL整体结构如下图所示:
图9 Unicoder-VL整体结构
Unicoder-VL和VisualBERT结构类似,区别在于以下几点:
[1]Visual embed获取方式略有不同
Unicoder-VL对于图像部分也会转化成三层embedding,区别在于VisualBERT只会对文本进行掩码操作,而Unicoder-VL会对Faster-RCNN 提取到的区域图像特征进行掩码操作。位置特征position embedding使用5维向量b来编码,位置特征b计算公式如下所示:
图10 Visual embed位置特征计算公式
其中(x1,y1)和(x2,y2) 分别表示左下角和右上角的坐标,W和H分别代表图像的宽和高。segment embedding使用特殊的token【IMG】来表示。图像特征和位置特征会分别经过一层全连接层,然后相加之后经过LN层得到最终的Visual embed;
[2]预训练任务不同
Unicoder-VL也是预训练和微调两阶段模型,和VisualBERT相比,Unicoder-VL只有一个预训练流程阶段,包括三个训练任务:基于掩码的语言模型任务(Masked Language Modeling (MLM))、图像文本匹配任务(Visual-linguistic Matching (VLM))和基于掩码的标签预测任务(Masked Object Classification(MOC))。在MLM任务中,随机选择15%的文本进行掩码操作,同时将兴趣区域图像进行掩码操作。MLM任务的目标是根据周围词和图像区域来预测被掩码的词和图像区域;在MOC任务中,随机选择15%图像特征进行掩码操作。被掩码的图像特征90%的概率会初始化为全0向量,其余10%概率保持不变。MOC的任务目标是预测掩码图像的类别。
3.3 VL-BERT(2020.2)
VL-BERT是2020年2月在论文《VL-BERT: Pre-training of Generic Visual-Linguistic Representations》中提出来的。VL-BERT整体结构如下图所示:
图11 VL-BERT整体结构
VL-BERT模型输入包括四层embedding:token embedding、visual feature embed
ding、segment embedding和sequence position embedding:
[1]token embedding:VL-BERT中文本模态的token embedding和BERT一样,图像模态的token embedding使用特殊标志位[IMG];
[2]visual feature embedding:visual feature embedding由appearance feature和geometry embedding两部分组成。其中appearance feature包括整体图像和局部兴趣区域图像两部分特征。局部兴趣区域特征通过Fast R-CNN提取得到,整体图像特征则将整张图片作为一个完整的区域提取特征。如上图所示,对于图像模态的visual feature embedding使用的就是局部兴趣区域特征,而对于文本模态的visual feature embedding则使用的是整体图像特征。geometry embedding主要是兴趣区域图像的几何位置,由四维向量组成:
图12 geometry embedding计算公式
其中(x_LT,y_LT)和(x_RB,y_RB) 分别表示左下角和右上角的坐标,W和H分别代表图像
的宽和高。将appearance feature和geometry embedding使用 concat操作之后经过
全连接层得到最终的visual feature embedding;
[3]segment embedding:文本模态使用特殊标志[A],图像模态使用特殊标志[C];
[4]sequence position embedding:文本模态使用1到字符串长度N标志序列位置特征,比如上图中1到6。图像模态中局部兴趣区域图像使用相同的序列位置特征,比如上图中多个兴趣区域图像都为7。
VL-BERT模型代码已开源,github地址如下:
https://github.com/jackroos/VL-BERT
3.4 ViLT(2021.6)
ViLT是2021年6月在论文《ViLT: Vision-and-Language Transformer Without Convolution or Region Supervision》中提出来的。ViLT整体结构如下图所示:
图13 ViLT整体结构
ViLT模型的输入包括文本模态信息和图像模态信息。对于文本模态来说,输入文本序列经过word embedding得到token embedding,将token embedding和position embedding相加,最后和modality-type embedding进行concat操作得到Textual embedding,这里的modality-type为0;对于图像模态来说,将图片切块得到图像块序列,经过线性投影Linear projection操作得到图像对应的token embedding,将token embedding和patch position embedding相加,最后和modality-type embedding进行concat操作得到Visual embedding,这里的modality-type为1。需要注意的是Textual embedding和Visual embedding分别增加了一个[class] embedding标志,用于和下游任务对接。
ViLT模型的预训练流程有两个任务:基于掩码的语言模型任务(Masked Language Modeling (MLM))、图像文本匹配任务(Visual-linguistic Matching (VLM)),需要注意的是ViLT使用了whole word masking技巧。
通过可视化操作可以看出ViLT可以将文本和图像进行很好的对齐:
图14 ViLT可视化文本和图像对齐效果
ViLT模型代码已开源,github地址如下:
https://github.com/dandelin/vilt
04
多模态学习模型实践
上面主要从理论方面学习了当前比较火的多模态学习模型,下面从应用实践的角度跑通多模态学习的demo。因为我们的应用场景是输入图像和文本,得到对应的embedding向量。调研了很多开源项目,发现Hugging Face的Transformer开源项目可以快速满足我们的需求,通过下面的pip命令安装transformers包:
pip install transformers
一个简单的使用ViLT多模态学习模型的例子,输入文本和图像,输出embedding向量:
图15 ViLT多模态学习模型应用示例
如果想进一步实践ViLT模型,可以使用相应教程:
https://github.com/NielsRogge/Transformers-Tutorials/tree/master/ViLT
图16 ViLT应用教程
通过上述教程可以使用业务相关的数据集微调ViLT模型,同时部署到线上任务中。
05
总结和反思
本篇从理论到实践介绍了当前超火的多模态学习模型。首先介绍了背景,将文本模态和图像模态在语义空间上对齐进行联合训练可以得到高质量的多模态embedding;然后介绍了多模态学习模型三种不同的划分方式;接着重点介绍了四种当前超火的多模态学习模型,包括VisualBERT、Unicoder-VL、VL-BERT和ViLT;最后基于Hugging Face的Transformer开源项目实践了多模态学习模型。想了解多模态学习模型并应用到业务实践的小伙伴可以多交流。
最新最全的文章请关注我的微信公众号或者知乎专栏:数据拾光者。
码字不易,欢迎小伙伴们点赞和分享。