/* 版权声明:能够随意转载,转载时请标明文章原始出处和作者信息 .*/

author: 张俊林

除了序列标注问题外,句子对匹配(Sentence Pair Matching)问题也是NLP中非经常见的一类问题。所谓“句子对匹配”,就是说给定两个句子S1和S2。任务目标是推断这两个句子是否具备某种类型的关系。

假设形式化地对这个问题定义,能够理解例如以下:

意思是给定两个句子,须要学习一个映射函数。输入是两个句子对,经过映射函数变换,输出是任务分类标签集合中的某类标签。既然我们要讨论深度学习,那么这个映射函数F就是通过神经网络来进行映射的,而标签集合里的分类标签详细代表的含义跟任务相关。

典型的样例就是Paraphrase任务。即要推断两个句子是否语义等价。所以它的分类标签集合就是个{等价。不等价}的二值集合。除此外。还有非常多其他类型的任务都属于句子对匹配。比方问答系统。就是推断两个句子是否一个是问题一个是答案的关系。此类任务还有非常多,关键是看你怎么理解一个任务的目标。

今天我们主要讲讲假设利用RNN来构造这个映射函数F,那么神经网络的结构应该怎样设计?尽管标题说是“常见”,可是事实上讲这方面的文献非常之少。我把使用RNN解决句子对匹配的神经网络结构抽象成三类情况。这三类也是相对easy想到的结构。

当然,这里要注意,尽管我们这里说的是RNN。可是它代表了LSTM、GRU、多层深度网络等各种变体形式,为行文方便,在此统一用RNN来指代。

|RNN网络结构一

图1.  RNN网络结构一

图1展示了一个最easy想到的RNN网络,对于两个句子,分别套上一个RNN或者深层LSTM亦或双向深层LSTM等。每一个RNN的目的是抽取出这个句子的特征。然后将两个句子抽取出的特征拼接成更上层的MLP多层神经网络的输入层。经过MLP的隐层使得两个句子发生非线性映射关系,最后再通过SoftMax分类层给出最后的分类结果。

这样就通过两个RNN实现了对两个句子是否具备某种关系作出分类推断的决策,使用训练数据能够获得网络參数,之后就能够将这个神经网络用来对现实任务进行分类的工作。

|RNN网络结构二

图2  RNN网络结构二

图2展示了结构二的通用架构。就是把两个句子S和T拼接起来。中间用一个特殊分隔符EOS切割,这里EOS不代表一个句子的结束。而是代表两个句子的分隔符号。如此就构造出了RNN的输入层。之后能够套上双向以及深层网络结构,在最高一层RNN层的输出之上,套上一个Mean Pooling层。所谓Mean Pooling,详细做法就是把BLSTM各个节点的输出结果求等权平均。首先把BLSTM各个输出内容叠加,这是pooling的含义,然后除以输入节点个数,这是mean的含义,Mean Pooling就是这个意思。

怎样从物理意义上来理解Mean Pooling呢?这事实上能够理解为在这一层,两个句子中每一个单词都对终于分类结果进行投票。由于每一个BLSTM的输出能够理解为这个输入单词看到了全部上文和全部下文(包括两个句子)后作出的两者分类结果的推断,而通过Mean Pooling层投出自己宝贵的一票。

在Mean Pooling之上。我们还能够套上一层SoftMax层,这样就能够实现终于的分类目的。

通过以上方式。我们就通过输入层、多层BLSTM层、Mean Pooling层和输出层构造出一个通用的推断两个句子语义是否具备某种语义关系的RNN深度学习系统。

与网络结构一相比。最大的不同在于:网络结构一的两个RNN之间没有建立不论什么直接的联系,不管层级有多深。RNN在此仅仅是起到了提取各自句子特征的目的,而两个句子发生关系是在MLP神经网络结构里体现出的,也就是说网络结构一是在两个句子的总体特征之间建立起联系的。而网络结构二则在RNN层两个句子之间的单词之间就已经建立起了相互的关系。所以假设粗略地分析,感觉结构二应该能够捕获到的信息要多于结构一的那种架构所能捕获到的信息,当然,这个仅仅是直观感觉。

|RNN网络结构三

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

图3 RNN网络结构三

图3展示了第三种RNN网络结构。

在输入层和RNN层结构与网络结构二是同样的,意思是在RNN层就使得两个句子之间单词发生相关关系,与网络结构二不同的在于分类层,不像网络结构二一样套上一个Mean Pooling层接收每一个单词的分类推断,而是在拼接后的最高层处BLSTM最后一个节点隐层之上(图3可能有些不准确。要注意这里是节点的隐层状态而非终于输出值)套上一个SoftMax分类层,由于这里最后一个节点的隐层神经元状态理论上把两个句子各自的语义表示以及两者之间的关系都编码在当中了。然后直接在这些信息基础上进行分类。

当然,假设是採用双向结构BiRNN或者BLSTM,能够将首节点和尾节点的隐层状态一起拼接来作为最后分类的基础中间值,由于对于双向结构来说,头节点也隐含了逆向的两者关系编码,其图结构例如以下所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

图4 RNN网络结构三之双向结构

上面介绍了抽象出的三种典型RNN解决句子对匹配问题的网络结构,至于说这三个结构哪个会更好。或者还是三者差点儿相同。事实上这里面是有文章可作的,比方你能够用若干个分类任务,分别採取三个架构,測试并分析相应的效果,得出哪个结构更好的结论,事实上是具有非常大的发表价值的,有兴趣的同学能够试试看。

另外,非常明显。你细致一想,事实上是能够想出非常多新型RNN网络结构的。并且非常可能眼下还没有文献提到过。这里不细谈了,以后有机会我会把我眼下能想到的几个变体分享出来。

扫一扫关注微信号:“布洛卡区” 。深度学习在自然语言处理等智能应用的技术研讨与科普公众号。

使用RNN解决句子对匹配问题的常见网络结构的更多相关文章

  1. 转:使用RNN解决NLP中序列标注问题的通用优化思路

    http://blog.csdn.net/malefactor/article/details/50725480 /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author ...

  2. 解决webpack不能匹配post请求的问题

    解决webpack不能匹配post请求的问题 webpack的dev-server只能匹配get请求,在本地做本地数据的时候会很不方便. 可以使用如下两种办法解决: 1.在webpack.config ...

  3. ES中文分词器之精确短语匹配(解决了match_phrase匹配不全的问题)

    分词器选择 调研了几种分词器,例如IK分词器,ansj分词器,mmseg分词器,发现IK的分词效果最好.举个例子: 词:<<是的>><span>哈<\span ...

  4. hdu2255 奔小康赚大钱 km算法解决最优匹配(最大权完美匹配)

    /** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) ...

  5. 【js数据结构】栈解决括号不匹配问题

    栈可以用来判断一个算术表达式中的括号是否匹配. 思路:读取算术表达式,遇到左括号'{'.'['.'('压入栈,栈的特点是后入先出,所以当遇到右括号'}'.']'.')'的时候,取出栈顶元素,是否满足读 ...

  6. Python读取JSON数据,并解决字符集不匹配问题

    今天来谈一谈Python解析JSON数据,并写入到本地文件的一个小例子. – 思路如下 从一个返回JSON天气数据的网站获取到目标JSON数据串 使用Python解析出需要的部分 写入到本地文件,供其 ...

  7. Druid Spring Boot Starter 从配置到简单运行 -解决zone不匹配 -解决dataSource加载失败

    Druid Spring Boot Starter 中文 | English Druid Spring Boot Starter 用于帮助你在Spring Boot项目中轻松集成Druid数据库连接池 ...

  8. 《Convolutional Neural Network Architectures for Matching Natural Language Sentences》句子匹配

    模型结构与原理 1. 基于CNN的句子建模 这篇论文主要针对的是句子匹配(Sentence Matching)的问题,但是基础问题仍然是句子建模.首先,文中提出了一种基于CNN的句子建模网络,如下图: ...

  9. solr 通过【配置、多值字段、动态字段】来解决文本表达式查询精确到句子的问题

    一.Solr Multivalue field属性positionIncrementGap理解 分类:Lucene 2014-01-22 10:39阅读(3596)评论(0) 参考:http://ro ...

随机推荐

  1. delphi并行压缩

    real case test MM parallel 4x scalable (i7 6700)(on the newer processors will be linear) I did a sma ...

  2. 框架—Mybatis入门

    1:Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的一个数据持久层的框架. MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果. ...

  3. vue 中scroll事件不触发问题

    在vue项目中需要监听滚动条滚动的位置,结果写了scroll监听事件就是不生效,最后查资料发现是页面有样式设置了over-flow:scroll,去掉之后完美解决.(页面样式中存在over-flow: ...

  4. CentOS7安装Tomcat9并配置

    划重点:安装tomcat之前必须先安装jdk  安装教程 1.下载 Tomcat 9 CentOS 7 下创建目录并下载文件:// 链接已更新 cd /usr/local/ mkdir tomcat ...

  5. 【BZOJ 1588】[HNOI2002] 营业额统计(Treap)

    Description 营业额统计 Tiger最近被公司升任为营业部经理,他上任后接受公司交给的第一项任务便是统计并分析公司成立以来的营业情况. Tiger拿出了公司的账本,账本上记录了公司成立以来每 ...

  6. windows操作笔记

    使用服务或其他windows应用的过程中,可能会遇到莫名其妙的错误,这时候从控制面板中,找到管理工具,打开事件查看器,或者通过计算机管理,找到日志中的记录,如果是代码错误,会给出提示信息,比如之前在写 ...

  7. 【转】如何在命令行脚本中启动带参数的Windows服务

    我们有一个自己编写的Windows服务,我们希望该服务在启动时可以根据用户输入的参数实现不同的功能. 要实现这样的需求并不是很难,下面这个例子我用来示范如何编写该服务 using System; us ...

  8. 大数据学习——hdfs客户端流式操作代码的实现

    package cn.itcast.bigdata.hdfs.diceng; import org.apache.hadoop.conf.Configuration; import org.apach ...

  9. java数据结构简单点

    java常用的数据结构一 集合框架主要就是Collection和Map: 1.Collection包含了List和Set两大分支. (1)List是一个有序的集合,每一个元素都有它的索引.第一个元素的 ...

  10. 【Ajax 1】Ajax与传统Web开发的区别

    导读:从用户体验度的角度来说,利用Ajax进行开发的网站,其体验度高于利用传统Web开发技术,那么,是什么因素导致了这一现象呢?难道说Ajax开发,就一定优于传统Web技术吗?本篇文章,将主要介绍Aj ...