机器阅读理解(machine comprehension)

本篇博客主要参考了2017年的在ICLR会议上发表的论文《BI-DIRECTIONAL ATTENTION FLOW FOR MACHINE COMPREHENSION》。

所谓机器阅读理解任务,指的就是给一段context描述,然后对应的给一个query,然后机器通过阅读context后,给出对应query的答案。这里做了一个假设,就是query的答案必须是能够在context原文中找到的一段话(也可以理解为连续的几个单词),也就是说最终模型预测的目标是输出两个下标,分别对应于query回答在context的开始位置和结束位置。最后模型的损失函数为多分类的交叉熵softmax(因为从本质上来讲该问题等效为一个多分类问题,问题的类别数等于context中单词的数量,也就是每一个单词都有可能作为answer的开始)。

整体来看,基于神经网络架构的机器阅读理解算法整体框架可以划分为以下几个主要功能模块:
1 输入编码模块。
2 context内容和query内容交互模块
3 输出预测模块
由于第二个模块相对于其他模块来说更加复杂,对最终模型性能的影响力最大,也是最能够体现出计算机智能的地方,因此在学术界更多创新的论文都是来自对该模型的改进。

接下来我来说一下该论文在这三个模块所采用的策略,首先展示该模型的整体架构图:
机器阅读理解(machine comprehension)_第1张图片

1 输入模块:
从上图可以清楚的看出,在该模型中的输入编码模块,首先采用word Embedding 和character Embedding策略生成对应每个单词的词向量。其中,word Embedding使用的算法是Glove,而character Embedding采用的是类似于yoon kim提出的卷积神经网络架构,只不过输入时每一个character Embedding,然后通过卷积和max-pooling生成词向量。接下来,将Character embedding和word embedding进行拼接,一起输入到双向LSTM中,这个部分被称之为Contextual Embedding layer,假设原文本的长度为 T ,单向LSTM的输出维度为 dT ,那么双向LSTM的输出则为 2dT

2 交互模块:
接下来在context内容和query内容交互模块部分,采用了context-to-query和query-to-context的double attention机制。假设context为 H ,query为 U 。首先针对context中的每一个单词和query中的每一个单词进行相似度的计算,这样就能生成一个相似度的矩阵 Stj=α(Ht,Uj)=WTs[h;u;hu] ,其中 Ws 是一个维度为 6d 的向量,它也是模型参数的一部分,随着模型一起进行训练。这个相似度矩阵 S 是用来辅助context-to-query和query-to-context attention系数的生成。

context-to-query Attention:
简单来说,就是用query中所有的加权和来表征context中的每一个词向量,这个加权的系数就是通过对上述生成的 S 矩阵中的每一个行来做一个softmax归一化得到。这样得到的表征 U 则是维度为2d长度为T的矩阵。

query-to-context Attention:
这个就是针对context中的每一个词,把它和query词语中相似性最大的取出来作为其权重,然后针对context中每一个词语的权重进行softmax生成归一化的权重,然后使用这个归一化的权重对context中的词向量进行加权求和,生成唯一的query-to-context Attention机制下的词向量,把这个词向量复制T次,同样生成了维度为2d长度为T的矩阵 H

接下来将生成的 H U 以及原始的context表征 H 一起输入函数 G=β(H,U,H)=[h;u;hu;hh] ,很显然这个输出矩阵的维度是 8dT 。其实这个 β 函数可以有很多种的表现形式,这里面例子给出的是最简单的直接拼接的方式,同时还可以尝试multi-layer perceptron 等方式。上述生成的矩阵 G 在原文中被描述为:“ encodes the query-aware representations of context words”。

接下来生成的矩阵G被输入到双向LSTM之中,这个在原文中被称之为“Modeling layer”,目的是“captures the interaction among the context words conditioned on the query”。生成的M矩阵维度为 2dT

3 输出模块
输出模块是一个多分类问题,相当于每一个位置是正确位置的概率,首先预测的是开始下标的位置:
pstart=softmax(WTpstart[G;M]) ,其中 WTpstart 是一个 10d 的向量,随着模型一起训练。
接下来首先把 M 输入到另一个双向LSTM之中,得到一个新的用于预测结束位置下标的矩阵 M2 ,该矩阵的维度同样为 2dT ,结束下标的位置为:
pend=softmax(WTpend[G;M2]) ,同样的 WTpend 是一个 10d 的向量,随着模型一起训练。

最终模型的损失函数如下:
L(θ)=1NNilog(pstartxi)+log(pendxi)

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