使用深度双向LSTM模型构造社区问答系统
首先强调一下,这个结构也是一个解决对照两个句子类似性的通用RNN解决方式,不只能够使用在问答社区。凡是涉及到对照两个句子或者实体关系的场合全然能够套用这个模型来解决。这点希望读者注意。
首先。由于我们面临的问题是对照两个问题Qi和Qj是否语义同样,那么对于RNN来说存在一个神经网络的输入层怎样构造的难题。CNN解决这类问题就比較直观。一般一个输入套上一个CNN来抽取出句子特征。然后再套上MLP神经网络来表达两者之间的关系就可以。RNN表达单个输入句子是非常直观的,可是直接表达两个句子之间的关系相对而言就没那么直观。一般能够如图1这么做。就是把两个问题Qi和Qj拼接起来,中间用一个特殊分隔符EOS切割,这里EOS不代表一个句子的结束,而是代表两个句子的分隔符号,这个也请读者注意。如此就构造出了RNN的输入层。
有了输入层,上面就优点理了。
首先我们在输入层之上。套上一层双向LSTM层。LSTM是RNN的改进模型。相比RNN,能够更有效地处理句子中单词间的长距离影响。而双向LSTM就是在隐层同一时候有一个正向LSTM和反向LSTM,正向LSTM捕获了上文的特征信息,而反向LSTM捕获了下文的特征信息,这样相对单向LSTM来说能够捕获很多其它的特征信息。所以通常情况下双向LSTM表现比单向LSTM或者单向RNN要好。
图1中输入层之上的那个BLSTM层就是这个第一层双向LSTM层神经网络。
我们能够把神经网络的深度不断拓展,就是在第一层BLSTM基础上。再叠加一层BLSTM,叠加方法就是把每一个输入相应的BLSTM层的输出作为下一层BLSTM神经网络层相应节点的输入,由于两者全然是一一相应的,所以非常好叠加这两层神经网络。假设你觉得有必要,全然能够如此不断叠加更深一层的BLSTM来构造多层深度的BLSTM神经网络。
在最后一层BLSTM神经网络之上。能够使用Mean Pooling机制来融合BLSTM各个节点的结果信息。
所谓Mean Pooling。详细做法就是把BLSTM各个节点的输出结果求等权平均,首先把BLSTM各个输出内容叠加,这是pooling的含义,然后除以输入节点个数。这是mean的含义,Mean Pooling就是这个意思。
怎样从物理意义上来理解Mean Pooling呢?这事实上能够理解为在这一层,两个句子中每一个单词都对终于分类结果进行投票,由于每一个BLSTM的输出能够理解为这个输入单词看到了全部上文和全部下文(包括两个句子)后作出的两者是否语义同样的推断,而通过Mean Pooling层投出自己宝贵的一票。
所以RNN场景下的Mean Pooling能够看作一种深度学习里的“民主党”投票机制。
在Mean Pooling之上,我们还能够套上一层SoftMax层,这样就能够实现终于的分类目的。
通过以上方式,我们就通过输入层、多层BLSTM层、Mean Pooling层和输出层构造出一个通用的推断两个句子语义是否同样的深度学习系统。
事实上这个结构是非常通用的,除了推断两个句子关系,对于单句子分类明显也是能够套用这个结构的。
模型结构已经讲完。后面我们将进入实验部分,由于希望和CNN结果进行效果对照。我们先简单说明下两个同样能够用来解决社区问答问题的CNN结构,这两个结构在之前的“利用卷积神经网络构造社区问答系统”文中都有详细描写叙述,这里不展开讲。不过列出结构图,以方便理解和对照模型。
|两个CNN模型结构
两个CNN模型结构參考图2和图3,图2这样的结构是利用CNN推断多个输入句子关系的简单直接的结构,含义是先各自抽取每一个句子的特征然后比較两者的关系。而图3这样的结构的含义是先把两个句子之间的关系明白表达出来作为输入。然后再套上一个CNN模型来进行分类预測。
图2 CNN模型1
图3 CNN模型2
|实验结果及与两个CNN模型对照
在之前的文章“利用卷积神经网络构造社区问答系统”中我们使用自己构造的实验数据验证了CNN模型2的效果。
之后,我们添加了训练数据的数量,以及加大了负例的难度。事实上在这个社区问答问题中,负例的难度对于实验效果指标影响是比較大的。所谓难度,是指负例中两个句子间语义相关程度究竟有多强,假设负例中两个句子语义相关程度越强,则分类难度越高。
至于模型。我们补充了CNN模型1,在新数据集合下測试了CNN模型2的效果,对于BLSTM来说,则做了双层BLSTM和单层BLSTM的实验。所以能够觉得有四个模型參与效果对照。
经过參数调优,这四个模型在这个新的训练集和測试集下,详细实验结果例如以下:
CNN模型1 分类精度:89.47%
CNN模型2 分类精度:80.08%
双层BLSTM模型 分类精度:84.96%
单层BLSTM模型 分类精度:89.10%
能够看出,在这个问答社区问题里,CNN模型1和单层BLSTM效果接近,而双层BLSTM模型效果有下降。这或许跟实验数据规模不够大有一定关系。所以复杂模型的优势发挥不出来,而CNN模型2则效果相对差些,这或许说明了CNN模型2没有将两个句子的原始信息输入到模型里,而是直接将其关系作为输入,这样的情况下存在信息损失的可能。
致谢:感谢畅捷通智能平台的沈磊、薛会萍、黄通文、桑海岩等同事在模型训练及训练数据的收集整理方面的工作。
扫一扫关注微信号:“布洛卡区” 。深度学习在自然语言处理等智能应用的技术研讨与科普公众号。
使用深度双向LSTM模型构造社区问答系统的更多相关文章
- 利用卷积神经网络(CNN)构造社区问答系统
/* 版权声明:能够随意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 ...
- NLP(十九) 双向LSTM情感分类模型
使用IMDB情绪数据来比较CNN和RNN两种方法,预处理与上节相同 from __future__ import print_function import numpy as np import pa ...
- TensorFlow之RNN:堆叠RNN、LSTM、GRU及双向LSTM
RNN(Recurrent Neural Networks,循环神经网络)是一种具有短期记忆能力的神经网络模型,可以处理任意长度的序列,在自然语言处理中的应用非常广泛,比如机器翻译.文本生成.问答系统 ...
- PaddlePaddle︱开发文档中学习情感分类(CNN、LSTM、双向LSTM)、语义角色标注
PaddlePaddle出教程啦,教程一部分写的很详细,值得学习. 一期涉及新手入门.识别数字.图像分类.词向量.情感分析.语义角色标注.机器翻译.个性化推荐. 二期会有更多的图像内容. 随便,帮国产 ...
- 基于双向LSTM和迁移学习的seq2seq核心实体识别
http://spaces.ac.cn/archives/3942/ 暑假期间做了一下百度和西安交大联合举办的核心实体识别竞赛,最终的结果还不错,遂记录一下.模型的效果不是最好的,但是胜在“端到端”, ...
- TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载
http://blog.csdn.net/scotfield_msn/article/details/60339415 在TensorFlow (RNN)深度学习下 双向LSTM(BiLSTM)+CR ...
- 时间序列深度学习:状态 LSTM 模型预測太阳黑子(一)
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/kMD8d5R/article/details/82111558 作者:徐瑞龙,量化分析师,R语言中文 ...
- 使用Keras进行深度学习:(六)LSTM和双向LSTM讲解及实践
欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 介绍 长短期记忆(Long Short Term Memory, ...
- 深度学习之循环神经网络RNN概述,双向LSTM实现字符识别
深度学习之循环神经网络RNN概述,双向LSTM实现字符识别 2. RNN概述 Recurrent Neural Network - 循环神经网络,最早出现在20世纪80年代,主要是用于时序数据的预测和 ...
随机推荐
- SQL中CRUD C——create 添加数据 R——read 读取数据 U——update 修改数据 D——delete 删除数据
在SQL server中对数据库的操作: 删除表:drop table 表名修改表:alter table 表名 添加列add 列名 列类型alter table 表名 drop column 列名 ...
- java IO流 之 字节输出流 OutputString()
Java学习重点之一:OutputStream 字节输出流的使用 FileOutPutStream:子类,写出数据的通道 步骤: 1.获取目标文件 2.创建通道(如果原来没有目标文件,则会自动创建一个 ...
- js实现浮动框跟随页面滚动,最后停留在原来位置
左边悬浮的二维码会跟随页面向上或者向下滚动,最后停留在原来的位置. <div style="background:red; width:1000px; height:7000px; m ...
- sql Server与ORACLE的语法区别 自用整理!
/*整理背景201403订单中心数据库迁移(整理Oracle与SQL的差异)整理规则第一句为SQL Server 第二句为Oracle*/--数据类型int integervarchar varcha ...
- NX自动出图
小秀一下战果: 1. 自动添加图框2. 自动添加投影视图3. 自动标注外形尺寸4. 根据工艺要求,自动添加公差5. 自动孔表6. 批量打印 欢迎大家积极吐槽哈 [视频演示] http://v.youk ...
- mongo 3.4分片集群系列之四:搭建分片集群--哈希分片 + 安全 + 区域
这个系列大致想跟大家分享以下篇章: 1.mongo 3.4分片集群系列之一:浅谈分片集群 2.mongo 3.4分片集群系列之二:搭建分片集群--哈希分片 3.mongo 3.4分片集群系列之三:搭建 ...
- HTML form without CSRF protection,HTML表单没有CSRF保护
HTML form without CSRF protection =HTML表单没有CSRF保护 CSRF是伪造客户端请求的一种攻击,CSRF的英文全称是Cross Site Request For ...
- 获取WebBrowser全cookie 和 httpWebRequest 异步获取页面数据
获取WebBrowser全cookie [DllImport("wininet.dll", CharSet = CharSet.Auto, SetLastError = true) ...
- 配置redis三主三从
主从环境 centos7.6 redis4.0.1 主 从 192.168.181.139:6379 192.168.181.136:6379 192.168.181.136:6380 192.168 ...
- Python爬虫:抓取手机APP的数据
摘要 大多数APP里面返回的是json格式数据,或者一堆加密过的数据 .这里以超级课程表APP为例,抓取超级课程表里用户发的话题. 1.抓取APP数据包 表单: 表单中包括了用户名和密码,当然都是加密 ...