机器阅读理解系列文章-QANet(Combining Local Convolution with Global Self-Attention for Reading Comprehension)

背景

论文题目:《QANet: Combining Local Convolution with Global Self-Attention for Reading Comprehension》

区别于目前大多数包含注意力机制(attention model)和循环神经网络(RNN)的阅读理解模型,QANet 的嵌入编码器和模型编码器摒弃了 RNN 的复杂递归结构,仅仅使用卷积(convolution)和自注意力机制(self-attention)构建了一个神经网络,使得模型的训练和预测的速度大大加快,并且可以并行处理输入的单词。

卷积操作可以对局部相互作用建模(捕获文本的局部结构),而使用自注意力机制则可以对全局交互进行建模(学习每对单词之间的相互作用),context-query attention则可以构建query-aware context vector。另外,本文还提出一种数据增强方案,通过翻译模型将原文从英文翻译为其他语言,再翻译回英文,如此不仅增加了训练实例的数量,而且使语法更加多样化。

模型

模型架构图:
在这里插入图片描述

(1) 输入嵌入层:
每个词的嵌入层由word embeddingcharacter embedding组成。word embedding来自于预训练的300维Glove, p 1 = 300 p_1=300 p1=300。其中OOV词用<UNK>表示,对应的embedding是随机初始化的。每个word可以视其所组成的character的character embedding的拼接结果,本文选用的character embedding维度 p 2 = 200 p_2=200 p2=200。每个word长度为16个字符,不足则进行padding,过长则丢弃。由此可知,每个word的character embedding是一个矩阵,我们选择每一行的最大值作为该word的character embedding结果。(所以,行方向的尺寸是200,列方向是character,其尺寸为16,如此选择出每个word中最重要的character)。
给定词 x x x,则其该层的最终表征结果为 [ x w ; x c ] ∈ R p 1 + p 2 [x_w;x_c] \in R^{p_1+p_2} [xw;xc]Rp1+p2,其中 x w x_w xw x c x_c xc分别是word embeddingcharacter embedding结果。之后再通过一个双层的highway network,为了简单起见,这里采用 x x x表示该层的输出结果。

(2)Embedding Encoder层:
encoder层由以下基本block组成:[convolution-layer # + self-attention-layer + feed-forward-layer]。这对应于图1在的右上角。对于卷积层,这里我们不是采用传统的卷积,而使用内存更高效且泛化能力更强的depthwise separable convolutions。选用的kernel size=7,filter数量d=128,一个block中的卷积层数=4。对于self-attention-layer,我们采用的是多头attention机制。head数量=8,这个在所有层中都保持一样。其中每个子层都有残差连接,即输出为 f ( l a y e r n o r m ( x ) ) + x f(layernorm(x))+x f(layernorm(x))+x l a y e r n o r m layernorm layernorm为(Ba et al., 2016)提出的layer-normalization。本文设置的encode block的数量为1。所以,对于每个word其输入向量的维度是 p 1 + p 2 = 500 p_1+p_2=500 p1+p2=500,对应的输出向量维度是128(即为filter的数量)。

(3)Context-Query Attention层:
contex和query分别用 C C C Q Q Q表示,context-to-query attention计算如下:先计算每个contex word和 query word之间的相似度,得到一个相似度矩阵 S ∈ R n × m S \in R^{n \times m} SRn×m;再对 S S S在行方向上用softmax进行归一化,得到 S ‾ \overline S S;再通过 A = S ‾ ⋅ Q T ∈ R n × d A=\overline{S} \cdot Q^T \in R^{n \times d} A=SQTRn×d计算得到context-to-query attention。相似度函数采用的是三线性函数(trilinear function):
f ( q , c ) = W 0 [ q , c , q ⊙ c ] f(q,c)=W_0[q,c,q \odot c] f(q,c)=W0[q,c,qc]
其中 ⊙ \odot 是element-wise multiplication,元素积; W 0 W_0 W0是待学习的参数。

此外,多数的高性能模型(如BiDAF和DCN)都会采用query-to-context attention。本文也采用该策略,具体如下:通过softmax计算 S S S的列归一化矩阵 S ‾ ‾ \overline{\overline{S}} S,最终得到query-to-context attention, B = S ‾ ⋅ S ‾ ‾ ⋅ C T B=\overline{S} \cdot \overline{\overline{S}} \cdot C^T B=SSCT

(4)model encoder层:
该层在每个位置的输入为KaTeX parse error: Unexpected character: ' ' at position 16: [c, a, c \odot ̲a, c \odot b],其中 a , b a,b a,b分别是attention 矩阵A和B的行向量。该层有7个Encoder-Block,每个Encoder-Block:2个卷积层、1个Self-Attention、1个FFN。其它参数和Embedding Encoder一样。之后将3个Model-Encoder堆叠起来,3个Model-Encoder之间共享所有参数。输出依次为 M 0 , M 1 , M 2 M_0,M_1,M_2 M0,M1,M2

(5)输出层:
这一层是和特定任务相关的。对于SQuAD1.1数据集是输出各个位置作为开始和结束位置的概率:
p 1 = s o f t m a x ( W 1 [ M 0 ; M 1 ] ) p^1 = \rm{softmax}(W_1[M_0; M_1]) p1=softmax(W1[M0;M1])
p 2 = s o f t m a x ( W 1 [ M 0 ; M 2 ] ) p^2 = \rm{softmax}(W_1[M_0; M_2]) p2=softmax(W1[M0;M2])
其中 W 1 和 W 2 W_1和W_2 W1W2是待学习的参数。span的得分是其开启和结束位置的概率乘积。最终的目标函数如下:
L ( θ ) = − 1 N ∑ i N [ log ⁡ ( p y i 1 1 ) + log ⁡ ( p y i 2 2 ) ] L(\theta) = -\frac{1}{N} \sum_{i}^N [\log(p^1_{y_i^1}) + \log(p^2_{y_i^2})] L(θ)=N1iN[log(pyi11)+log(pyi22)]
其中 y i 1 y^1_i yi1 y i 2 y^2_i yi2分别表示样本 i i i的真实起始位置和终点位置。

预测:
预测 s p a n ( s , e ) span(s,e) span(s,e)的时候选取 p i s p e 2 p^s_ip^2_e pispe2得分最高的结果(其中 s &lt; = e s&lt;=e s<=e)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值