一、写在前面的话
该论文考虑的问题是如何使用Wikipedia作为唯一知识源回答开放领域的事实型问题,就像人们在百科全书中寻找答案一样。Wikipedia是一个持续不断发展并且包括各种详细信息的知识源,如果可以善加利用,可以很好的促进机器的智能。跟知识库(便于计算机处理,但是对开放领域的问答系统来说,太过稀疏,比如Freebase和DB-Pedia)不同的是,Wikipedia包括人们关心的最新的知识,并且是为人类的阅读(而不是为机器)设计的。采用Wikipedia的文章作为知识源来做问答(QA),需要同时解决2个挑战:一个是大规模开放领域的问答,一个是机器对文本的理解。为此,该论文提出了一种两阶段的通用框架(DrQA),即先使用检索方法通过问题找到相关的文章(Document Retriever),再使用阅读理解模型从文章段落中找到答案(Document Reader)。
二、论文模型
2.1 DrQA的整体架构
DrQA整体思路并不难理解,Document Retriever部分主要是采用n-gram特征和TF-IDF对ElasticSearch进行了优化,这部分具体论文也没展开,算是比较工程的环节,Document Reader部分则是借鉴了Attentive Reader模型,在其基础上对特征工程做了一些工作。
2.2 Document Retriever
这部分如上述所提,主要是大规模检索相关性上面的优化,更多涉及工程,这边就直接引用别人的文章里的说明:参考传统的QA系统,该论文采用非机器学习的文本检索系统来缩小检索范围,然后把注意力集中在这些可能相关的文章阅读理解来寻找答案。相比于内置的基于ElasticSearch的Wikipedia Search API,简单的倒排查询结合term vector model打分的效果在很多类型的问题上的效果要更好。文章和问题通过tf-idf作为权重的bag-of-word向量来衡量相关性。后来通过加入n-gram特征,把小范围的词序考虑进来,进一步改进系统。最好的系统是用bigram计数以及(Weinberger et al., 2009)提出的哈希方法(用murmur3 hash将bigram映射到224个bin中),同时保留了速度和内存的效率。
2.3 Document Reader
该部分主要涉及段落的编码和问题的编码,问题编码相对简单,直接使用RNN对其编码,最后将所有隐层向量通入如下方式融合成一个question vector,其中 用来表征每个隐层向量的重要性(感觉就是做了下self-attention):
段落的编码则相对复杂,作者在这部分引入了不少新的特征工程:
-
正常的词向量编码,词向量使用网上爬取的数据训练得到300维的Glove word embedding,然后使用双向LSTM对上下文信息进行编码
-
完全匹配向量,使用用3个简单的二值特征,表示段落中的每个词是否可以完全匹配question中的某个词(会对形式进行一定处理),按文章给的结果,效果明显
-
人工的特征:包括词性,命名实体名以及词频
-
Aligned question embedding:
其中,用以刻画问题中的每个词与段落之间的关系(个人感觉这个其实就是后面阅读理解里面常用的attention):
2.4 预测
训练2个独立的分类器来针对段落中的每个词,都预测其为答案开始和结束的概率大小,并加入限制条件防止生成奇怪的答案:
三、实验结果
SQuAD由于数据集自己就包含关联的上下文信息,所以可以直接应用在DrQA上,但CuratedTREC,WebQuestions和WikiMovies只包含问答对,故使用远程监督的方法来补充数据集:
Document Retriever 模块在所有QA数据集上的表现,并和直接调用其API做对比:
Document Reader的实验:
值得关注的是文章做了多任务的实验,定义了以下3种形式,并进行对比:
-
SQuAD:Document Reader模型只用SQuAD作为训练集,其他的数据集用来评估测试
-
Fine-tune (DS):Document Reader模型先在SQuAD上训练,然后分别用其他数据集的distant supervision (DS)训练集来进行优化
-
Multitask (DS):同时用SQuAD以及其他DS的训练集了训练Document Reader模型
可以看出,使用额外的相似任务数据对模型是有帮助的。
文章立足于开放域提出了一个简单易行的问答框架,但有些遗憾的是文章所使用的Document Retriever和Document Reader模型并没有亮眼的创新,整体思路还是立足于当前的框架。同时,文章在使用网络匹配答案时,并没有利用多段落信息。这些都有待后续探索和创新。
网友评论