机器阅读理解系列文章-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 embedding
和character embedding
组成。word embedding
来自于预训练的300维Glove,。其中OOV词用<UNK>
表示,对应的embedding
是随机初始化的。每个word可以视其所组成的character的character embedding
的拼接结果,本文选用的character embedding
维度。每个word长度为16个字符,不足则进行padding,过长则丢弃。由此可知,每个word的character embedding
是一个矩阵,我们选择每一行的最大值作为该word的character embedding
结果。(所以,行方向的尺寸是200,列方向是character,其尺寸为16,如此选择出每个word中最重要的character)。
给定词,则其该层的最终表征结果为,其中和分别是word embedding
和character embedding
结果。之后再通过一个双层的highway network
,为了简单起见,这里采用表示该层的输出结果。
(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,这个在所有层中都保持一样。其中每个子层都有残差连接,即输出为,为(Ba et al., 2016)提出的layer-normalization
。本文设置的encode block的数量为1。所以,对于每个word其输入向量的维度是,对应的输出向量维度是128(即为filter的数量)。
(3)Context-Query Attention层:
contex和query分别用和表示,context-to-query attention
计算如下:先计算每个contex word和 query word之间的相似度,得到一个相似度矩阵;再对在行方向上用softmax进行归一化,得到;再通过计算得到context-to-query attention。相似度函数采用的是三线性函数(trilinear function):
其中是element-wise multiplication,元素积;是待学习的参数。
此外,多数的高性能模型(如BiDAF和DCN)都会采用query-to-context attention
。本文也采用该策略,具体如下:通过softmax计算的列归一化矩阵,最终得到query-to-context attention,
(4)model encoder层:
该层在每个位置的输入为KaTeX parse error: Unexpected character: '' at position 16: [c, a, c \odot ̲a, c \odot b],其中分别是attention 矩阵A和B的行向量。该层有7个Encoder-Block,每个Encoder-Block:2个卷积层、1个Self-Attention、1个FFN。其它参数和Embedding Encoder一样。之后将3个Model-Encoder堆叠起来,3个Model-Encoder之间共享所有参数。输出依次为。
(5)输出层:
这一层是和特定任务相关的。对于SQuAD1.1数据集是输出各个位置作为开始和结束位置的概率:
其中是待学习的参数。span的得分是其开启和结束位置的概率乘积。最终的目标函数如下:
其中和分别表示样本的真实起始位置和终点位置。
预测:
预测的时候选取得分最高的结果(其中)。