(NeurIPS,2022)Knowledge-CLIP:使用知识图谱进行CLIP

Contrastive Language-Image Pre-Training with Knowledge Graphs

相关资料

论文:Contrastive Language-Image Pre-Training with Knowledge Graphs (nips.cc)

摘要

近年来,大规模预训练框架的发展迅速,这些框架能够以统一的形式提取多模态表征,并在转移到下游任务时展现出有希望的性能。然而,现有的方法主要关注简单的图像-文本对的预训练,而忽略了不同模态概念之间的语义联系。在本文中,我们提出了一个基于知识的知识预训练框架,称为Knowledge-CLIP,它将语义信息注入到广泛使用的CLIP模型中。通过在预训练过程中引入基于知识的目标,并使用不同类型的知识图谱作为训练数据,我们的模型能够在视觉和语言中以更高的质量对表征进行语义对齐,并增强跨场景和模态的推理能力。在各种视觉-语言下游任务上的广泛实验证明了Knowledge-CLIP与原始CLIP和具有竞争力的基线相比的有效性。

引言

请添加图片描述
用于预训练的数据对是以最简单的方式组织的,即仅使用匹配和不匹配的描述来表示给定图像和文本对之间的关系。这通常会导致一种退化的情况,即模型倾向于依赖输入的共同出现而非其语义

我们遵循CLIP的结构,并使用两个基于Transformer的模型分别作为图像和文本编码器。这两个编码器以知识图谱中的实体和关系为输入,提取实体和关系的原始特征。值得注意的是,实体可以是图像/文本的形式,而关系则始终由语言标记描述。然后,采用多模态Transformer编码器来融合基于关系的实体特征。通过这种方式,预训练模型被推动集中于理解视觉和文字概念之间的语义关系,从而在视觉和语言模态之间建立强大的语义连接。

为进一步提高训练效率并避免预训练过程中的大量计算成本,我们采用了一种简单的持续学习策略,基于CLIP的预训练权重来训练我们的模型。这为使用低训练资源有效提升CLIP模型性能提供了可能性。

回顾CLIP

CLIP使用两个独立的模型分别作为图像编码器和文本编码器。
请添加图片描述

  • 对于文本输入,采用了一个12层的Transformer,宽度为512,注意力头为8。原始文本首先使用字节对编码技术在49,152的词汇量下进行转换。文本序列长度限制在76,并在输入文本编码器之前添加位置编码。
  • 另一方面,CLIP有基于ResNet和基于Vision Transformer的不同版本的图像编码器架构。由于后续研究表明Vision Transformer模型的性能更好,本文只考虑基于Transformer的图像编码器。与文本输入类似,图像首先被转换为块,并添加位置编码。

在两个编码器的最后阶段,采用全局池化函数将特征图压缩成单个特征,作为整个图像/文本序列的表示。计算图像和文本特征的余弦距离作为数据对的相似性。在训练监督中,采用对比损失来最大化匹配对的相似性,同时最小化不匹配对的相似性。

Knowledge-CLIP

请添加图片描述

我们提出了一个基于知识图谱的新型预训练框架,从几个角度解决了原始CLIP模型的限制:

  1. 我们将知识图谱引入训练数据集中,其中图结构数据概念之间的语义关系使模型能够提取语义特征,并在输入之间建立语义连接;
  2. 在当前的图像和文本编码器之上增加了一个多模态编码器,以融合不同模态的特征,并建模输入之间的联合分布;
  3. 采用了基于CLIP预训练模型的持续学习策略,避免了预训练过程中的大量计算成本,并有效地增强了模型的泛化能力。

数据准备

请添加图片描述

与原始CLIP中使用的原始图像-文本对不同,我们的模型采用知识图谱作为输入。知识图谱可以定义为一个有向图G = {ξ, R, TR},其中ξ, R分别对应实体和关系集,TR表示关系三元组的集合。三元组(h, r, t) ∈ TR表示实体h ∈ ξ与实体t ∈ ξ之间存在关系r ∈ R。如图3所示,我们在三种类型的知识图谱上预训练我们的模型,包括多模态知识图谱、场景图谱和基于语言的知识图谱。

模型架构

我们首先使用模态特定的分词器将输入处理成标记序列。对于语言输入,我们采用了BPE分词器,而图像输入则被切成不重叠的块,并按照ViT的方式转换成块序列并添加了可学习的位置编码。

然后,我们采用了两个独立的图像编码器 f I ( ⋅ ) f_I(·) fI()和文本编码器 f T ( ⋅ ) f_T(·) fT()来从原始输入中提取特征。对于给定的三元组(h, r, t),实体h和t根据它们的模态(图像或文本)被发送到相应的编码器。关系r由语言标记表示,与文本实体类似,被发送到文本编码器。

与CLIP中的模型结构相比,我们引入了一种修改,以更好地适应我们的框架。具体来说,普通的CLIP模型在两个编码器的最后一层使用池化函数,将特征图压缩成全局表示。也就是说,对于输入 u ∈ R L × d i u ∈ R^{L×d_i} uRL×di,其中 L L L d i d_i di分别表示序列长度和特征维度,编码器的输出可以表示为:
在这里插入图片描述

我们去掉了原始CLIP模型中图像和文本实体的池化函数,以保留局部信息,并使用 x u ∈ R L × d o x_u ∈ R^{L×d_o} xuRL×do作为提取的特征。另一方面,关系通常在有限的序列长度下,例如一个或两个词标记,其中信息密度小于实体。因此,我们保留了关系输入的池化函数,并使用 x ˉ u ∈ R d o \bar{x}_u ∈ R^{d_o} xˉuRdo作为提取的特征。

通过这种方式,我们提取了定义为 ( x h , x ˉ r , x t ) (x_h, \bar{x}_r, x_t) (xh,xˉr,xt)的特征,它们对应于输入三元组 ( h , r , t ) (h, r, t) (h,r,t)中的元素。为了建模三元组中不同元素的联合分布,我们考虑了一个多模态编码器TransEncoder(·)来融合来自不同来源的特征。具体来说,我们首先将三元组中的所有特征连接成单个序列,并在序列的开头使用一个头部标记。为了强调序列中标记的状态,我们考虑了三元组中每个元素h, r, t的额外可学习编码:

在这里插入图片描述

经过多模态编码器处理后,头部标记的特征最终作为整个序列的表示:

在这里插入图片描述

同时,关系表示从相应的标记中提取:

在这里插入图片描述

训练目标

考虑到知识图谱独特数据结构,我们框架主要采用两种类型的训练目标,包括基于三元组的损失和基于图的损失。此外,由于我们框架采用了持续学习策略,我们还考虑了知识蒸馏损失。

  • 基于三元组的损失

对于在输入中缺少某些元素的不完整三元组,可以通过掩蔽相应特征的方式,如等式3中所述,得到类似的连接序列。例如,输入(h, r, -)的连接序列可以表示为:

在这里插入图片描述

在此基础上,给定一组输入 D = { ( h i , r i , t i ) } i = 1 N D = \{{(h_i, r_i, t_i)}\}^N_{i=1} D={(hi,ri,ti)}i=1N,我们首先对一个实体,即ti被掩蔽时的分布进行建模,并通过最小化负对数似然来推导实体-实体(E2E)损失:

在这里插入图片描述

我们还对三元组中关系被掩蔽时的分布进行建模,并类似地推导实体-关系(E2R)损失:

在这里插入图片描述

  • 基于图的损失

我们还利用知识图谱数据集中的图结构,并采用图神经网络提取实体间的更深层次结构信息。我们通过图中连接的边传播信息,并用聚合特征更新实体表示。最后,我们通过计算图中传播前后实体特征的余弦相似度来定义图-实体(G2E)损失:

在这里插入图片描述

  • 知识蒸馏损失
  1. 除了知识图谱数据集,我们还训练我们的模型在几个广泛采用的图像-文本数据集上,这些数据集与CLIP训练数据具有相似的数据分布。为了更好地适应我们的预训练框架,我们将原始的图像-文本对转换为三元组形式,具有专门设计的关系“image of”和“caption of”。

  2. 我们还使用原始的CLIP模型作为教师,并使用辅助损失LKD来衡量CLIP输出与我们模型输出之间的KL距离。

总损失为:

专门设计的关系“image of”和“caption of”。

  1. 我们还使用原始的CLIP模型作为教师,并使用辅助损失LKD来衡量CLIP输出与我们模型输出之间的KL距离。

总损失为:

在这里插入图片描述

相关推荐

  1. 2024CAIP省赛

    2024-07-09 20:18:02       20 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-09 20:18:02       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-09 20:18:02       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-09 20:18:02       42 阅读
  4. Python语言-面向对象

    2024-07-09 20:18:02       53 阅读

热门阅读

  1. 力扣1878.矩阵中最大的三个菱形和

    2024-07-09 20:18:02       28 阅读
  2. 持续学习的艺术:SKlearn中模型的在线学习实践

    2024-07-09 20:18:02       25 阅读
  3. 代码随想录刷题day02-矩阵

    2024-07-09 20:18:02       26 阅读
  4. ListView

    ListView

    2024-07-09 20:18:02      26 阅读
  5. SSL 证书

    2024-07-09 20:18:02       24 阅读
  6. HP打印机Er报错 (重新开始或恢复按钮 ↓)

    2024-07-09 20:18:02       17 阅读
  7. php简单实现利用飞书群里机器人推送消息的方法

    2024-07-09 20:18:02       22 阅读
  8. 终于弄明白了什么是EI!

    2024-07-09 20:18:02       19 阅读
  9. 期货量化交易:探索金融投资的新领域

    2024-07-09 20:18:02       26 阅读
  10. 探索金融数据API:现代投资的关键工具

    2024-07-09 20:18:02       23 阅读
  11. uniApp 封装VUEX

    2024-07-09 20:18:02       18 阅读