通过同时弱监督对比学习和聚类改善事件表示
《Improving Envet Representation via Simultaneous Weakly Supervised Contrastive Learning and Clustering》
论文地址:https://arxiv.53yu.com/pdf/2203.07633.pdf
一、简介
? 事件的分布式表示是一种常用的表示事件的方法,其能够为各种任务提供特征。但是,获得有效的事件表示是一项有挑战的任务。因此,需要分布式表示能够获得事件间的各种关系。两个事件可能会共享相同的事件属性(事件类型或者情感),且两个事件可能存在因果关系或者时序关系。
? 早期的方法主要是利用事件的共现关系来学习事件的分布式表示。共享关系虽然很有用,但是对于深入的理解事件来说还是太粗糙。近期的工作则是尝试使用细粒度的知识,例如:语言关系和常识知识。具体来说,
Lee
\text{Lee}
Lee等人利用11个语言关系类型来建模事件知识,而
Ding
\text{Ding}
Ding等人则将人工标注的常识合并至事件表示中。然而,细粒度知识太过多样,而目前的细粒度知识仅是事件知识的一小部分。此外,人工标注的知识非常昂贵且无法扩展到大规模数据集上。
? 在本文的工作中,作者观察到共享事件中存在着非常丰富的信息,但是先前的研究被没有很好的利用这些信息。基于现有的实际关系抽取研究,共现关系(指两个事件在同一文档中出现)能够被看作是精确语言关系的超集。具体来说,这些关系能够通过语言中的标记来表示,例如:
because
\text{because}
because能够捕获因果关系。此外,共现关系也包含了其他隐含的事件知识,例如:相同文档中的事件可能共享相同的主题和事件类型。先前的工作为例学习基于共现信息的事件表示,通常会利用
margin?loss
\text{margin loss}
margin?loss来进行实例级对比学习,该loss由一个anchor、正样本和负样本组成。但是,该loss有两个局限性:(1) 由于
margin?loss
\text{margin loss}
margin?loss中的每个anchor仅考虑一个正样本和一个负样本,因此在捕获不同语义事件上表现的十分挣扎;(2) 随机采样的负样本可能包含与anchor语义相关的样本。
? 本文的动机是解决上面的问题,并更好的利用事件的共现信息。因此,本文提出了
SWCC
\text{SWCC}
SWCC:一个同时进行弱监督对比学习和聚类的事件表示学习框架。为了解决第一个问题,使用
InfoNCE
\text{InfoNCE}
InfoNCE目标函数来构建对比学习框架,其使用一个正样本和多个负样本。此外,本文还将
InfoNCE
\text{InfoNCE}
InfoNCE扩展至弱监督对比学习中,并且允许对每个anchor考虑多个正样本和多个负样本。共现事件也被作为额外的正样本,并使用共现频率作为权重。为了解决第二个问题,本文还引入了一个基于prototype的聚类方法来避免语义相关的事件被拉远。
? 总的来说,本文的贡献如下:
-
提出了一个简单且有效的事件表示学习框架
SWCC
\text{SWCC}
SWCC,其能够更好的利用事件的共现信息来学习事件表示; -
引入了一个弱监督对比学习方法,允许同时考虑多个正例和多个负例,并提出一个基于prototype的聚类方法来避免语义相关的事件被拉远; -
针对基于prototype的聚类方法提供了全面的分析,并且发现学习到的prototype向量潜在包含着事件的各种关系;
二、相关技术
1. 事件表示模型
? 在早期,
Neural?Tensor?Networks(NTNs)
\text{Neural Tensor Networks(NTNs)}
Neural?Tensor?Networks(NTNs)被广泛的用来构成事件组件的向量表示,即
(subject,predicate,object)
\text{(subject,predicate,object)}
(subject,predicate,object)。但是,这种方法引入了很强的组合归纳偏差,并且不能扩展至具有更多论元的事件。近期的研究工作尝试使用预训练语言模型来替换静态词向量,从而获得效果更好的事件表示。本文同样也使用
BERT
\text{BERT}
BERT作为backbone模型。
?
BERT
\text{BERT}
BERT编码器将文本作为输入,输入的形式如下:
[CLS]
,
p
r
e
d
,
s
u
b
j
,
o
b
j
,
[
S
E
P
]
(1)
\text{[CLS]},pred,subj,obj,[SEP] \tag{1}
[CLS],pred,subj,obj,[SEP](1) 定义
x
=
[
x
0
,
x
1
,
…
,
x
L
]
\textbf{x}=[x_0,x_1,\dots,x_L]
x=[x0?,x1?,…,xL?]是长度为
L
L
L的输入序列,其中
x
0
x_0
x0?和
x
L
x_L
xL?是
[CLS]
\text{[CLS]}
[CLS]的token和
[SEP]
\text{[SEP]}
[SEP]的token。给定
x
\textbf{x}
x,
BERT
\text{BERT}
BERT返回一个上下文向量序列
[
v
[CLS]
,
v
x
1
,
…
,
v
x
L
]
=
BERT
(
x
)
(2)
[\textbf{v}_{\text{[CLS]}},\textbf{v}_{x_1},\dots,\textbf{v}_{x_L}]=\text{BERT}(\textbf{x}) \tag{2}
[v[CLS]?,vx1??,…,vxL??]=BERT(x)(2) 其中,
v
[CLS]
\textbf{v}_{\text{[CLS]}}
v[CLS]?是token
[CLS]
\text{[CLS]}
[CLS]的向量表示。事件最终的向量表示
z
\textbf{z}
z是输出的
[CLS]
\text{[CLS]}
[CLS]的向量表示:
z
=
v
[CLS]
\textbf{z}=\textbf{v}_{\text{[CLS]}}
z=v[CLS]?。
2. 实例级对比学习
? 通过对比学习来训练事件表示模型。对比学习的目标是将相关的事件拉近并将不相关的事件拉远。
margin?loss
\text{margin loss}
margin?loss在许多事件表示学习工作中被广泛的使用。最近提出的对比损失函数
InfoNCE
\text{InfoNCE}
InfoNCE在各种对比学习任务中展现了其有效性。
Chen
\text{Chen}
Chen等人进一步证明了
InfoNCE
\text{InfoNCE}
InfoNCE比
margin?loss
\text{margin loss}
margin?loss更好。因此,本文使用
InfoNCE
\text{InfoNCE}
InfoNCE来训练事件表示模型。
? 正式来说,给定一个由
N
N
N对事件构造的数据集
D
=
{
x
i
,
x
i
+
}
i
=
1
N
\mathcal{D}=\{\textbf{x}_i,\textbf{x}_i^+\}_{i=1}^N
D={xi?,xi+?}i=1N?,其中其中
x
i
+
\textbf{x}_i^+
xi+?是
x
i
\textbf{x}_i
xi?的正样本。
InfoNCE
\text{InfoNCE}
InfoNCE在样本对
(
x
i
,
x
i
+
)
(\textbf{x}_i,\textbf{x}_i^+)
(xi?,xi+?)上的计算方式为
L
=
?
log
g
(
z
i
,
z
i
+
)
g
(
z
i
,
z
i
+
)
+
∑
k
∈
N
(
i
)
g
(
z
i
,
z
k
)
(3)
\mathcal{L}=-\text{log}\frac{g(\textbf{z}_i,\textbf{z}_i^+)}{g(\textbf{z}_i,\textbf{z}_i^+)+\sum_{k\in\mathcal{N}(i)}g(\textbf{z}_i,\textbf{z}_k)} \tag{3}
L=?logg(zi?,zi+?)+∑k∈N(i)?g(zi?,zk?)g(zi?,zi+?)?(3) 其中,
z
i
\textbf{z}_i
zi?和
z
i
+
\textbf{z}_i^+
zi+?是样本
x
i
\textbf{x}_i
xi?和
x
i
+
\textbf{x}_i^+
xi+?的增强表示,
k
∈
N
(
i
)
k\in\mathcal{N}(i)
k∈N(i)是batch内负样本的索引,
g
g
g是一个相似度度量函数
g
(
z
i
,
z
k
)
=
exp
(
z
i
?
z
k
/
τ
)
g(\textbf{z}_i,\textbf{z}_k)=\text{exp}(\textbf{z}_i^\top\textbf{z}_k/\tau)
g(zi?,zk?)=exp(zi??zk?/τ),其中
τ
∈
R
+
\tau\in\mathbb{R}^+
τ∈R+是一个temperature值。
3. 数据增强
? 对比学习中的关键问题是如何获取
z
i
+
\textbf{z}_i^+
zi+?。在自然语言中,
z
i
+
\textbf{z}_i^+
zi+?通过是先对
x
i
\textbf{x}_i
xi?进行词删除、重排和替换来实现数据增强,然后将增强的数据输入至表示模型中获得。近期的一些工作利用
dropout
\text{dropout}
dropout噪音实现自然语言上的数据增强,并且发现这种增强技术的表现要好于常见的数据增强技术。具体来说,给定一个事件
x
i
\textbf{x}_i
xi?,将该事件输入
BERT
\text{BERT}
BERT编码器两次,从而获得两个向量表示
z
i
\textbf{z}_i
zi?和
z
i
+
\textbf{z}_i^+
zi+?,两次的不同在于不同的
dropout?mask
\text{dropout mask}
dropout?mask:
z
i
=
f
θ
(
x
i
,
?
1
)
,
z
i
+
=
f
θ
(
x
i
,
?
2
)
(4)
\textbf{z}_i=f_\theta(\textbf{x}_i,\phi_1),\textbf{z}_i^+=f_\theta(\textbf{x}_i,\phi_2) \tag{4}
zi?=fθ?(xi?,?1?),zi+?=fθ?(xi?,?2?)(4) 其中,
?
1
\phi_1
?1?和
?
2
\phi_2
?2?是两个不同的随机
dropout?mask
\text{dropout mask}
dropout?mask。
三、事件表示框架
SWCC
\text{SWCC}
SWCC
?
? 本小节将介绍框架的细节。上图展示了框架
SWCC
\text{SWCC}
SWCC,其包含两部分:左边的弱监督对比学习方法和右边基于prototype的聚类方法。
1. 弱监督对比学习
? 这里使用基于
InfoNCE
\text{InfoNCE}
InfoNCE损失函数来构建对比学习框架,而不是使用
margin?loss
\text{margin loss}
margin?loss。为了能够将共现的信息合并至事件表示,可以考虑将每个样本的共享事件作为额外的正样本,即$x_i
的
正
增
强
样
本
来
自
它
的
共
现
事
件
的正增强样本来自它的共现事件
的正增强样本来自它的共现事件x_p
。
然
而
,
原
始
的
。然而,原始的
。然而,原始的\text{InfoNCE}
损
失
函
数
并
不
能
处
理
多
个
正
样
本
的
情
况
。
本
文
采
用
损失函数并不能处理多个正样本的情况。本文采用
损失函数并不能处理多个正样本的情况。本文采用\text{InfoNCE}$的变体,并引入了基于共享频率的加权机制。
1.1 共现作为弱监督
? 每个输入样本对表示为
(
x
i
,
x
p
)
(x_i,x_p)
(xi?,xp?),其中
x
i
x_i
xi?和
x
p
x_p
xp?指向输入事件和它的一个共现事件。首先,通过上面提到的事件表示模型为
x
i
x_i
xi?计算一个增强表示,作为anchor事件。本方法与
InfoNCE
\text{InfoNCE}
InfoNCE的不同在于构建
x
i
x_i
xi?的正样本集合
A
(
i
)
\mathcal{A}(i)
A(i)。在
InfoNCE
\text{InfoNCE}
InfoNCE中,
A
(
i
)
\mathcal{A}(i)
A(i)仅包含一个正样本。本文提出的方法中,通过推广等式
(
3
)
(3)
(3)来支持多个正样本的学习
L
=
∑
a
∈
A
(
i
)
?
log
g
(
z
i
,
z
a
)
g
(
z
i
,
z
a
)
+
∑
k
∈
N
(
i
)
g
(
z
i
,
z
k
)
(5)
\mathcal{L}=\sum_{a\in \mathcal{A}(i)}-\text{log}\frac{g(\textbf{z}_i,\textbf{z}_a)}{g(\textbf{z}_i,\textbf{z}_a)+\sum_{k\in\mathcal{N}(i)}g(\textbf{z}_i,\textbf{z}_k)}\tag{5}
L=a∈A(i)∑??logg(zi?,za?)+∑k∈N(i)?g(zi?,zk?)g(zi?,za?)?(5) 其中
A
(
i
)
\mathcal{A}(i)
A(i)和
N
(
i
)
\mathcal{N}(i)
N(i)指事件
x
i
x_i
xi?的正样本集合和负样本集合。该损失函数支持任意数量的正样本,但考虑到
GPU
\text{GPU}
GPU显存的限制,使用
A
(
i
)
=
{
z
a
1
,
z
a
2
,
z
a
3
}
\mathcal{A}(i)=\{\textbf{z}_{a1},\textbf{z}_{a2},\textbf{z}_{a_3}\}
A(i)={za1?,za2?,za3??},其中
z
a
1
\textbf{z}_{a1}
za1?和
z
a
2
\textbf{z}_{a2}
za2?是通过dropout获得事件
x
i
x_i
xi?的两个增强表示,
z
a
3
\textbf{z}_{a3}
za3?则是一个共现事件的增强表示。
z
a
1
\textbf{z}_{a_1}
za1??和
z
a
2
\textbf{z}_{a2}
za2?将会被用于基于prototype的聚类方法。
1.2 合并共现频率
? 事件的共现频率表示链接的强度。为了更好的利用数据引入了权重机制,将事件间的共现频率作为实例权重来重写等式
(
5
)
(5)
(5)
L
c
l
=
∑
a
∈
A
(
i
)
?
log
ε
a
?
g
(
z
i
,
z
a
)
g
(
z
i
,
z
a
)
+
∑
k
∈
N
(
i
)
g
(
z
i
,
z
k
)
(6)
\mathcal{L}_{cl}=\sum_{a\in \mathcal{A}(i)}-\text{log}\frac{\varepsilon_a\cdot g(\textbf{z}_i,\textbf{z}_a)}{g(\textbf{z}_i,\textbf{z}_a)+\sum_{k\in\mathcal{N}(i)}g(\textbf{z}_i,\textbf{z}_k)}\tag{6}
Lcl?=a∈A(i)∑??logg(zi?,za?)+∑k∈N(i)?g(zi?,zk?)εa??g(zi?,za?)?(6) 其
ε
a
\varepsilon_a
εa?是正样本
z
a
\textbf{z}_a
za?的权重。正样本
z
a
1
\textbf{z}_{a1}
za1?和
z
a
2
\textbf{z}_{a2}
za2?的权重
ε
a
1
\varepsilon_{a1}
εa1?和
ε
a
2
\varepsilon_{a2}
εa2?被设置为
ε
a
1
=
ε
a
2
=
1
∣
A
(
i
)
∣
?
1
\varepsilon_{a1}=\varepsilon_{a2}=\frac{1}{|\mathcal{A}(i)|-1}
εa1?=εa2?=∣A(i)∣?11?。共现事件
z
a
3
\textbf{z}_{a3}
za3?的权重
ε
a
3
\varepsilon_{a3}
εa3?则需要先计算一个共现矩阵
V
\textbf{V}
V,每个值对应两个事件的共现频率。使用
Min-Max
\text{Min-Max}
Min-Max规范化方法将
V
\textbf{V}
V规范化为
V
^
\hat{\textbf{V}}
V^,并使用
V
^
\hat{\textbf{V}}
V^中的取值作为共现事件的权重
ε
a
3
\varepsilon_{a3}
εa3?。
2. 基于Prototype的聚类
? 为了避免语义关联的事件被拉开,引入了基于prototype的聚类方法。这里的prototype是一组语义相关事件的代表性向量表。在聚类的同时,强制一个实体的不同增强表示的簇分配保持一致。不同于实例级对比学习,本文的聚类方法通过事件表示和簇表示间的对比来使模型专注簇基本的语义。
2.1 簇预测
? 本方法使用簇分配作为中介来比较相同事件的不同增强表示。这种方法的动机是,若两个增强表示能够捕获相同的信息,那么就能从一个增强表示来预测另一个增强表示的簇分配。具体来说,给定
M
M
M个prototype,每个prototype对应一个可学习向量
c
i
,
i
∈
[
M
]
\textbf{c}_i,i\in[M]
ci?,i∈[M]。给定一个输入事件,使用不同的dropout获得两个不同的增强表示,即事件
x
i
\textbf{x}_i
xi?的两个增强表示
z
a
1
\textbf{z}_{a1}
za1?和
z
a
2
\textbf{z}_{a2}
za2?。计算这两个增强表示与
M
M
M个prototype的相似度,得到簇分配
q
a
1
\textbf{q}_{a1}
qa1?和
q
a
2
\textbf{q}_{a2}
qa2?。然后,交换两个增强样本的簇分配,并使用增强表示
z
a
1
\textbf{z}_{a1}
za1?预测簇分配
q
a
2
\textbf{q}_{a2}
qa2?,且用
z
a
2
\textbf{z}_{a2}
za2?预测
q
a
1
\textbf{q}_{a1}
qa1?。正式来说,簇预测损失函数为
L
c
p
=
l
(
z
a
1
,
q
a
2
)
+
l
(
z
a
2
,
q
a
1
)
(7)
\mathcal{L}_{cp}=\mathcal{l}(z_{a1},\textbf{q}_{a2})+l(z_{a2},\textbf{q}_{a1}) \tag{7}
Lcp?=l(za1?,qa2?)+l(za2?,qa1?)(7) 其中,函数
l
(
z,q
)
=
?
q
log
??
p
\mathcal{l}(\textbf{z,q})=-\textbf{q}\text{log}\;\textbf{p}
l(z,q)=?qlogp用来衡量表示
z
\textbf{z}
z和簇分配
q
\textbf{q}
q的拟合程度。
p
\textbf{p}
p是
M
M
M个prototypes的概率向量
p
(
j
)
=
exp
(
z
?
c
j
/
τ
)
∑
k
=
1
M
exp
(
z
?
c
k
/
τ
)
(8)
p^{(j)}=\frac{\text{exp}(\textbf{z}^\top\textbf{c}_j/\tau)}{\sum_{k=1}^M \text{exp}(\textbf{z}^\top\textbf{c}_k/\tau)} \tag{8}
p(j)=∑k=1M?exp(z?ck?/τ)exp(z?cj?/τ)?(8) 其中,
τ
\tau
τ是temperature超参数。直觉上,簇预测方法通过中间的簇分配
q
a
1
\textbf{q}_{a1}
qa1?和
q
a
2
\textbf{q}_{a2}
qa2?来链接表示
z
a
1
\textbf{z}_{a1}
za1?和
z
a
2
\textbf{z}_{a2}
za2?。
2.2 计算簇分配
? 这里使用"最优运输求解器"来计算簇分配,这个求解器能够确保所有增强表示被均等划分至簇。特别地,利用
Sinkhorn-Knopp
\text{Sinkhorn-Knopp}
Sinkhorn-Knopp算法来求解最优运输问题。该算法开始于每个元素被初始化为
z
b
?
c
m
\textbf{z}_b^\top\textbf{c}_m
zb??cm?的矩阵
Γ
∈
R
M
×
N
\Gamma\in\mathbb{R}^{M\times N}
Γ∈RM×N,其中
b
∈
[
N
]
b\in[N]
b∈[N]是每列的索引。然后迭代生成一个双标准化矩阵。
3. 模型训练
?
SWCC
\text{SWCC}
SWCC通过同时执行弱监督对比学习和基于prototype的聚类来学习事件表示。整个训练的损失函数有3项:
L
o
v
e
r
a
l
l
=
L
c
l
+
β
L
c
p
+
γ
L
m
l
m
(9)
\mathcal{L}_{overall}=\mathcal{L}_{cl}+\beta\mathcal{L}_{cp}+\gamma\mathcal{L}_{mlm} \tag{9}
Loverall?=Lcl?+βLcp?+γLmlm?(9) 其中,
β
\beta
β和
γ
\gamma
γ是超参数。
? 第一项是弱监督对比学习损失函数,其允许模型将共现信息合并至事件表示中。第二项是基于prototype的聚类损失函数,其强制同一输入事件的不同增强版本在簇分配上保持一致。最后一项是
MLM
\text{MLM}
MLM目标损失函数,用于避免模型遗忘token级别的知识。
四、总结
- 通过聚类的方式来缓解对比学习导致的相似样本被拉远;
- 聚类能够使事件表示蕴含各种关系;
|