智能问答:LSTM 句子相似度分析

智能问答:LSTM 句子相似度分析

向AI转型的程序员都关注了这个号????????????

机器学习AI算法工程  公众号:datayx

智能问答:LSTM 句子相似度分析

使用句子中出现单词的Vector加权平均进行文本相似度分析虽然简单,但也有比较明显的缺点:没有考虑词序且词向量区别不明确。如下面两个句子:

  • “北京的首都是中国”与“中国的首都是北京”的相似度为1。

  • “学习容易”和“学习困难”的相似度很容易也非常高。

为解决这类问题,需要用其他方法对句子进行表示,LSTM是常用的一种方式,本文简单使用单层LSTM对句子重新表示,并通过若干全连接层对句子相似度进行衡量。

数据集,代码地址获取

关注微信公众号 datayx  然后回复 相似度  即可获取。

AI项目体验地址 https://loveai.tech

数据准备

训练和测试数据包括两个待比较句子以及其相似度(0-1):

智能问答:LSTM 句子相似度分析

测试数据格式相似。

语料编码

自然语言无法直接作为神经网络输入,需进行编码该部分包括以下步骤:

  • 读人训练和测试数据,分词,并给每个词编号。

  • 根据词编号,进一步生成每个句子的编号向量,句子采用固定长度,不足的位置补零。

  • 保存词编号到文件,保存词向量矩阵方便预测使用。

中文分词使用jieba分词工具,词的编号则使用Keras的Tokenizer:

智能问答:LSTM 句子相似度分析

智能问答:LSTM 句子相似度分析

词向量映射

在对句子进行编码后,需要准备句子中词的词向量映射作为LSTM层的输入。这里使用预训练的词向量参数,生成词向量映射矩阵:

智能问答:LSTM 句子相似度分析

网络结构

该神经网络采用简单的单层LSTM+全连接层对数据进行训练,网络结构图:

智能问答:LSTM 句子相似度分析

网络由Keras实现:

智能问答:LSTM 句子相似度分析

该部分首先定义embedding_layer作为输入层和LSTM层的映射层,将输入的句子编码映射为词向量列表作为LSTM层的输入。两个LSTM的输出拼接后作为全连接层的输入,经过Dropout和BatchNormalization正则化,最终输出结果进行训练。

训练与预测

训练采用nAdam以及EarlyStopping,保存训练过程中验证集上效果最好的参数。最终对测试集进行预测。

智能问答:LSTM 句子相似度分析

小结

该网络在Kaggle Quora数据集val验证可达到80%左右的准确率,应用于中文,由于数据集有限,产生了较大的过拟合。此外在Tokenizer.fit_on_texts应用于中文时,不支持Unicode编码,可以对其源码方法进行重写,加入Ascii字符和Unicode的转换。

智能问答:LSTM 句子相似度分析

原文 https://www.jianshu.com/p/a649b568e8fa


阅读过本文的人还看了以下:

不断更新资源

深度学习、机器学习、数据分析、python

 搜索公众号添加: datayx  

智能问答:LSTM 句子相似度分析

长按图片,识别二维码,点关注

AI项目体验

https://loveai.tech

智能问答:LSTM 句子相似度分析