[PaperReading]*Bi-Directional Attention Flow For Machine Comprehension
概述
attention一直在做的,是将原本的数据信息,有重点有方向地进行总结。这篇文章注意到一个问题,那就是在attention机制上,之前的工作总是在得出attention权重后对于原数据进行总结summary,这使得得到了attention结果的同时,丢失了部分原数据的信息,并且还可能破坏训练得到的attention的意义(个人觉得做乘法取概率不一定是attention的最终归宿)。本文就以上问题,提出了新的想法,对于计算出的attention结果,不做summary,将attention的信息和原信息一样向下一层传递,避免因为summary过早,造成原信息的损失。在此基础上提出了attention flow的概念,并针对特定的文本理解模型,设计了双向attention flow,这里的双向针对的是文本context和提问query,不只query要对context形成attention,context也要对query形成attention,这样的方式被称为双向Bi-Directional Attention Flow。
模型
机器学习的模型的层次性,一层一层的操作,可能会执行相同的事,也可能执行不同的任务,但是一层接一层的操作让模型变得容易实现和理解。大部分模型下一层的输入是上一层的输出,这样对层次的分析很方便划分,resnet的残差操作或是其他网络的highway结构,是对这种结构的突破。在本文中的attention flow的提出,在我看来(纯个人观点)是对类似highway的突破。突破点在于,它其实很类似一个另类数据增强的操作,增强的部分是数据的逻辑性,然后把数据新的处理结果和原数据一同传入下一层。
上图是论文中的模型结构图,明显的分层模型。论文原文对每一层都有清晰的描述。
Character Embed Layer: 字母级别的embedding,之后对每个单词通过CNN等操作,整合为word level的Embedding,维;
Word Embed Layer: 预训练的word embedding,文中采用的是GLOVE词向量,维;
前两层得到的两个不同的embedding结果,经过一个,两层highway网络,转化为新的维结果,context转化为,query转化为
Contexual Embed Layer: 输入为前两部分的embedding的结合每一个词是一个维度为的向量,利用双向LSTM对于文本进行编码,每一个方向的输出维度均为,最后结合为一个维度的向量。对于长度分别为context长度和query长度的结果,分别有,和,包括context编码和query编码;
Attention Flow Layer: 得到了和编码后,进行双向attention操作。之后将attention的结果通过一个函数进行整合,最终的结果是将,C2Q的attention结果,Q2C的attention结果,三者经过一定结合,传入后续结构。
Model Layer: 两层的双向LSTM编码;
Output Layer: softmax判断答案在context中的起始点和终结点。
总结
attention flow的思路是从原本的attention的形成模式中,保留attention却又不想失去原信息提出的中和方案。辛辛苦苦计算出来的特征,一个summary可能会丢弃掉不少。highway的模式在网络中起到的效果是值得探讨的。