sentence pair model 总结

这篇博客主要参考了2014 年 李航老师在NIPS会议上的《Convolutional Neural Network Architectures for Matching Natural Language Sentences》论文和2016年清华大学黄民烈老师在ACL会议上的《A Sentence Interaction Network for Modeling Dependence between Sentences》论文。
sentence pair model 是对两句话的相互关系进行建模的一类模型,拥有很广泛的应用场景,比方说自动问答系统、句子翻译等。比如自动问答,一般来说有2种解决思路:1 采用判别模型的思想,根据问题从知识库中找到最相似的问题,然后把问题的答案直接返回;2 采用生成模型的思想,利用encoder-decoder框架直接根据问题生成答案。很显然,Sentence pair model 属于判别模型下的一个应用。
同样针对sentence pair进行建模,常见的思路有以下两种:

1分别处理的思想

sentence pair model 总结_第1张图片
图中的结构是李航老师提出的一种分别处理的方法,从图中我们可以明显看出,其分别采用多层的1-d convolution layers 和1-d max pooling layers的操作把分别对于两句话进行单独的建模,然后将两个句子encode成句向量之后再用多层感知机进行分类,这种方法就很明显没有体现出句子之间的交互操作,会影响模型整体的准确率。其实分别对两个句子进行encode部分的模型李航老师这里这给出了一种方案,其实还有LSTM等其他可以对单一句子进行建模的方法提供选择。

2交互式处理的思想

在交互式处理的思想部分,李航老师和黄民烈老师都提出了各自的模型,只不过李航老师构造的交互式模型是基于CNN的,黄民烈老师构造的模型是基于LSTM的,下面就来分别进行介绍:
sentence pair model 总结_第2张图片

首先要讲解的是李航老师提出的基于CNN的交互式处理思想的模型,就是提取两个句子中的所有位置的组合,利用1d convolution进行卷积,这样就会得到一个二维的矩阵结构,矩阵中每个元素带表了原始句子中两个部分信息交互的结果。接下来采取图像处理类似的方法,即通过一系列的2d nvolution 和pooling最后把两个句子一起卷成一个向量,最终结果的预测也是基于这个向量的。由于在卷积的过程中充分的考虑了两个句子之间的交互性,因此较第一种方法更完备的考虑了句子之间的所有交互属性,故该方法的效果更好。

sentence pair model 总结_第3张图片
上图是黄民烈老师提出的基于LSTM的交互式处理模型,他提出模型的核心思想是“The main idea behind this model is that each word in one sentence may potentially influence every word in another sentence in some degree ”。图中的模型可能看上去比较复杂,其实该模型一共包含了两个LSTM(LSTM1和LSTM2)。首先使用LSTM1分别单独对两个句子s1和s2进行处理,并把它们的中间状态保存下来,我们假设在句子s1中的第t个状态称之为 z1t ,在句子s2中的第 τ 个状态称之为 z2τ 。根据我们的之前提到的核心思想,s1中的第t个词可能受到s2中所有词语的影响,反之亦然。对于这种影响力我们借鉴了LSTM中的门结构进行建模,公式如下:
1 Ctτ=tanh(Wc.[z1t,z2τ]+bc) // 这是两个单词之间的影响力
2 itτ=σ(Wi.[z1t,z2τ]+bi) // 这相当与一个门,控制一式中的影响力强度
那么对于s1句子中的一个单词,它受到所有s2中词语的影响力就如下公式所示:
ct=|s2|τ=1ctτitτ
这个 ct 就是句子s1中单词t受到s2句子中所有词语的影响力之和,根据同样的原理可以计算出s1中所有单词收到s2句子词语的影响力,这时再利用LSTM2对这种包含了交互关系的信息进行建模,LSTM2的公式如下:
ft=σ(Wf.[xt,ht1,kt,ct1]+bf)
it=σ(Wi.[xt,ht1,kt,ct1]+bi)
ot=σ(Wo.[xt,ht1,kt,ct1]+bo)
gt=tanh(Wg.[xt,ht1,kt]+bk)
kt=ftkt1+itgt
ht=ottanh(kt)
从中可以看出,LSTM2和传统的LSTM稍有不同,几个门函数的取值还考虑了来自s2句子所有词语的影响。按照这样的方式生成的向量表征了融入s2交互信息的s1句子。按照对称的方式可以对s2句子采取类似的处理方法,计算来自s1句子的影响。最后生成的两个向量进行拼接,就可以作为两个句子交互的表征。
另外,文章中最后特别提到了,可以先对整个句子采用CNN进行处理,然后再通过这种交互的方式进行计算。这样产生交互的对象就不再是单词之间了,而是不同句子的词组之间,这样的方式更加的科学准确。

你可能感兴趣的:(深度学习,机器学习)