8. 非结构化的知识库-Reading Wikipedia to Answer Open-Domain Questions

  • 论文:https://arxiv.org/pdf/1704.00051.pdf

1. 简介

  • 给定一个问题,我们可以在维基百科中找到相关信息和答案,如下表:img

    可以看出,对于问题我们可以在维基百科中找到相应的文章,根据文章找到与答案相关的段落,然后提取出答案。

2. 流程

img

2.1 Document Retriever

  • 通过问题检索出相关的文章有很多的方法,最简单的方法就是统计两者的TF-IDF得到词袋模型向量,然后通过cosine similarity等相似度度量方式进行检索。进一步可以将相邻词汇也考虑进去,使用n-gram的词袋模型。这篇文章中,作者使用bigram的词袋模型,为了加快效率,将bigram映射为murmur3 hash

2.2 Document Reader

  • 可以使用NLP阅读理解中的一些方法来得出答案。对于每篇文章的每个段落,我们去预测一个文本区间作为答案的概率,具体来说,我们根据问题去预测该自然段答案的起始位置(start position)和终止位置(end position)。依次对每篇文章的每个段落进行预测,选出概率最大的区间作为最终答案。

  • 首先我们对每个段落进行encoding,将段落中的每一个token用一个特征向量表示,该特征向量包含以下四个部分:

    1. 词向量(Word-embeddings):300维度预训练好的词向量,由于问题中有些词语比较特殊,如疑问词,因此我们在训练中,对word-embedding中前1000的高频词进行fine-tune,其他词的word-embedding固定使用预训练的值,不再进行训练。

    2. 抽取匹配(Exact Match):我们用三个二元的指示器来表示该token是否在问题中出现,三个二元指示器分别表示该token的不同形式的表达(如大小写)。

    3. 符号的特征(Token Features):我们也将该符号的词性标注、命名实体和归一化后的TF作为3个特征加入到特征向量中。

    4. 引入对问题的注意力机制(Aligned question embedding):该特征和特征2抽取匹配类似,都是为了表征该token和问题的关联度,与特征2不同的是,该特征考虑了整个问题与它的相似度,而非某一个具体的单词,是一种soft-alignment。具体来说,将问题每个单词的embedding和该token通过点乘比较相似度得到加权系数,再对问题每个单词的embedding进行加权求和作为该特征,公式如下:img

      其中p表示段落中的token,q代表问题中的token,E表示embedding,\(\alpha\)是二者点乘后的归一化相似度,即:

      img

    这样就将段落中每一个token进行了向量化,接下来,我们使用一个3层的双向LSTM对段落进行encoding,假设双向LSTM每一层隐层为h,我们将所有隐藏层连接起来,这样对于每个token就得到了一个6h大小的向量表达\(p_i\)

  • 接下来我们对问题进行encoding,使用另外一个3层的双向LSTM对问题的word-embedding进行编码,将每时刻的隐层进行加权求和,该归一化加权系数由训练得到,学习了问题中每个单词的重要程度,这样我们就得到了一个问题的向量表达\(q\)

  • 得到问题和段落的编码后,我们就可以对答案区间进行预测,对于段落的每一个位置i,都用两个双线性项去分别预测它作为答案起始位置和终止位置的概率,公式如下:img

    我们在该段落中去寻找一个区间最有可能是答案的区间\([i, i']\),即满足\(P_{start}(i)×P_{end}(i')\)最大,且\(i≤i'≤i+15\)。我们将每个候选段落中最可能是答案的区间进行比较,选出最终的答案区间,这里为了能够在所有段落中进行比较,我们用指数形式替换掉归一化的Softmax。

-------------本文结束 感谢阅读-------------