update 20181105
很多读者反应代码运行出现问题,总结起来基本上都集中在keras和gensim的版本问题。一个是本文keras版本是2.1.6,Merge层在2.2.0后被弃用,改用keras.layers.Add()和keras.layers.Concatennate()。二是gensim中word2vec模型加载有问题。
下文一并进行更改,感谢各位的邮件和评论。
句子相似度计算在问答系统以及客服机器人当中应用比较频繁,比对针对对话模型中比较频繁的问句可以先进行过滤,之后再进行对话理解。在文本检测方面也有所应用,比如作家写作风格的检测。
本文叙述的句子相似度计算方法来自论文Siamese Recurrent Architectures for Learning Sentence Similarity,论文是基于Simaese LSTM网络对成对相似句进行训练,通过encode得到句子的向量表示之后计算曼哈顿距离(0-1之间)。
模型结构如下:
从上图可以看到模型分为a、b两个LSTM网络,分别对待测的两个句子进行encode得到待测句子的表示向量,最后将得到的两个向量进行距离计算,这里采用的是曼哈顿距离。
可以看到其实模型很简单,下面本文就尝试着实现一个这样的模型。