/* 版权声明:能够随意转载,转载时请标明文章原始出处和作者信息 .*/
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网络结构的。并且非常可能眼下还没有文献提到过。这里不细谈了,以后有机会我会把我眼下能想到的几个变体分享出来。
扫一扫关注微信号:“布洛卡区” 。深度学习在自然语言处理等智能应用的技术研讨与科普公众号。