Fork me on GitHub

问答系统调研

在完成毕业论文(设计)期间的调研工作,主要研究了几个经典的问答系统和机器阅读理解模型。

Stanford Attentive Reader

出自论文:A Thorough Examination of the CNN/Daily Mail Reading Comprehension Task

解决的问题:给出一个问题和一段文章,找出答案的位置

思路:

  1. 利用Bidirectional LSTM提取问题的特征向量 $q$ ,取前向的最后一个隐层向量(维度$ h1 $)和后向的最后一个隐层向量(维度$ h1 $),然后做concat,所以q的维度是$ 2h*1 $
  2. 对Passage中的每个单词进行Bidirectional LSTM,得到每个单词的特征向量 $\widetilde{p}_i$,维度是$ 2h*1 $
  3. 对每个单词对应的特征向量与问题的特征向量进行Attention操作,这里用的是双线性函数$\alpha_{i}=softmax(q^TW_s\widetilde{p}_i)$),表示答案开头在各个位置的可能性大小;同样的公式,把矩阵 $W_s$ 换成了另一个矩阵 $W_e$ ,再算一个$\widetilde{a}_i$,表示答案结尾在各个位置的可能性大小
  4. 损失函数$L=-\sum{logP^{start}(a{start})}-\sum{logP^{end}(a{end})}$ ,其实这里开始就会有不同的版本,这里是按照CS224n课程中的理解

DrQA

出自论文:Reading Wikipedia to Answer Open-Domain Questions

解决的问题:开放域问答,不需要预先给出段落

思路:

模型包含两个部分,分别是Document RetrieverDocument Reader,分别用于从广大的数据来源中提取与问题相关的文章,根据提取的文章找到问题的答案,完成阅读理解工作

  • Document Retriever
    只用了信息检索的手段,没有用到机器学习,与Document Reader完全分离
    1. 对语料单词进行清洗,包括去停词等过滤操作
    2. 统计所有的bigram
    3. 将这些bigram进行murmur3 hashing得到每个bigram的id(为了减少存储空间)
    4. 计算每个bigram的TF-IDF向量
    5. 将问题的TF-IDF向量与文章的TF-IDF向量相乘取排名前五的文章
  • Document Reader

    1. 表示文章的输入向量是精心改良过的,包括:

      • word embedding:使用预训练的300维Glove词向量,对出现频率最高的1000个单词进行fine-tune,比如常见的who, when, how, what, where
      • Exact match:引入了三个二值特征,分别表示该单词是否对应于问题中的某一个单词,是否是小写原始形式,是否是词根形式
      • Token features:词性(POS)、命名实体(NER) 以及归一化的词频(TF),三者拼接组成一个向量
      • Aligned question embedding:描述paragraph中每个单词与question中每个单词对齐的embedding,换句话说,这里是用相似度来度量两个单词,并不要求完全一样,相当于软注意力机制,而Exact Match的第一个二值特征则相当于硬注意力机制
    2. 对文章中的每个单词进行Bidirectional LSTM,得到每个单词的特征向量 $p_i$

    3. 表示问句的输入向量没有那么复杂,就是300维Glove词向量
    4. 对问句中的每个单词进行Bidirectional LSTM,得到每个单词的特征向量 $qi$ ,然后求加权平均 $q=\sum\limits{i}{b_iq_i}$ ,其中权重因子 $b_i$ 通过将每个单词的embedding $q_i$ 乘以一个可以学习的权重向量 $w$并经过softmax得到,即 $b_i=\frac{exp(w \cdot qi)}{\sum\limits{j}{exp(w \cdot q_j)}}$
    5. 最后和Stanford Attentive Reader一样,对每个单词对应的特征向量与问题的特征向量进行Attention操作,用双线性函数$\alpha_{i}=softmax(q^TWpi)$),分别计算每个字符成为开始字符和结束字符的概率。在预测的过程中,选择最大的 $P{start}(i) * P_{end}(i\prime)$ ,且要满足 $i\leq i\prime \leq i+15$

文章中还提到,在训练的时候,不光使用了SQuAD数据集,还用到了CuratedTREC、WebQuestions、WikiMovies这三个数据集。与SQuAD不同,这三个数据集只包含问题和答案,没有关联的文档或段落,因此无法用来直接训练Document Reader。作者为解决这个问题使用了远程监督的方法:

  1. 基于数据集中的问题,使用document retriever提取相关性最高的5篇文章。
  2. 对于五篇文章中的所有段落,抛弃不包含与已知答案完全匹配的段落,抛弃小于25个字大于1500个字的段落,若有的段落中包含命名实体,抛弃那些不包含命名实体的段落
  3. 对于留下来的所有段落,从段落中找出包含答案的span,这里是基于word水平的,也就是unigram,首先找到段落中包含答案的完整区间[start, end],然后基于20 token window,从start向左延展20个word,从end向右延展20个word(要保证左右两边不能溢出,溢出则取边界)得到一个备选小段落
  4. 从备选小段落中找出最有可能的5个小段落,要与问题进行比较。分别对每个小段落统计它的bigram,同时也统计问题的bigram,最后统计每个小段落的bigram与问题的bigram有多少交集,最后对交集求和,求和总数最多的5个小段落为最有可能的段落。

BiDAF

出自论文:Bi-Directional Attention Flow For Machine Comprehension

解决的问题:给出一个问题和一段文章,找出答案的位置

思路:

该模型的核心创新之处在于 Attention Flow Layer ,提出了双向的attention

假设Context有T个单词,Query有J个单词

  1. 词向量用预训练的glove(维度用d1表示),字符向量用 1D-CNN 计算(最后得到的向量维度等于你用的卷积核的个数,这里用d2表示,字符向量的作用是可以弥补当训练BiDAF时遇到不在gloVe字典中的单词)
  2. 拼接词向量和字符向量,得到的向量维度用d表示(d=d1+d2),现在我们有了两个矩阵,维度分别为 $dT$ 和 $dJ$ ,分别用于表示Context和Query
  3. 通过highway networkhighway networkresnet 很像,它的作者甚至认为何凯明是抄袭了他的思想),用公式表示就是 $y=t\bigodot g(Wx+b)+(1-t)\bigodot x$ ,其中 $\bigodot$ 表示element-wise multiply ,g表示激活函数,t的值本身也是由另一个线性层加一个激活函数算出来,取值范围是0到1。可以认为 highway network 的作用是调整词向量和字符向量的相对比重。这步过后,两个矩阵的维度不变
  4. 单层双向的LSTM。这步过后,两个矩阵的维度分别为 $2dT$ 和 $ 2dJ$ ,分别命名为H和U
  5. 接下来的 Attention Flow Layer 是个模型的重点,提出了一个相似度矩阵S,维度是 $TJ$ ,表示每个上下文单词和每个问句单词的相似度,S是这么来的:对于上下文a和问句b, $S_{ab}=w^T[a;b;a\bigodot b]$ ,;表示上下拼接,w是可训练的向量,维度是 $6d1$ 。得到S后,可以进行下面的两个过程 Context-to-Query AttentionQuery-to-Context attention
  6. Context-to-Query Attention : 取出S中的一行 $1J$ ,做softmax,得到的结果即视为权重,与U中的每一列做加权求和,得到一个 $2d1$ 的向量。遍历S中的每一行重复上述动作,得到矩阵 $\check{U}$ ,维度为 $2d*T$
  7. Query-to-Context attention :和上面的做法并不一样,先取出S中每一行的最大值,得到一个列向量 $T1$ ,做softmax,用矩阵H和这个列向量做矩阵乘法,得到一个 $ 2d1 $ 的向量,然后直接把这个向量拷贝T次,得到矩阵 $\check{H}$ ,维度为 $2d*T$
  8. 这步要把 $H$ ,$\check{H}$ , $\check{U}$ 组合在一起得到一个大矩阵 $G$ 。是这样: $G_t=\beta (H_t,\check{U}_t, \check{H}_t)$ ,下标t表示列号,其中 $\beta(a,b,c)=[a;b;a\bigodot b;a\bigodot c]$ ,$G$ 的维度是 $8d*T$
  9. 双层双向的LSTM。第一层双向的LSTM过后,得到矩阵M1,维度为 $2dT$ ,第二层双向的LSTM过后,得到矩阵M2,,维度也为 $2dT$
  10. 可以预测答案的开始位置和结束位置了,$p1=softmax(w^T{p1}[G;M1])$ ,$p2=softmax(w^T{p2}[G;M2])$, w维度都是$110d$ ,p纬度都是$1T$ ,预测的时候取T个值中最大的那个;训练的时候损失函数为$L(\theta)=-\frac{1}{N}\sum\limitsi^N{[log(p{y1})+log(p_{y2})]}$ ,其中$y1$ 和$y2$ 表示正确答案

GoldEn Retriever

出自论文:Answering Complex Open-domain Questions Through Iterative Query Generation

解决的问题:开放域问答,不需要预先给出段落,问题需要系统进行多步推理才能给出正确答案

思路:

该模型的核心创新之处在于,它在每一步都使用先前的IR结果来生成新的自然语言查询,并检索新的证据来回答原始问题,而不是单纯依靠原始问题来检索文章段落,从而实现多跳推理。

Reference:

  1. https://towardsdatascience.com/modeling-and-output-layers-in-bidaf-an-illustrated-guide-with-minions-f2e101a10d83
donate the author