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

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. 7. 配置undo表空间

    7. 配置undo表空间 undo日志可以存储在一个或多个undo表空间中,无需存储在系统表空间中. 要为MySQL实例配置单独的undo表空间,请执行以下步骤 [重要]: 只能在初始化新MySQL实 ...

  2. 二手GTX650

    某鱼入手一二手华硕显卡GTX650 店主信誉挺高的,到手图片 我K,被骗了翻新的假显卡,华硕没有过这个样式的GTX650啊,还是新的散热风扇及前挡板,不管了先把风扇拆了,竟然连风扇散热硅脂都是刚刚涂上 ...

  3. maven构建springmvc项目

    1.Eclipse中 NEW ->OTHER->Maven->maven project 2.选择项目路径 3.选择项目类型->next->输入groupid和artif ...

  4. C语言学习9

    婚礼的谎言 三对情侣参加婚礼,三个新郎为A.B.C,三个新娘为X.Y.Z.有人想知道究竟水域谁结婚2,于是就问新人中的三位,得到结果如下:A说他将和X结婚:X说她的未婚夫是C:C说他将和Z结婚.这人事 ...

  5. 一个关于vue+mysql+express的全栈项目(五)------ 实时聊天部分socket.io

    一.基于web端的实时通讯,我们都知道有websocket,为了快速开发,本项目我们采用socket.io(客户端使用socket.io-client) Socket.io是一个WebSocket库, ...

  6. POJ 3522 Slim Span (Kruskal枚举最小边)

    题意: 求出最小生成树中最大边与最小边差距的最小值. 分析: 排序,枚举最小边, 用最小边构造最小生成树, 没法构造了就退出 #include <stdio.h> #include < ...

  7. Backspace doesn't delete inner html tags of a contenteditable DIV in Firefox

    https://bugzilla.mozilla.org/show_bug.cgi?id=439808 backspace键 在ff下不能使用  div contenteditable=true时

  8. 大数据学习——yum练习安装mysql

    1. 安装mysql 服务器端: yum install mysql-server yum install mysql-devel 2. 安装mysql客户端: yum install mysql 3 ...

  9. 【ZJOI2017 Round1练习】D2T3 counter(线段树)

    题意: 思路: 预处理出b[i]代表i位置之前比a[i]小的数的个数 以每个数为结尾的组数是线段树中(1,a[i]-1) 对于a[i]换到最后,相当于线段树中(a[i]+1,n)-- 交换后b[i]又 ...

  10. 【BZOJ3939】Cow Hopscotch(动态开点线段树)

    题意: 就像人类喜欢跳格子游戏一样,FJ的奶牛们发明了一种新的跳格子游戏.虽然这种接近一吨的笨拙的动物玩跳格子游戏几乎总是不愉快地结束,但是这并没有阻止奶牛们在每天下午参加跳格子游戏  游戏在一个R* ...