基于LSTM的语句相似度计算
语句相似度的计算,在文本对比,内容推荐,重复内容判断等方面有比较多的应用,最近学习了一种基于LSTM的语句相似度计算方法,本文对学习的过程进行总结。
本文基于Siamese网络,句子相似度计算方法论文:Siamese Recurrent Architectures for Learning Sentence Similarity
Siamese Network 是指⽹络中包含两个或以上完全相同的⼦⽹络,多应 ⽤于语句相似度计算、⼈脸匹配、签名鉴别等任务上:
论文中指出的模型结构
以语句相似度计算为例,两边的⼦⽹络从 Embedding 层到 LSTM 层等 都是完全相同的,整个模型称作 MaLSTM(ManhaĴan LSTM)。
通过 LSTM 层的最后输出得到两句话的固定长度表⽰,再使⽤以下公式 计算两者的相似度,相似度在 0 ⾄ 1 之间。
训练用的数据来自kaggle上quora的问题对数据:数据地址
数据描述
其中,训练集与测试集分别有 404290 和 3563475 条数据。训练集包含以下所有字段,测试集不包含is_duplicate字段。
id:问题对的 id;
qid1:问题 1 的 id;
qid2:问题 2 的 id;
question1:问题 1 的⽂本;
question2:问题 2 的⽂本;
is_duplicate:两个问题是不是意思⼀样,0 或 1
首先加载停用词,用正则表达式对文本进行一些预处理,将测试数据与训练数据合并后,得到所有单词的词汇列表,⽂本替换成整数序列表⽰,获得词向量映射矩阵,采用曼哈顿距离来计算两个句子的差异。
下载的数据里,测试集由于缺少is_duplicate字段,因此它只参与了词汇向量映射矩阵的构建。
将包含is_duplicate字段的训练数据分割为训练集和验证集,参与模型训练迭代过程。
基于Keras定义LSTM网络,并进行训练,网络结构采用两个句子作为输入,对输入的句子进行预处理后,计算出句子相似度的概率。
下图是整个网络大致的过程,左右两个句子输入后,句子中的每个词对应一个数字,左右两句话分别映射成一个向量,各自经过一个LSTM网络抽取特征后,使用曼哈顿距离计算两边向量的差距,最终得出预测结果。
具体代码,可以参考:MaLSTM on Kaggle’s Quora Question Pairs
参考地址:
Siamese Recurrent Architectures for Learning Sentence Similarity
MaLSTM on Kaggle’s Quora Question Pairs
深度有趣-语句相似度计算
本文来自“机器在学习”
- 点赞
- 收藏
- 关注作者
评论(0)