本文参考文献
Danqi Chen, et al. Reading Wikipedia to Answer Open-Domain Questions
近期由Facebook提出的DrQA系统是一个可以用来回答广域问题的机器阅读理解系统,只需要借助原始的误解够文本集wikipedia,DrQA可以针对任意问题取去wikipedia自动检索相关文章并且做出相应的回答。DrQA包含两个部分,分别是Document Retriever和Document Reader,前者是负责从海量wikipedia文章中检索与对应问题最相关的五篇文章,后者则负责从这五篇文章中寻找问题的答案。文章的第一作者是Danqi Chen,跟随斯坦福大学Prof. Christopher Manning攻读计算机科学博士,本科毕业于清华姚班,高中毕业于湖南雅礼中学,高中期间获得了第20届国际信息学奥赛金牌,小仙女实在太厉害。
本文提出的模型有以下几个亮点:
将bigram与tfidf结合,并使用哈系来降维,有效减少存储空间;
段落的字符编码不不仅仅包含词嵌入,更结合了词性、与问题相关的硬注意力以及软注意力;
通过远程监督来为传统数据集扩充样本,并结合多任务学习;
使用wikipedia作为唯一知识来源,不需要预先划定段落重点;
下面我将分别介绍Document Retriever和Document Reader这两个结构的具体细节。
1. Document Retriever
作者采取了经典的信息检索(Information Retrieval)的思路来缩小在海量wikipedia文档中的检索范围,通过分别计算问题和文章的bigram的TF-IDF向量,然后结合两个TF-IDF即可得到与问题最相关的五篇文章。这种基于统计的做法的优点是可以保证检索速度很快,而且它的表现比wikipedia自身的搜索引擎效果要好,完全可以作为一个单独的文档搜索引擎来使用。缺点主要有两个,一是完全基于统计的做法忽略了词与词之间的内在含义的关联性,另外一个就是与后面要介绍的Document Reader是分离的,无法做到端对端训练。
Document Retriever的具体做法是首先对语料单词进行清洗,包括去停词等各种过滤操作,然后统计所有的bigram,并进一步对bigram做同样规则的清洗得到最终的bigram,然后将这些bigram进行murmur3 hashing得到每个bigram的唯一id。需要注意的是,如果哈系的特征数目设置过小,那么这过程可能会有两个不同的bigram但是得到的id相同,所以文章用了特征数目为2^24,可以尽量避免这种哈希冲突。得到每个bigram唯一的id以后,就可以根据TF-IDF公式来计算每个bigram的IDF向量以及TF向量了,最后将IDF乘以TF即可得到TF-IDF向量。将问题的TF-IDF向量与文章的TF-IDF向量相乘并取最大的前五个的文章的索引,即可得到与问题最相关的5篇文章。为什么可以这样做呢?因为TF-IDF是衡量一个词(或其他形式的元组)对一个文档的重要性,如果一些词既对于问题很重要,又对于文章很重要,那么就可以得出结论这个问题与这个文章的关联性很大。
2. Document Reader
2.1 Encoding
文中的Document Reader是基于RNN来实现的,由于要处理的对象就两个:paragragh和question,首先需要对各自进行编码。
paragraph编码的做法是将其每一个token转换成特征向量然后作为多层BLSTM的输入,进而得到编码后的上下文信息,这里的特征向量并不像传统的embedding矩阵那么简单,文中paragraph的特征向量是由以下三个部分组成的:
word embedding 作者使用了已经训练好的300维度的Glove词向量,不过这里有一点小小的改变,即作者保留绝大多数词向量不变,对出现频率最高的1000个单词的词向量进行进一步调参优化,理由是这些单词对于QA系统十分关键,比如常见的who, when, how, what, where等等;
Exact match 作者还引入了三个二值化的特征,它们分别是该单词是否对应于问题中的某一个单词、是否是小写的原始形式、是否是词根形式,实验表明这三个简单的特征对于结果十分有效;
Token features 这个特征是用来描述词本身的属性的,它有三个部分,分别是词性(part-of-speech, POS)、命名体(named entity recognition, NER)以及归一化后的词频(term frequency, TF),三者拼接在一起组成一个向量;
Aligned question embedding 这个特征是用来描述paragraph中每个单词与question中每个单词对齐的embedding,用a_ij来描述paragraph中的单词p_i与question中的单词q_j的相似度,其计算方式是:先将每个embedding经过一层ReLU激活函数的全连接网络,然后各自相乘并且归一化。这个特征其实跟Exact match中的第一个二值化特征很像,那里是判断是否完全一样,而这里是用相似度来度量,那么即使两个单词不一样,但意思相近的话,相似度也会很高,所以这里相当于软注意力机制,而Exact Match那里是硬注意力机制;
文中对Question的编码是要简单一些,作者只是将每个单词的embedding矩阵作为RNN的输入,然后将RNN的所有隐含状态拼接到一起组成一个向量,不过这里不是简单的拼接,而是采取加权拼接,通过将每个单词的embedding矩阵乘以一个可以学习的权重向量并经过softmax函数即可得到该单词的权重因子。
2.2 Prediction
由于最终的答案一定是从paragraph中生成的(我们不考虑更加复杂的推理类或计算类的问题),因此只用找到答案在paragraph中的单词区间,即找到开始字符和结束字符各自的位置即可。作者在这里采取的方式是通过两个带有exp函数的线性网络来分别计算每个字符成为开始字符和结束字符的概率,即start_score和end_score,而损失函数也是由两个部分相加得到,即start_score与target_start的负对数似然函数加上end_score与target_end的负对数似然函数得到最终的损失函数,进而可以使用误差后向传播算法来更新所有参数。在解码的时候,最终答案的span是通过求出所有paragraph中的start_score与end_score的乘积的最大值来得到的。
3.数据库
文中使用到的数据库有:
wikipedia:作为知识库;
SQuAD:包含从wikipedia提取出来的100000+个问题-答案对以及500+篇文章;
CuratedTREC、WebQuestions、WikiMovies:这三个数据库仅仅包含问题和答案,没有上下文段落;
并且对于它们各自进行了以下的处理:
对于wikipedia,只保留文字部分,所有结构性数据、列表、图标都被过滤掉,一共保留了5075182篇文章和9008962个不同的字符;
对SQuAD,包含87000个训练样本和10000个验证样本,测试样本可以通过Creator获取,每个样本包含一个自然段、问题和人工处理的答案,通常可以由exact string match与F1 score两种评估方法,都是在字符级别进行评估。SQuAD是最大的问答数据集,但是本文的模型定位是一个适用于开放领域的问答系统,所以文中仅仅用SQuAD数据集来训练和评估Document Reader的机器阅读理解能力,而在SQuAD的验证集上做测试,但是与其他论文中的测试不同的是,这里作者剔除了自然段,仅仅给出问题以及wikipedia数据库,让模型自己去匹配对应的自然段然后找出答案;
为了证明本文的模型是一个普适性的问答系统,除了在wikipedia数据集上评估以外,作者还考虑了CuratedTREC、WebQuestions、WikiMovies这三个数据集,与SQuAD不同的是,这三个数据集只包含问题和答案,并没有关联的文档或段落,因此无法用来直接训练Document Reader,所以作者采取了Mintz在论文Distant supervision for relation extraction without labeled data中提出的Distant Supervised方法来构建训练集,该方法的核心思想是基于已有的关系库来对海量文本数据进行标注。其具体做法分如下两个步骤进行:
(1) 从段落中找出包含答案的span,这里是基于word水平的,也就是unigram,首先找到段落中包含答案的完整区间[s, e],然后基于文中说的20的token-window,从s向左延展20个word,从e向右延展20个word,当然要保证左右两边不能溢出,溢出则取边界即可,这样就得到了一个备选小段落;
(2) 从所有备选小段落中找出最有可能的5个小段落,这个就要与query进行比较了,具体做法就是分别对每个小段落统计它的bigram,同时也统计query的bigram,最后统计每个小段落的bigram与query的bigram有多少交集,最后对交集求和,求和总数最多的5个小段落为最有可能的段落。这里的统计bigram的交集是什么意思呢?比如小段落a的bigram是{‘i am’:2, ‘you are’:3, ‘how are’: 1},query的bigram是{‘i am’: 3, ‘you are’: 1},那么它们的交集就是{‘i am’:2, ‘you are’:1},求和之后就是3次。
以上就是DrQA系统的核心内容,至于实验细节,大家可以阅读原始论文了解细节。与本文有关的任何问题,大家也可以去本公众号唯一指定的即将上线的官方论坛(https://bbs.mlqi.org)与我交流,本文将同步更新至该论坛,阅读原文即可访问该论坛。
其他小知识:
准确率accuracy: (TP+TN)/(P+N)
召回率recall: TP/P,体现对正样本的区分能力
精确率precision: TP/(TP+FP),体现对负样本的区分能力
F1 score: 2 * precision * recall / (precision+recall),F1越高,表明模型越稳健
题图:Pawel Kuczynski
你可能会感兴趣的文章有:
动态层归一化(Dynamic Layer Normalization)
详述DeepMind wavenet原理及其TensorFlow实现
Layer Normalization原理及其TensorFlow实现
Batch Normalization原理及其TensorFlow实现
Maxout Network原理及其TensorFlow实现
Network-in-Network原理及其TensorFlow实现
如何基于TensorFlow实现ResNet和HighwayNet
TensorFlow seq2seq中的Attention机制(续)
深度学习每日摘要|坚持技术,追求原创