专栏首页Fdu弟中弟问答系统调研

问答系统调研

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

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 表示文章的输入向量是精心改良过的,包括: 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的第一个二值特征则相当于硬注意力机制 对文章中的每个单词进行Bidirectional LSTM,得到每个单词的特征向量 p_i 表示问句的输入向量没有那么复杂,就是300维Glove词向量 对问句中的每个单词进行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)}} 最后和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),现在我们有了两个矩阵,维度分别为 dTdJ ,分别用于表示Context和Query
  3. 通过highway network (highway network 和resnet 很像,它的作者甚至认为何凯明是抄袭了他的思想),用公式表示就是 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 Attention 和 Query-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})]} ,其中y1y2 表示正确答案

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • anwsion问答系统研究笔记

    /app/文件夹下是action 所有action类都继承/system/中的基类AWS_CONTROLLER /models/文件夹下是mode...

    lilugirl
  • 社区问答V1.0系统说明

    解决微信群,QQ群学者或者专业更难的提问,无人积极回答问题,由彬哥策划的产品。 问答系统特征如下:

    李海彬
  • 研发:理解系统调用nice

    允许进程改变它们的优先级。 包含在increment参数中的整数值用来修改进程描述符的nice字段。

    heidsoft
  • 问答系统冠军之路:用CNN做问答任务的QANet

    AI 科技评论按:当前,整个人工智能领域对自然语言处理技术的热情可谓空前高涨。一方面,这是由于借着深度学习的东风,计算机在各种自然语言处理任务中的表现有了突飞猛...

    AI科技评论
  • J2EE系统性能测试系统调优问题

    3、对应用系统进行性能采样于监控,(Wily有一套产品可以在运行期进行调优,但我没有用过),我用的是同楼上一楼的P6Spy,加MS的那个压力测试工具,也有D用L...

    阿敏总司令
  • 调度系统Airflow1.10.4调研与介绍和docker安装

    随着公司调度任务增大,原有的,基于crontab和mysql的任务调度方案已经不太合适了,需要寻找一个可以支持分布式扩容的调度系统解决方案。

    Ryan-Miao
  • 社区问答系统(CQA)简单概述

    社区问答系统,是一种基于web的应用,主要帮助用户从社区中寻找复杂的,与上下文相关的问题答案。

    种花家的奋斗兔
  • vue重构后台管理系统调研

    Q4要来了,我来这家公司已经一个季度了,通过对公司前端框架的整体认识,对业务的一些认识,发现,这些东西也都是可以重构,无论是v2,还是v3的代码。

    windseek
  • AAAI 2020 提前看 | 三篇论文解读问答系统最新研究进展

    在本篇提前看中,我们重点聚焦 AAAI 2020 中与问答系统(Q&A)相关的文章。问答系统是自然语言处理领域的一个重要研究方向,近年来各大国际会议、期刊都发表...

    机器之心

扫码关注云+社区

领取腾讯云代金券