文本匹配_文本匹配函数小结(1)

a3926831c5520ddb632e0f7010e278cf.png

写在前面

本文是对一些文本匹配的核心函数做一个梳理(正好前段时间一直在搞检索问答相关的实验,核心之一在于如何构建匹配函数得到二维匹配矩阵),内容包含Attention Pooling模型、Decomposable Attention模型、SUBMULT+NN模型、BiMPM模型、ESIM模型。这些函数有的仅仅用于问答,有的用于自然语言推理(NLI),发展还是很有规律的。另外,本文只涉及模型的结构做法,实验可以参考原文~

Attention Pooling

处理的任务是:给定问题

然后从候选的答案集
中选择正确的答案。任务很简单,原文是15年的工作16年的论文,列在此是因为一则该模型牵扯到了
的相似度计算---双线性相似度---区别于原来的余弦相似度;二则是因为其使用的注意力池化操作简洁并且有效。以前模型的结构如QA-CNN或者QA-biLSTM:

56ad2ad88f49fc297993f9f65a7707c8.png

典型的双塔模型(Siamese Model),

匹配分数是抽象表征经过池化之后计算的(当然这种方法目前是不可取的)。对于其简单的按列最大池化来说,原文提出的
Attentive Pooling是一种使池化层能够感知当前输入对的方法。通过这种方式,来自问题
的信息可以直接影响Attentive Pooling网络对答案表示
的计算,所谓的直接影响就是使用attention机制实现的。注意观察上图中输入对的匹配分数是使用简单的余弦相似度,而AP网络则使用了双线性相似度计算方式(这个计算方式比较重要,在阅读理解领域中使用较多)。计算公式为:


其中矩阵
是投影矩阵,它背后的原理大致是--
词空间的分布和
词空间的分布不一致,为了弥补这个不一致将两者投影到另一个空间中。
这样
中包含了问题和答案每一个词的软对齐得分。接着对于软对齐得分矩阵或者说匹配矩阵
进行行最大或者列最大池化,计算为:


然后对得到的最大化池化结果自身做一个softmax:


对于
也一样得到
,最后问题
和 答案
的表征为:


最终的匹配分数就是两个Attentive Pooling后的表征的余弦相似度。

本工作首先可以借鉴的是:

(1)使用双线性计算相似度
(2)使用得分矩阵
通过Attentive Pooling交互问题和答案的表征(需要注意的是这是一个双向注意力,而且有一定 compare aggregate思想的影子--这个是目前文本匹配较为流行的)

Decomposable Attention

Decomposable Attention模型是用于自然语言推断的一个简单的神经网络。所谓的自然与然推断就是--确定前提(premise)与假设(hypothesis)之间是蕴涵关系或矛盾关系的问题。如下图例子:

05595389c5b58697f7bf7a3ebfd30475.png

可以很容易推断出第二句“Bob is awake”是紧跟着第一句,但是三句与第一句是矛盾的。

尽管此模型的提出不在于选择问答的范畴,但是在选择问答尤其是句子(语义)匹配的问题上非常有借鉴意义。原文亮点:(1)在subphase(可以理解为基于词层面的表示,之前的Siamese网络都是基于句子层面的)上进行推断,这样更能够充分利用到句子的元素信息,信息的粒度更加细致。(2)率先使用了比较聚合(Compare-Aggregate)范式,这个范式很重要,很多交互式问答都使用了这个范式,如多轮检索式对话等。Compare-Aggregate的做法大致分为三步--(1)Attend;(2)Compare;(3)Aggregate。另外需要注意的是亮点(1)我们经常操作匹配等都是在经过GRU或者CNN之后的上下文编码,但是原文只是用的是词嵌入以及增强的词嵌入(加入了Intra-Sentence Attention算法),原文模型可以看成一个纯前馈网络,是一种rnn/cnn-free的模型,他能干过基于CNN或者RNN模型在于其很多精细化的设计,尽管现在看来很多已经过时,但是方法还是值得借鉴与分析的,这个很重要。

Attend

所谓的attend,就是一个句子或者文案通过对齐矩阵(或者匹配矩阵或者注意力矩阵)去表示另一个句子或者文档的意思,如question attend to answer就是使用answer来表示question。如输入的两个文本

,其中
是指的是增强词嵌入(该算法后文会提到)。两个输入文本计算对齐矩阵:


是一个带RELU的前馈网络。接着计算a attend to b 和 b attend to a:


也就是按行softmax或者按列softmax来计算然后加和表征。

Compare

上一步得到了对齐部分然后与原来的表征拼接得到

。接着执行比较函数
--它是一个带RELU的前馈网络。计算公式如下:

Aggregate

对于上一步得到的两个比较向量

,下一步执行聚合操作,原文采用的很简单:

最后分类的结果就是简单的线性层

,分类计算为:

Intra-Sentence Attention增强词嵌入算法

上文提到了原文通过很精细化的设计让其可以CNN/RNN-free进而大幅度并行以及减少参数量,但是词嵌入不管是预训练的还是没有预训练的,他们都没有一个上下文联系,如果没有RNN或者CNN来编码上下文(不管是长期的还是局部的),模型的性能不一定比较强壮。在此原文提出一种增强词嵌入的方法,让原始词嵌入可以有一个全局信息的感知(其实很像self-attention,但是应该是有缺陷的)。对于输入序列

,先计算自匹配(self-matching):

是一个前馈函数,然后句内注意增强词嵌入计算方式为:


其中
是偏执,原文中提到每10个共享权重。这种方法很是启发,像后面机器阅读理解中的r-net以及多轮检索式对话中的DUA都用到这种思想。

本工作首先可以借鉴的是:

(1)Compare-Aggregate用于匹配的范式;
(2)双向注意力的使用;
(3)词嵌入增强算法---基于Intra-Sentence Attention
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值