1.1 总览
多模态大模型如OpenAI的CLIP,谷歌的ALIGN等最近掀起了新一轮大规模多模态学习的浪潮,这些模型在各种下游任务体现了出色的开放域零样本能力,是下一代通用人工智能的可能之路。这些大模型的成功很大程度上依赖于预训练数据集的支持,但是中文开源数据规模大的基本没有,阻碍了中文多模态大模型的发展与应用。
华为诺亚方舟实验室最近开源了一个亿级中文跨模态数据集:悟空,来填补这方面的空白。这个新的数据集包含一亿个来自网络的中文图文对,并经过了筛选和过滤。
图1悟空数据集文本词云
此外,由于训练大模型非常昂贵和费时费力,为了方便中文社区未来的使用和发展,团队还同时开源了一系列的多模态基础大模型,这些模型使用了不同的图像编码器(ResNet/ViT/SwinT)以及不同的预训练方法(CLIP/FILIP/LIT)供大家灵活选择。我们还进行了一系列不同任务的基准测试,实验表明,悟空可以作为一个优秀的跨模态的中文预训练数据集和基准学习方法,在各种下游任务都有出色的表现。
更多信息可以参考https://arxiv.org/abs/2202.06767 以及 https://wukong-dataset.github.io/wukong-dataset/(点击底部左下角“阅读原文”可直接进入)。
1.2 数据集构建
图2当前业界知名的图文预训练数据集,悟空是首个大规模中文数据集
视觉-语言多模态大模型预训练强烈依赖大规模的图文数据集,虽然目前开源的英文大规模图文数据集较为丰富,如CC12M、YFCC100M、LAION-400M,但是中文却始终缺少这样的大规模数据集可供自由下载研究,悟空作为首个中文领域开源的大规模图文数据集,填补了这样的空缺,能够加快中文跨模态预训练大模型的研究工作。
Wukong100m数据集包含了来自于互联网的约1亿图文对。为了囊括尽量丰富的视觉概念,原始数据的采集围绕20万个基础关键词进行,针对每一个基础关键词,通过输入搜索引擎,用返回的图片及对应的文本来构建数据集。此外,为了平衡关键词对应样本的数量,每一个基础关键词所采集的样本最多保留1000个。
在此之后,数据集又经过一系列的过滤策略来得到最终的版本,具体的过滤策略分为基于图片的过滤和基于文本的过滤。其中,图片过滤的原则是过滤掉长或宽不超过200像素的以及长宽比大于3的图片,以此来保证图片能够较为清晰地呈现视觉概念。至于基于文本或者说图片描述的策略,首先,只有至少包含一个中文字符的文本会被保留,比如“000.jpg”这种描述文本就会连同其对应的图片一起被过滤掉,因为它表示的意义非常弱。其次,如果有太多的图片对应到了同一个描述,比如“查看源网页”、“展开全文”、“摄影部落”,那么这类描述往往也是缺乏太多意义的,在构建数据集时也会被排除掉。此外,为了保护隐私,数据集中涉及的人名均会被替换为特殊的符号“<人名>”,还有包含了敏感词的数据也会被去除。
1.3 模型预训练方法
1.3.1 模型结构
我们采用了主流的基于 Transformer 的双塔结构的预训练模型,来对图像和文本分别进行编码到同一个维度空间。我们利用对比学习的损失函数来对齐文本和视觉模态,让匹配的图文对在编码后的表征上相似度更加接近,同时不匹配的图文表征相似度更低。因此通过训练这样的图像编码器和文本编码器,我们可以将文本模态和视觉模态在同一个表征空间上进行有效的对齐。
图3悟空基础大模型主要采用双塔结构。
图像编码器:我们的预训练采用了常用图像编码器结构:ResNet,ViT和Swin Transformer,其中ResNet结构我们实验了Res50和Res101;ViT模型分别使用了ViT-B/16, ViT-B/32和ViT-L/14;SwinT模型使用了Swin-L模型。ViT模型的第一个token也就是[CLS] token的特征被用来描述整个图像,ResNet和SwinT模型我们将所有patch token的特征均值用来描述整个图像。
文本编码器:我们采用Transformer结构,共有12层,12个注意力机制头以及768的隐变量维度。对于中文的tokenizer,我们使用了中文BERT模型的WordPiece方法,中文词表大小为21128,文本的第一个token也是使用了常见的[CLS],其经过文本编码器编码后会用来描述整个文本的特征。
线性映射层:图像和文本在经过编码器编码后,我们使用可学习的线性映射层将图像和文本的特征通过线性变化投影到多模态公共空间。
LiT-Tuning: 为了提高训练效率和节省计算资源,我们在双塔模型结构中加载了预先训练好的图像编码器并且在对比学习中锁住它的参数。我们只需要训练文本编码器和两个线性映射层。其中,图像编码器可以是在英文标签的图片数据上预训练得到的。
1.3.2 对比学习训练
我们采用了in-batch对比学习方式:在每一次的训练迭代中,每张图片的正例是和它对应的文本,同一个batch中的其他文本作为它的负例,反之亦然。那么第k张图片和文本的对比学习损失可以分别表示成:
顾名思义,全局相似度计算就是用图像的全局表征和文本的全局表征的点积结果;而Token-wise相似度计算使用了更加细粒度的对比学习目标来捕捉图片与文字的token级别的细粒度匹配和定位,我们先对每个图片patch计算出与它最相似的文本token并记录下这个相似度,然后用所有patch的平均相似度作为最终图片对文本的相似度,类似的计算方式也适用于文本对图片的相似度。
1.4 实验评估
1.4.1 Zero-shot零样本图片分类、图文检索任务
同时,图文检索的任务也分为微调和Zero-shot零样本两个实验设定,具体在图像检索文本和文本检索图像这两个任务上,在五个不同的数据集上进行验证,并且与业内的中文多模大模型进行了实验结果的对比。经过微调的图文检索实验结果如下:
另外,零样本的图文检索实验结果如下:
上述实验结果表明了我们构建的中文多模数据集,以及开源的基线多模态预训练模型的有效性。它表明了将在英文数据集上预训练的图像编码器适配于中文多模态预训练也能训练出效果优异的模型。同时可以看到,在同样的模型配置下,使用Token-wise相似度计算的实验效果要好于使用全局相似度计算。在图文检索的任务上,我们的基线预训练模型可以获得近似SOTA模型甚至更高的结果。
1.4.2 细粒度对齐的可视化
我们认为,使用Token-wise相似度计算的中文多模模型也可以具备像FILIP一样的细粒度对齐和定位能力。因此,我们利用ImageNet的图片和中文标签进行了token-wise对齐的可视化实验。
1.5 总结
华为诺亚方舟实验室开源了一个亿级中文跨模态数据集:【悟空】,并且将开源一系列的多模态基础大模型,从而进一步推动中文社区未来的使用和发展。团队还在零样本图片分类、图文检索等一系列任务上进行数据集和模型的基准测试。实验表明,悟空可以作为一个优秀的中文图文多模预训练数据集和基准学习方法,在各种下游任务上均有出色的表现。同时,悟空模型在token级别细粒度对齐上的能力具备一定使用潜力,服务于目标定位等更多的视觉任务。目前悟空数据集在官网即可下载,感兴趣的小伙伴可以立刻使用起来!
推荐阅读
文章首发微信公众号,更多深度模型压缩相关的文章请关注深度学习压缩模型论文专栏。