孪生网络(Siamese Network)在句子语义类似度计算中的应用

1,概述网络

  在NLP中孪生网络基本是用来计算句子间的语义类似度的。其结构以下函数

    

  在计算句子语义类似度的时候,都是以句子对的形式输入到网络中,孪生网络就是定义两个网络结构分别来表征句子对中的句子,而后经过曼哈顿距离,欧式距离,余弦类似度等来度量两个句子之间的空间类似度。spa

  孪生网络又能够分为孪生网络和伪孪生网络,这二者的定义:3d

  孪生网络:两个网络结构相同且共享参数,当两个句子来自统一领域且在结构上有很大的类似度时选择该模型;blog

  伪孪生网络:两个网络结构相同但不共享参数,或者两个网络结构不一样,当两个句子结构上不一样,或者来自不一样的领域,或者时句子和图片之间的类似度计算时选择该模型;图片

  另外孪生网络的损失函数通常选择Contrastive loss Function(对比损失函数)。接下来具体看看孪生网络在句子语义类似度计算中的几篇论文:it

 

2,论文模型介绍io

  1)Siamese CBOW: Optimizing Word Embeddings for Sentence Representations ast

  该论文提出了一种基于孪生网络+CBOW的方式来无监督式的训练句子的向量表示。网络的结构图以下:function

    

  首先给定一个很大的语料库,语料库中的句子要保持原来文章中的顺序,那咱们该怎么将这个无监督的任务构形成有监督式的任务呢?看论文中这个CBOW,其实就是采用了相似word2vec中的CBOW的形式来构造有监督式的任务的。咱们给定一个中心句子$s_i$,而后将中心句子的上下句做为正样本(即和中心句子相关的句子),而后从其余句子中随机选择$n$个句子做为负样本,以论文中为例,负样本也选择2个。所以就构形成了这样一个句子集合$[s_i, s_{i+1}^+, s_{i-1}^+, s_1^-, s_2^-]$,那么这样一个句子集合就做为一个样本输入到模型中,以这里的例子为例,就构形成了一个具备5个相同结构相同参数的网络来处理这5个句子。有了样本以后,标签该怎么定义呢?在这里的真实标签订义以下:

    

  上面式子中的$S^+, S^-$分别表示正样本句子集合和负样本句子集合。所以真实标签是服从几率分布的。接下来咱们看看预测标签该怎么定义,其定义以下:

    

  上面式子为预测标签的几率分布(softmax后的结果),其中$s_i^{\theta}$是句子$s_i$的向量表示,那么问题来了,这个句子向量是怎么获得的呢?其实模型的输入最小粒度是词,在这里会用一个词嵌入矩阵(词向量)来将每一个词映射到低维向量,而后对句子中的词向量取平均来表示句子的向量。以后再计算中心句子$s_i$和其余句子的余弦类似度,而后通过softmax获得预测的几率分布。既然真实标签和预测标签都服从几率分布,那么损失函数就能够直接用交叉熵了,所以损失函数以下:

    

  其实这里整个模型被训练的参数只有一开始的词嵌入矩阵,也就是说咱们这个模型最终训练的到的也就是一个词向量,但由于目标任务是计算句子的类似度,并且损失函数的构造也是来建模句子之间的关系,所以我的人为这种方式得到的词向量,经过取平均的方式能更好的表示句子向量。所以在句子类似度的任务上的效果也是优于word2vec词向量的。

 

  2)Siamese Recurrent Architectures for Learning Sentence Similarity

  上面介绍了一种无监督的方式,接下来的模型都是有监督的。 本论文提出了一种MaLSTM的网络结构,其网络结构以下:

    

  其实网络结构是并没什么新意,其具体以下:

  1)经过两个LSTM网络(能够是孪生网络,也能够是伪孪生网络)来处理句子对,取LSTM最后时刻的输入做为两个句子的向量表示。

  2)用曼哈顿距离来度量两个句子的空间类似度。

  论文中没有提到用了什么损失函数,但通常孪生网络的损失函数都是Contrastive loss function。这个咱们在下面再介绍,至于在这里做者为何选择曼哈顿距离,做者认为欧式距离容易出现梯度消失。并且在实验中显示效果也是优于余弦类似度的,对于这个度量选择,我的认为仍是以本身的实际项目来选择,并不存在一个绝对的好坏。

 

  3)Learning Text Similarity with Siamese Recurrent Networks

  该论文一样是用LSTM来处理句子对,其网络结构以下:

    

  在这里将句子对的关系看做是一个二分类的问题,给定一个样本$[x_1, x_2, y]$,在这里$y$的结果为$[0, 1]$,所以能够看做一个二分类问题,在这里的度量方式选择的是余弦类似度,其表达式以下:

    

  损失函数用了Contrastive loss function,其表达式以下:

    

  从损失函数的形式上看相似于二元交叉熵损失函数,可是这里的$L_-$并不等于$1 - L_+$,其表达式以下:

    

  其表示图以下:

    

  注:从这里的图来看,上面的式子是有误的,$ E_W < m$ 应该改为$E_W > m$。

  咱们来分析下上面的式子:假设如今是一个正样本,也就是$y^{(i)} = 1$,此时若预测的$E_W$接近于1(即预测两个句子很类似),则总体损失很小,此时若预测的$E_W$接近于-1(即预测两个句子不类似),则总体损失很大。假设如今是一个负样本,给定$m = 0.5$,也就是$y^{(i)} = 0$,此时若预测的$E_W$小于$m$,则损失为0,若预测的$E_W$大于$m$,则损失很大。其实这个损失函数能够认为经过调整$m$的值,能够控制对句子类似度的苛刻度,$m$的值比较大时,会致使两个类似的句子的余弦类似度值是比较高的。

 

 参考文献:

 Siamese CBOW: Optimizing Word Embeddings for Sentence Representations 

 Siamese Recurrent Architectures for Learning Sentence Similarity

 Learning Text Similarity with Siamese Recurrent Networks

相关文章
相关标签/搜索