基于Simase_LSTM的计算中文句子相似度经验总结与分享

深度学习在语音和图像领域大显神威之后,最近火力有集中到了自然语言处理上了。目前,最成功的成就在于wordembedding,成功落地的案例也有很多,比如机器翻译,智能对话,还比如作者所在从事的搜索排序、反垃圾、反作弊方面也有很多成功的应用。以中文为例,NLP最小单元是单个的字,然后是词,再然后是句子,段落,篇章,因此,DL在NPL的应用重点集中在句子,段落和文章级别,其中,句子之间的相似度计算也是其中很受关注以方便,应用范围也很广,比如,问答,搜索排序等。本文主要讲解基于Siamase LSTM来计算句子相似度,后面会给出一个Tensorflow的具体例子。

Simase LSTM指的是具有simase结构的LSTM网络,由两个平行双向LSTM构成,结构参考下面两张图:


从图中可以发现,SiamaseLSTM主要结构主要分为两个部分,第一部分是由两个平行的双向LSTM构成的特征抽取部分,第二部分是由单层或单层全连接层构成的分类/拟合层。下面具体谈一下个人对这个结构理解:特征抽取部分是两个并行的部分,输入可以是两个词,两句话或者两篇文章,通过堆叠的单层或者多层双向LSTM抽取特征,具体几层需要根据数据量和具体实验结果定,单元(基于tensorflow来做)可以选择GRU替换,训练速度更快。并行的堆叠LSTM块之间原则上应该具有不同的参数,因为输入样本具有不平衡性,举个例子:以输入为两个句子为例,两个句子之间的长度是不一致的;如果想要减少参数量级别,可以共用一套参数。对于堆叠LSTM输出的需要对所有的timestep按位求和做为后续部分的输入,同时,如果输出的特征长度过大,可以先用一个全连接层绛维,比如堆叠LSTM的输出是200,可以经过一个输入未200,输出未100的全连接层绛维,主要目的,一是提升模型拟合能力,二是,进一步抽取更有价值的特征,保证模型收敛(这点非常重要)。同时,也可以在该层加入以下attention和cosine相似度的特征来对模型的结构进行改进,提升模型精度,比如如下结构:

如上图所示,上图包括两组堆叠双向LSTM,每组由两个双向LSTM组成,一个堆叠的双向LSTM用与特征抽取,一个单层的LSTM用做attention,抽取句子中每个词的重要程度,以tensorflow为例,输出长度与maxSenLen,即最大句子长度一致。还对两组LSTM抽取出的特征之间,attention输出之间计算相似度,然后把所有的特征拼接在一起做为多层全连接网络输入特征,最终的输出目标可以使两个句子向量之间cos距离,或者做为一个多分类,则转化为两个分布,用softmax计算两个分布之间距离。

实际的实验证明,加入cos相似度和attention之后,可以减少单LSTM神经元的数目,模型预测的未建集准确率由79.2%提升至84.6%,效果还是很明显,具体使用时还可以在层与层之间加入Batch Normalization层来对数据进行归一化,可以明显提升收敛速度。

参考文章:

【1】Siamese Recurrent Architectures for Learning Sentence Similarity

【2】Learning Text Similarity with Siamese Recurrent Networks

获得更多深度学习在NLP方面应用的经典论文、实践经验和最新消息,欢迎关注微信公众号“DeepLearning_NLP” 或者扫描头像二维码添加关注。



你可能感兴趣的:(经验,深度学习,Simase_LSTM,句子相似度)