视觉语言模型
(VLMs)
旨在学习通用的跨模态表示,这有利于在下游多模态任务中取得良好的性能。
根据多模态下游任务的不同,已经开发出不同的模型架构,包括双编码器架构
(Radford et al. 2021; Jia et al. 2021)
、融合编码器架构
(Tan and Bansal 2019; Li et al. 2021a)
、编码器-解码器架构
(Cho et al. 2021; Wang et al. 2022c; Chen et al. 2022a)
,以及最近的统一Transformer架构
(Li et al. 2022; Wang et al. 2022a)
。
预训练任务对
VLMs
可以从数据中学到什么有很大的影响。
主要有4种类型的任务:
(i)
跨模态掩码语言建模 (MLM)
(Kim, Son, and Kim 2021; Lin et al. 2020; Li et al. 2021a; Yu et al. 2022)
;
(ii)
跨模态掩码区域预测 (MRP)
(Lu et al. 2019; Chen et al. 2020; Huang et al. 2021)
;
(iii)
图像文本匹配 (ITM)
(Li et al. 2020; Lu et al. 2019; Chen et al. 2020; Huang et al. 2021)
;
(iv)
跨模态对比学习 (CMCL)
(Radford et al. 2021; Jia et al. 2021; Li et al. 2021a; Huo et al. 2021; Li et al. 2021b)
。
最近的研究主要集中在CMCL的研究上。
以CLIP模型
(Radford et al. 2021)
为例,该模型通过将正样本与数据集中所有其他样本的负样本进行比较,学习到了足够的通用表示。
一个多模态数据集通常由N个图像-文本对组成,其中图像和文本分别用带下标的
I
和
W
表示。
给定一个图像-文本对
(
I
_
i
,
W
_
i
)
和一个由
W
_
i
生成的相关的场景图
G
(
W
_
i
)
,一个高质量的语义负样本
W
_
i
−
通过
其中
F
是提出的采样函数,
W
_
i
−
表示高质量的语义负样本。
具体来说,对于场景图中的三元组
(
o
b
j
e
c
t
,
r
e
l
a
t
i
o
n
,
s
u
b
j
e
c
t
)
,
W
_
i
−
通过
其中
S
w
a
p
是交换句子中宾语和主语的函数,
O
_
1
,
R
,
O
_
2
表示宾语、关系和主语。
对于属性对
(
A
1
,
O
1
)
和
(
A
2
,
O
2
)
在场景图中,
W
_
i
−
通过
我们的对比学习目标是通过将图像
I
_
i
和原始标题
W
_
i
拉近,并将图像
I
_
i
和负样本
W
_
i
−
推远来学习足够的表示。
具体来说,我们引入了一个具有损失函数的多模态对比学习模块:
其中
γ
是边际超参数,
d
表示图像
I
_
i
和原始标题
W
_
i
之间的距离,而
d
′
表示图像
I
_
i
和原始标题
W
_
i
−
之间的距离。
引入对比学习目标是为了提高结构化表示的性能。
同时,为了保持模型的
一般表示能力
,我们将原始的小批量
图像-文本
对比学习
损失
和提出的
损失
结合起来进行联合训练。
原始的图像-文本对比学习损失
ℒ
_
I
T
C
L
包含图像到文本的对比损失
ℒ
_
i
2
t
和文本到图像的对比损失
ℒ
_
t
2
i
,它们
因此,
该
知识增强编码器
显式地将详细的知识建模为
模型
输入,即对象、对象的属性以及成对对象之间的关系。
具体来说,我们对两种结构化知识:对和三元组,制定了统一的输入规范。
我们将关系连词“is”添加到该对中以统一表示。
例如,以这种方式,对
(
w
h
i
t
e
,
c
o
w
)
将被视为三元组
(
c
o
w
,
i
s
,
w
h
i
t
e
)
。
这样就得到了一组三元组
𝒯
_
i
n
=
{
(
h
_
i
,
r
_
i
,
t
_
i
)
|
i
∈
[
1
,
k
]
}
,
其中
(
h
_
i
,
r
_
i
,
t
_
i
)
分别表示头实体、关系实体和尾实体。
对于
𝒯
_
i
n
中的每个三元组
(
h
_
i
,
r
_
i
,
t
_
i
)
,我们使用 BERT
(Devlin 等人 2019)
中的
Tokenizer 和 Word Vocabulary Embeddings
来获取每个
实体
嵌入
w
_
h
,
w
_
r
,
w
_
t
:
w
_
x
=
W
o
r
d
E
m
b
(
x
)
,
x
∈
[
h
,
r
,
t
]
,
(11)
为了获得每个实体嵌入的三重嵌入,我们使用以下编码函数:
e
_
t
r
i
p
l
e
_
i
=
E
N
C
_
t
r
i
p
l
e
(
h
_
i
,
r
_
i
,
t
_
i
)
=
w
_
h
,
i
+
w
_
r
,
i
−
w
_
t
,
i
,
(12)
其中
E
N
C
_
t
r
i
p
l
e
(
.
)
是三重编码函数。
有了这个三重编码器,我们的方法可以更好地解决头尾实体顺序颠倒的问题,详细分析在第2节中进行了说明。 4.4.3.
通过这种方式,K个三元组可以被处理成K个语义嵌入。
然后我们将
e
_
t
r
i
p
l
e
输入到
多个
Transformer层以获得最终表示。
e
_
K
E
=
T
R
M
s
(
[
e
_
t
r
i
p
l
e
_
1
,
…
,
e
_
t
r
i
p
l
e
_
K
]
)
,