ACL 2016 | Learning Text Similarity with Siamese Recurrent Networks |
---|---|
Author | Paul Neculoiu, Maarten Versteegh and Mihai Rotaru |
paper | https://www.aclweb.org/anthology/W16-1617.pdf |
本文提出了一种学习变长字符序列相似性度量的深层结构。该模型将字符级双向LSTM堆栈与孪生结构相结合。它学会了只使用关于字符串对之间相似性的信息,将可变长度的字符串投影到固定维度的嵌入空间中。此模型应用于基于人工标注的分类任务。一个小的数据集被增量地扩展,并用新的数据源进行扩充。该模型学习了一种反映一对输入的语义差异的表示(例如“Java developer”和“HR manager”),但对非语义的字符串差异(例如“Java developer”与“Java programmer”)是不变的。
引言
文本表示在自然语言处理领域有着非常重要的作用。领域内很多任务依赖于能够表达文本元素语义相似度的表征,无论是将字符还是单词作为文本元素。
文本间语义相似度的度量也是信息抽取的基本问题。很多应用程序的一个重要步骤是规范化,它将信息映射为标准格式,以便与其他信息比较,比如以标准方式格式化日期和时间,将 “12pm”, “noon” and “12.00h”映射到同样的表示,规范化主要依赖于语义相似性。
本文提出了一种职位规范化系统,它的任务是接收输入字符串并将其映射为外部预定义的一组职位的代码。比如,“software architectural technician Java/J2EE”可能映射为“Java developer”。这个任务可以作为多分类任务来进行处理,但是在本研究中,我们采用的方法是学习字符串的表示,使得具有相同含义的职位的表达能够紧密地联系在一起。这种方法的优点是灵活性比较高,即字符串的表示可以作为后续分类器的输入,也可以用于查找密切相关的职位或者将职位进行聚类。此外,这种学习模型的架构可以让我们在有限的监督学习下学习到有用的表示。
孪生循环神经网络
孪生网络是共享权重的双分支网络,它包括两部分相同的网络,然后最后通过一个energy function合并在一起。图1是本文研究的网络的结构。孪生网络的数据集由三元组
(
x
1
,
x
2
,
y
)
(x_1,x_2,y)
(x1,x2,y)组成,其中
(
x
1
,
x
2
)
(x_1,x_2)
(x1,x2)是字符序列,
y
∈
{
0
,
1
}
y\in\{0,1\}
y∈{0,1}表示
x
1
,
x
2
x_1,x_2
x1,x2是否相似
(
y
=
1
)
(y=1)
(y=1)或不相似
(
y
=
0
)
(y=0)
(y=0)。训练的目标是最小化嵌入空间中相似度之间的距离,最大化不同对之间的距离。
Contrastive loss function
该网络包含四层双向LSTM节点,最后一个BiLSTM层的每个时间步的激活值被平均化,从而产生一个固定维度的输出。这个输出再通过一个densely connected前馈层进行投影。
设
f
W
(
x
1
)
f_W(x_1)
fW(x1)和
f
W
(
x
2
)
f_W(x_2)
fW(x2)是由网络函数
f
W
f_W
fW计算出的嵌入空间中
x
1
x_1
x1和
x
2
x_2
x2的投影。我们将模型的energy function
E
W
E_W
EW定义为嵌入向量
x
1
x_1
x1和
x
2
x_2
x2的余弦相似度:
E
W
(
x
1
,
x
2
)
=
(
f
W
(
x
1
)
,
f
W
(
x
2
)
)
∣
∣
f
W
(
x
1
)
∣
∣
∣
∣
f
W
(
x
2
)
∣
∣
E_W(x_1,x_2)=\frac{(f_W(x_1),f_W(x_2))}{||f_W(x_1)|| ||f_W(x_2)||}
EW(x1,x2)=∣∣fW(x1)∣∣∣∣fW(x2)∣∣(fW(x1),fW(x2))
简洁起见,我们将用
E
W
E_W
EW表示
E
W
(
x
1
,
x
2
)
E_W(x_1,x_2)
EW(x1,x2)。数据集
X
=
{
{
x
1
{
i
}
,
x
2
{
i
}
,
y
{
i
}
}
}
X=\{\{x_1^{\{i\}},x_2^{\{i\}},y^{\{i\}}\}\}
X={{x1{i},x2{i},y{i}}}的总的损失函数由下式给出:
L
W
(
X
)
=
∑
i
=
1
N
L
W
(
i
)
(
x
1
(
i
)
,
x
2
(
i
)
,
y
(
i
)
)
L_W(X)=\sum_{i=1}^N L_W^{(i)}(x_1^{(i)},x_2^{(i)},y^{(i)})
LW(X)=i=1∑NLW(i)(x1(i),x2(i),y(i))
每个实例的损失函数
L
W
(
i
)
L_W^{(i)}
LW(i)是一个Contrastive loss function,由相似度
y
=
1
y=1
y=1情况下的损失函数
L
+
L_+
L+和相似度
y
=
0
y=0
y=0情况下的损失函数
L
−
L_-
L−组成:
L
W
(
i
)
=
y
(
i
)
L
+
(
x
1
(
i
)
,
x
2
(
i
)
)
+
(
1
−
y
(
i
)
)
L
−
(
x
1
(
i
)
,
x
2
(
i
)
)
L_W^{(i)}=y^{(i)}L_+(x_1^{(i)},x_2^{(i)})+(1-y^{(i)})L_-(x_1^{(i)},x_2^{(i)})
LW(i)=y(i)L+(x1(i),x2(i))+(1−y(i))L−(x1(i),x2(i))
相似和不相似情况下的损失函数如下:
L
+
(
x
1
(
i
)
,
x
2
(
i
)
)
=
1
4
(
1
−
E
W
)
2
L_+(x_1^{(i)},x_2^{(i)})=\frac{1}{4}(1-E_W)^2
L+(x1(i),x2(i))=41(1−EW)2
L
−
(
x
1
(
i
)
,
x
2
(
i
)
)
=
{
E
W
2
i
f
E
W
>
m
0
o
t
h
e
r
w
i
s
e
L_-(x_1^{(i)},x_2^{(i)})=\begin{cases} E_W^2 & if E_W>m \\ 0 & otherwise \end{cases}
L−(x1(i),x2(i))={EW20ifEW>motherwise
图2给出了损失函数的几何表示图,包括
L
+
L_+
L+和
L
−
L_-
L−。需要注意的是
L
+
L_+
L+按比例缩小,以补偿正负样本的采样比例。
我们来分析下上面的式子:假设现在是一个正样本,也就是 y ( i ) = 1 y(i)=1 y(i)=1,此时若预测的 E W E_W EW接近于1(即预测两个句子很相似),则整体损失很小,此时若预测的 E W E_W EW接近于-1(即预测两个句子不相似),则整体损失很大。给定 m = 0.5 m=0.5 m=0.5,假设现在是一个负样本,也就是 y ( i ) = 0 y(i)=0 y(i)=0,此时若预测的 E W E_W EW小于m,则损失为0,若预测的 E W E_W EW大于m,则损失很大。其实这个损失函数可以认为通过调整m的值,可以控制对句子相似度的苛刻度,m的值比较大时,会导致两个相似的句子的余弦相似度值是比较高的。
参考:https://www.cnblogs.com/jiangxinyang/p/11200964.html
本文中使用的网络包含四个BiLSTM层,其中包含64维的隐藏向量 h t h_t ht和记忆向量 c t c_t ct。层与层之间的每个时间步都有连接。最后一层的输出在各个时间步上被平均,得到的128维的向量被用作前馈层的输入。填充输入字符串以产生100个字符的序列,并按此序列随机放置输入字符串。使用Adam方法对模型参数进行优化,并对每个模型进行训练直到收敛。我们设置循环神经网络单元的dropout=0.2,层与层之间dropout=0.4以防止过拟合。