使用RNN解决句子对匹配问题的常见网络结构

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

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" />

图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" />

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

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

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

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

时间: 2024-11-10 11:13:12

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

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

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 序列标注问题应该说是自然语言处理中最常见的问题,而且很可能是最而没有之一.在深度学习没有广泛渗透到各个应用领域之前,传统的最常用的解决序列标注问题的方案是最大熵.CRF等模型,尤其是CRF,基本是最主流的方法.随着深度学习的不断探索和发展,很可能RNN模型会取代CRF的传统霸主地位,会成为解决序列标注问题的标配解决方案. 本文主要抽象出利用RNN解决序列标注问题的通用优化思路.这个RNN优化思路应该

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

http://blog.csdn.net/malefactor/article/details/50725480 /* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 序列标注问题应该说是自然语言处理中最常见的问题,而且很可能是最而没有之一.在深度学习没有广泛渗透到各个应用领域之前,传统的最常用的解决序列标注问题的方案是最大熵.CRF等模型,尤其是CRF,基本是最主流的方法.随着深度学习的不断探索和发展,很可能RNN模型会取代CRF的传统霸主地位,会成

原创:Siamese LSTM解决句子相似度(理论篇)

nlp中语义理解一直是业内的难题.汉语不同于英语,同样一个意思,可以有很多种说法,比如你是谁的问题,就可以有如下几种:①你是谁?②你叫什么名字?③您贵姓?④介绍一下你自己 等等.这些句子在语义上是十分接近的,如果做一个智能音响,对音响说出上述任何一句,其结果不应该因为句子形式的不同而不同,也就是说训练出的模型不能对同义语句太敏感.在神经概率语言模型产生之前,解决这个问题(或者nlp领域里比较流行的特征抽取),基本上都是依赖比较传统的TF-IDF算法来构造出一个句子的向量,然后计算向量的相似度.这

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

/** 题目:hdu2255 奔小康赚大钱 km算法 链接:http://acm.hdu.edu.cn/showproblem.php?pid=2255 题意:lv 思路:最优匹配(最大权完美匹配) km算法 模板来自:http://www.cnblogs.com/wenruo/p/5264235.html 如果是求最小权完美匹配,那么将所有权值取相反数,然后求得最大权,输出最大权的相反数即可. */ #include <iostream> #include <cstring> #

hibernate.cxf.xml 配置文件 解决 内容必须匹配 &quot;(property*,mapping*,(class-cache|collection-cache)*,event*,listener*)&quot;

这两天想看看hibernate的东西,就跟着官网教程自己做,被官网网页上的配置文件给坑了. 有两个注意的地方,如果是按照官网的筒子们注意啦,一个是hibernate的头xsd验证文件,不修改成dtd读取hibernate.cxf.xml会 抛出Could not parse configuration: /hibernate.cfg.xml或者org.hibernate.MappingException: invalid configuration异常的哦. 1 <hibernate-confi

使用深度RNN模型构建语义搜索引擎

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 本文讨论如何用深度学习系统来构造语义搜索引擎的问题.这里所谓的语义搜索,是指的能做用户查询和搜索网页之间的语义级别匹配,比如说,用户输入"Iphone",虽然某篇文章讲到了"苹果公司正在试图做新型的手机",但是没有明确说iphone的字样,那么即使如此也能够将这篇文章找出来.传统的搜索引擎对于这种情况是无能为力的,因为它们基本上还是基于字面匹配作为排序的基础的,没有任何

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

一.Solr Multivalue field属性positionIncrementGap理解 分类:Lucene 2014-01-22 10:39阅读(3596)评论(0) 参考:http://rockiee281.blog.163.com/blog/static/19385222920127225619919/ Solr里头可以设计Field为Multivalue类型,这样的一个好处是可以很方便的设置copyField,在我们的项目中也有使用. 但是一直以来都有一个问题困扰着我,就是对mul

oracle Union 中 ORA-12704:字符集不匹配问题的解决 .

在使用Union all连接时,若A集合中某列为nvarchar2或nvarchar类型,而B集合中无此列,用‘ ’ 来代替是会报字符集不匹配,解决方法有两种,见下面的示例 例: select '中国','China',cast('中国' as nvarchar2(10)) T from dual union all select '美国','USA','' from dual; select '中国','China',cast('中国' as nvarchar2(10)) T from dua

中文句子相似度之計算與應用

原文:http://www.aclweb.org/anthology/O05-1008 中文句子相似度之计算与应用 郑守益 梁婷国立交通大学信息科学系 摘要 近年來受惠于国内外各项语料库资源的建置及网际网路上的大量中文语料,使计算机语文辅助教材的涵盖层面日趋广泛.因此如何产生大量且具高质量之辅助教材日益受到许多自然语言处理研究者的重视.有鉴于此,本論文提出以中文句子相似度为基础的研究与应用.相似度的计算乃考虑句子的组合及聚合性.我们实作此一应用,并提出解决未知词的语意计算问题的方法.实验结果显示