文章目录
- 1、概念与特点
- 2、微信搜一搜中的DocQA路线
- 2.1、语义检索
- 2.2、答案抽取
- 3、QQ浏览器问答技术中的DeepQA路线
- 3.1、系统性解决方法
- 3.2、query理解
- 3.3、意图识别
- 3.4、MRC抽取
- 3.5、答案融合与排序
- 4、美团智能问答技术中的DocQA路线
- 4.1、MRC模型
- 4.2、多文档MRC任务
- 5、总结
1、概念与特点
针对DeepQA方法进行解析,又称DocumentQA或DQA,往往会使用到MRC框架从文档或网页中提取query对应的答案;一般利用检索+机器阅读理解等技术,从开放文本库中提取出用户问题的答案
优点:
- 数据来源丰富,能抽取多种类型的答案
- 知识覆盖面广,能覆盖更多中长尾问题
- 能解决一些KBQA难以解析回答的问题
难点:
- 抽取的答案片段的准确性
- 对无答案段落的拒识能力;很多时候段落中并不包含答案,所以要尽量避免从段落中抽取出一些错误的答案
- 召回段落与问题的相关性;只有保证了相关性,后面的模型才能抽取出正确的答案
关键技术:
- 阅读理解–MRC
- 开放与问答–OpenQA
2、微信搜一搜中的DocQA路线
本路线来自于DataFunTalk公众号发布的一篇文章,文章链接:https://mp.weixin.qq.com/s/NeIUXLdyOK56BDpVCkl81A,将文章中公开的DocQA方法进行总结。路线有以下几个步骤:
- 从query中识别问答意图
- 通过检索模块去段落库中检索相应的段落;相当于存放大量doc的数据库中找到与答案相关的一部分doc
- 对检索到的Top-K段落,使用reader模型处理(多段落的阅读理解)
- 对答案进行重排序和据识判定
- 输出最终的答案
下图1为总体的流程图,可以看到比较重要的检索模块和多段落的MRC模块
2.1、语义检索
语义检索本质就是计算用户输入的query与段落的相似度,或者语义相关性。可能存在以下问题:
- 标注样本有限,如何进一步提升模型泛化能力
- 训练和预测不一样,Batch(训练)VS 全库检索(预测);意思就是,训练时,相似性计算是局限在一个batch内的,同一个batch内的数据没有与其它batch内的数据进行计算,而在预测时,一个query是要和整个库内的所有段落计算相似度,整个库达到数百万或者数千万规模,会导致检索预测时的过召回问题,召回了很多错误的段落,这种方式会造成训练和预测的不一致问题
为解决以上问题,做了如下优化:
- 优化一:
- 利用大量(问题、段落)问答对通过策略和人工筛选出一些质量比较高的来构造预训练任务,相当于在BERT训练模型基础之上,通过二次预训练来提升模型的效果
- 训练改进:In Batch Negative => Cross Batch Negative;意思就是,通常在构建相似性计算的负例的方法是在同一个batch中,每一个样例对都是正例,即query和预期对应的段落param就是正例,如 ( q u e r y 1 , p a r a m 1 ) , ( q u e r y 2 , p a r a m 2 ) , . . . , ( q u e r y n , p a r a m n ) (query_1, param_1),(query_2, param_2),...,(query_n, param_n) (query1,param1),(query2,param2),...,(queryn,paramn),那么query与非对应的param构造的元组均是负例,如 ( q u e r y 1 , p a r a m 2 ) , ( q u e r y 1 , p a r a m 3 ) , . . . , ( q u e r y 1 , p a r a m n ) (query_1, param_2),(query_1, param_3),...,(query_1, param_n) (query1,param2),(query1,param3),...,(query1,paramn),这样的方式成为In Batch Negative。为了打破相似度计算只在batch进行,处理在同一个batch构造负例外,也使用batch之外的param构造负例,即Cross Batch Negative
- 优化二:
- 利用大量<问题,答案>对产生远程监督训练样本
- 迭代训练,引入更多困难负例
- 具体的做法是,当有一个正确的<问题,答案>对,记为<q,a>;使用模型 m o d e l i model_i modeli(大多为BM25)从段落库中召回q的top-k段落,其中包含a的段落与q组成正例,而剩下的段落与q组成负例,将其合并至数据中训练新模型,得到 m o d e l i + 1 model_{i+1} modeli+1,即添加了很多困难的负例重新训练模型
2.2、答案抽取
一般对于实体短语类(短答案)抽取,会将问题和段落拼接到一起,用一个BERT去预测片段的开始和结束。但这种方式不能很好地应用在长答案和是否类答案的抽取上,此时需要对模型进行一些改造。例如增加分类图,针对是否类答案去判断是“是”还是“否”;对长答案类,对句子进行聚合,从token级聚合成句子表征,得到了句子级的表征之后,就可以预测句子级的开始和结束。
对于答案抽取这个模块,第一个问题是MRC样本标注成本高,难以获取大规模领域内标注样本。一般采用预训练语言模型(BERT)+Finetune方式,借鉴了预训练模型BERT已经学好的一些知识,可以较大地提升模型效果。但MLM和MRC任务差异较大,MLM任务主要是mask一些token,利用句子上下文去预测这些token,主要学习词之间的词法、语法等语言模型特征。MRC则是给定一个问题和相关段落,去段落里寻找问题的答案,主要学习对问题和段落的理解。
对于这个问题,更好的一个解决方案是能否构建一个与MRC任务接近的预训练任务。Span Selection Pre-training for Queation Answering论文里的一种方式是利用片段选择 Mask+ 检索来构造类似MRC的预训练样本,如图3所示。首先需要具备一个文本库,从中选择一些句子去做实体识别,随后随机地mask掉其中的实体,用通配符来替代。这时可以将这个句子当做一个Query,去段落库中检索出TopK的段落,通过策略筛选之后,这些段落可以当做SSPT的一个样本,这个样本的形态和MRC样本的形态是比较接近的。
在构造SSPT预训练任务时会遇到样本包含噪声、段落独立训练导致多段落抽取效果不好和预测标签soft化等问题,文章中均提出了一定的解决方法,感兴趣的读者可以跳转至文章阅读。
3、QQ浏览器问答技术中的DeepQA路线
此方案出自此文章,DQA的数据来源非常简单,基于普通的网页文本就可以针对不同的query抽取处不同的答案,适配的场景也比较多,不止在搜索场景,一些语音交互场景以及商品客服场景等等都可以使用DQA进行内容提取。搜索场景下的DQA解决方法如图4所示
- Query、Doc理解:搜索中query会比较扎,中长维分布严重,同时召回的Doc来源也比价乱
- 拒识:据识;抽取是整个DQA的核心,很多Query的候选Doc中没有正确答案或者无法解答, 且无答案比例比有答案比例高很多;一旦没有足够的支撑情况下出了答案,通常是一个bad case ;MRC模型经常会过召回一些答案,需要将这些答案据识掉,避免错误曝光
- 答案选择:同一个Query下,会有很多的文档,每个文档也会抽出不同的答案来,最后需要在这些答案中进行选择,同时生成对应摘要
3.1、系统性解决方法
图4中展示了DQA的解决路径,具体为以下流程:
- Query Understanding/QU–问答意图的准入、问题类型的分类、强弱无时效性的区分、低质query的语法识别、一些pattern的补充识别
- 召回:主要是基于通搜的top N作为基础召回队列,额外引入百科库召回和IRQA召回;通搜里只有在实体绝对匹配时才会召回百科内容,但百科里通常在实体不匹配的时候,一些其他的实体内容也可能会挖掘到当前query的答案,故通过百科Doc+自建Title做双域索引召回;此外自建的FAQ库通过IRQA可以召回直接满足Q的相关Answer,作为潜在答案抽取的补充文档
- 粗排:很多文章类的内容文本很长,seq length过长在性能上是不可接受的。需要将Doc切分成paragraph,再通过Query-Para的数据形式处理后续流程;同时召回文档数量较多,再进行切分后,候选数量多下游压力较大,无答案比例带来的据识问题更大,需要根据一些相关性的过滤、粗排以及截断,去降低下游服务的计算压力和据识压力
- 抽取:进入MRC环节的通常就是优质的Query和Paragraph的数据对,这里针对Query-Para做MRC抽取,每个Paragraph都会抽出答案,再对答案进行聚合
- 答案融合:将不同para抽取出的相同答案聚合,形成(Q, A, 支撑ParaList)的三元组,再对三元组生成各种特征
- 答案rank:根据(Q, A, 支撑ParaList)三元组进行排序,选出Best answer
- summary生成:根据Best answer做最终摘要的生成
3.2、query理解
图5中展示了query理解中的一些问题和注意点,搜索里面25~30%是问答的query,还有70%+是非问题的query;对不适合DQA抽取query的拒识,以及一些必要的标签化是QU侧主要面临的问题,下面介绍下意图识别、时效性、分类标签这三部分的一些做法:
- 意图识别:对于一些严重的是缺乏主成分的Query、无问题意图的Query、语意不清、计算类、寻址类等问题,需要模型判别拒识掉;最终流入到下游系统的仅保留问题意图清晰、且适合DQA抽取的Query
- 时效性识别
- 强时效:对于类似金价、股票价格、天气等,query本身属于问答意图,但是不适合DQA手段来解决;还有一些和事件关联的,并且跟时间相关的,比如说苹果公司财报、iphone12上市,这些query和事件强绑定,更适合由实体知识图谱和事件图谱,去由结构化的挖掘跟更新推理解决,而不是通过文本去抽取,一旦文本内容时效滞后,或随着时间的变化,这个答案的支撑会有很大变数
- 弱时效:对于query一段时间之内不会变化,至少一大段时间窗之内不会变化;这类query无需过滤,但是在选择候选文档时,对时间戳做更紧的收敛,以及在最终排序时需要对Doc及Answer时间因子权重进行提权
- 无失效:如知识类、事实类;这类Q虽然也需要越近的文章越好,但是没有那么强的要求,如果没有近期的文章的话,一些时间戳相对较早的文章也可以,在排序侧Doc及Answer的时间因子权重不需要很重
- Type识别:Query类型区分了三十个类别,如时间、地点、人物等;分类标签有助于下游抽取模型避免抽取混淆,比如问一个人物,避免结果抽出一段描述或一个地点,给下游模型当作信号;同时也可以针对类别区分下游任务,如时间、地点、人物、实体等为短答案,定义类、观点类为长答案,步骤方法为列表答案等
3.3、意图识别
为了提高视图识别模型的能力,进行了以下优化方法:
- 二阶段训练:针对问答短query的模型,对比BERT,RoBERTa,ELECTRA这些优秀的预训练模型,在此基础上做二阶段领域预训练
- 训练过程优化:在预训练模型基础上,针对训练过程优化,如通过DropPooler来做特征矫正,Layer-wise LR Decay来避免灾难性遗忘等等
- 样本增强:通过同义样本的标签平移增强数据、通过预测高低边界样本增强数据、错误数据抽检精标做主动学习等
- 参数对抗训练:增加参数对抗过程提升模型的鲁棒性,从早期FGM到近期表现较好的SMART,在众多问答相关任务的实验中都取得了不错的指标提升;除了参数的扰动, 也加了一些样本的对抗,比如给query去加一些有用的干扰词或者无用的干扰词,让它变成正负样本,这样去手动对抗模型
上述说明的方法以及具体提高如下图6、图7所示
3.4、MRC抽取
MRC模型侧的优化:
- 预训练模型:阅读理解基于QQ浏览器自研的一套基于搜索领域数据以及点击行为的大规模的预训练模型“摩天/Motian”
- 特征引入:在摩天的基础上,除了引入基础的query,title,paragraph来做朴素的MRC抽取之外,还引用了QueryType,当做token输入指导模型下游的抽取,比如做跨领域跨类型的混淆抽取,防止问一个人却抽出地点
- HasAnsTask:出口侧除了传统的Start/End,Span的输出,额外引入HasAns来判定是否有答案的Task,此信号会用到下游的答案融合和排序;整个MRC模型本身也会去做拒识,但此处不会卡得特别严,最重要的拒识主要在下游答案融合排序中进行
MRC样本的构造成本非常高,远监督或弱监督方式构造出来的数据质量问题会导致天花板很低,人工精标数据生产成本特别高,所以在前期版本,尝试去引入外部数据来做一阶段抽取范式的学习,再迁移到自有数据上做二阶段的精标和微调,适配具体场景,如图8所示
MRC模型测的优化:
- 答案支撑片段假定:如上图8所示,对于Query+Paragraph+Answer三元组数据,将Para本身分成三部分:第一部分即答案片段本身;第二部分在答案周边的一定窗口内定义为支撑片段;在答案窗口的远端,将其定义为非支撑片段;MRC本身就是在学习文本对答案的支撑程度,远端的文本对它的支撑会比较弱
- 增强方式,以下列举的三种增强方式,让模型学习到上下文语义的支撑性以及答案本身的类别及类型信息,而不是答案本身的文本信息;除此之外, 还会对一些错误样本进行主动学习,以及边界样本增强,一些相近query的增强,最终也取得了比较好的效果
- 把答案片段的实体切换成同类型的实体,仍然当成一个正样本,这样虽然置换了答案,但是它上下文的支撑没有变,它的类型也没有变
- 把支撑片段去掉,换成其他的相近片段,变成一个负样本
- 把非支撑片段替换成其他的相近的一些文字表达,当做正样本
3.5、答案融合与排序
MRC侧本身的拒识在负样本比例很大的情况下效果很弱,故对于整个系统的拒识,大部分都有后置rank部分来承担,此环节可以拿到答案支撑片段的数量,支信号的强度,从而拿到每个答案在多文档下的支撑度,且最后的环节做拒识,对准确率的提升也是直接能折射到业务侧,效果的折算更加直接
每一个Doc都会切分成多个Paragraph,每个Paragraph会抽出多个答案,在这些答案之间,先按照答案的文本做第一步的聚合,变成一个答案外加多个支撑para的答案组;基于这样的答案组,采集各类特征:
- ①baseweight类的特征,比如字表征的一些特征,紧密度特征、termweight加权特征等
- ② MRC直出的一些特征,如NaProb、Top1AnswerProb等
- ③一些聚合类特征,如答案数量,答案重叠度特征等
- ④语义匹配类特征,如QT相关性和QP相关性等
基于上述特征融合成最终打分,做rank取best的同时,通过阈值做最后阶段的拒识处理,如图9所示。
4、美团智能问答技术中的DocQA路线
该方案出自此文,其中描述“从非结构化文档中提答案的方法即DocQA”。MRC模型以问题和文档为输入,通过阅读文档内容预测问题的答案。根据需要预测的答案形式不同,阅读理解任务可以分为填空式 ( Cloze-style )、多项选择式 ( Multi-choice )、片段提取式 ( Span-extraction ) 和自由文本 ( Free-form )。在实际问答系统中最常使用的是片段提取式阅读理解 ( MRC ),该任务需要从文档中提取连续的一段文字作为答案。
DocQA借助机器阅读理解 ( MRC ) 技术,从非结构化文档中抽取片段回答用户问题。在问答场景中,当用户输入问题后,美团场景下的问答系统首先采用信息检索方式从商户详情或诸多UGC评论中查找到相关文档,再利用MRC模型从文档中摘取能够确切回答问题的一段文本。
4.1、MRC模型
深度神经网络结构较早的应用到机器阅读理解任务,代表性的包括Bi-DAF、R-NET、QANet、BERT等。这些模型均采用多层循环神经网络或Transformer加注意力机制等方式来解决问题和文档的上下文向量表示,最后通过边界预测来获取答案片段的起始和结束位置。方案选择表现最好的BERT模型进行相应任务的建模,将问题和文档作为输入,预测在文档中的起始位置和结束位置,将最大可能的起始位置和结束位置之间的片段抽取出来,作为答案。
问答系统的预测流程步骤如下,图n则展示整个过程:
- 文档检索与选择 ( Retriever ):根据Query关键字检索景点等商户下的相关详情和UGC评论,根据相关性排序,筛选出相关的评论或详情信息的TopN篇文档用于提取候选答案
- 候选答案提取 ( Reader ):利用MRC模型在每个相关评论上提取一段文字作为候选答案,同时判断当前评论是否有答案,预测有答案和无答案的概率;图10中HA score是预测有答案的概率,NA score是预测的无答案的概率
- 答案排序 ( Ranker ):根据候选答案的预测得分排序。这样能够同时处理多篇相关评论,比较并选择最优答案,同时根据无答案概率和阈值判断是否拒绝回答,避免无答案时错误回答
- 无答案判断:在实际使用中还会面临召回文档无答案问题,需要在答案提取的同时加入无答案判断任务。具体做法是联合训练,将BERT模型的[CLS]位置的向量表示经过额外的全连接层和二分类Softmax,得到无答案概率 ( NA Score ),根据无答案概率 ( NA Score ) 和人为设定的阈值判断是否需要拒绝回答。
为了解决用户的输入问句很可能属于“是否类问题”,在之前的任务上再加上一个使用所有的序列token的隐状态判断是/否的二分类问题,最后的模型结构如图11所示,其中用句首[CLS]token的隐状态计算NA score,用剩下全部的token的隐状态判断是否问题,对段落中的token预测答案的开始和结束位置。此外,还要注意“尽量选择完整的数据构造数据集”、“答案的时效性”等问题。
4.2、多文档MRC任务
针对当前应用从多个文档中查找一个与问题最相关的答案,促使该团队尝试多文档MRC模型,即直接对多文档进行阅读理解的建模,从而选择最优的一个作为最终答案。在上图左边结构中,我们将多篇文档作为输入,每篇文档都预测它的起始和结束位置,然后通过文档排序任务将多文档的相关性进行加权,对每个片段的得分进行排序。右边表格是模型在公开数据集DuReader上的验证结果,通过比较单文档模型、多文档联合训练以及在多文档联合训练基础上增加排序任务加权,Rouge-L和Bleu-4值都有大幅提升,当前我们的模型在DuReader Leaderboard上排名第一。
5、总结
本笔记的主要内容是从三篇发布的文章中提取的如何构建DocQA系统的技术路线(三篇文章在对应章节可直接跳转),通过总结发现,虽然每种方法均有其独有的实现细节,但整体路线基本一致,如注意query的分类、“是否问题”的区分、答案的时效性以及进行拒识等注意事项。本笔记内容较多,难免存在问题,读者如果发现错误或者有疑问可留言交流学习。本笔记主要目的是总结现有的QDA路径,方便后续学习和借鉴,如果本笔记内容涉及侵权,请联系本人,会及时删除。