当前位置:   article > 正文

使用RNN解决句子对匹配问题的常见网络结构_两个句子语法匹配

两个句子语法匹配
/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/

                                                     author: 张俊林


除了序列标注问题外,句子对匹配(Sentence Pair Matching)问题也是NLP中非常常见的一类问题,所谓“句子对匹配”,就是说给定两个句子S1S2,任务目标是判断这两个句子是否具备某种类型的关系。如果形式化地对这个问题定义,可以理解如下:


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


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


今天我们主要讲讲如果利用RNN来构造这个映射函数F,那么神经网络的结构应该如何设计?虽然标题说是“常见”,但是其实讲这方面的文献非常之少。我把使用RNN解决句子对匹配的神经网络结构抽象成三类情况,这三类也是相对容易想到的结构。当然,这里要注意,虽然我们这里说的是RNN,但是它代表了LSTMGRU、多层深度网络等各种变体形式,为行文方便,在此统一用RNN来指代。


|RNN网络结构一

                                                                               1.  RNN网络结构一



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


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


|RNN网络结构二


2  RNN网络结构二



2展示了结构二的通用架构。就是把两个句子ST拼接起来,中间用一个特殊分隔符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网络结构三

  3 RNN网络结构三


3展示了第三种RNN网络结构。在输入层和RNN层结构与网络结构二是相同的,意思是在RNN层就使得两个句子之间单词发生相关关系,与网络结构二不同的在于分类层,不像网络结构二一样套上一个Mean Pooling层接收每个单词的分类判断,而是在拼接后的最高层处BLSTM最后一个节点隐层之上(图3可能有些不准确,要注意这里是节点的隐层状态而非最终输出值)套上一个SoftMax分类层,因为这里最后一个节点的隐层神经元状态理论上把两个句子各自的语义表示以及两者之间的关系都编码在其中了,然后直接在这些信息基础上进行分类。当然,如果是采用双向结构BiRNN或者BLSTM,可以将首节点和尾节点的隐层状态一起拼接来作为最后分类的基础中间值,因为对于双向结构来说,头节点也隐含了逆向的两者关系编码,其图结构如下所示:


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



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


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


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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/368980
推荐阅读
相关标签
  

闽ICP备14008679号