赞
踩
针对DeepQA方法进行解析,又称DocumentQA或DQA,往往会使用到MRC框架从文档或网页中提取query对应的答案;一般利用检索+机器阅读理解等技术,从开放文本库中提取出用户问题的答案
优点:
难点:
关键技术:
本路线来自于DataFunTalk公众号发布的一篇文章,文章链接:https://mp.weixin.qq.com/s/NeIUXLdyOK56BDpVCkl81A,将文章中公开的DocQA方法进行总结。路线有以下几个步骤:
语义检索本质就是计算用户输入的query与段落的相似度,或者语义相关性。可能存在以下问题:
为解决以上问题,做了如下优化:
一般对于实体短语类(短答案)抽取,会将问题和段落拼接到一起,用一个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化等问题,文章中均提出了一定的解决方法,感兴趣的读者可以跳转至文章阅读。
此方案出自此文章,DQA的数据来源非常简单,基于普通的网页文本就可以针对不同的query抽取处不同的答案,适配的场景也比较多,不止在搜索场景,一些语音交互场景以及商品客服场景等等都可以使用DQA进行内容提取。搜索场景下的DQA解决方法如图4所示
图4中展示了DQA的解决路径,具体为以下流程:
图5中展示了query理解中的一些问题和注意点,搜索里面25~30%是问答的query,还有70%+是非问题的query;对不适合DQA抽取query的拒识,以及一些必要的标签化是QU侧主要面临的问题,下面介绍下意图识别、时效性、分类标签这三部分的一些做法:
为了提高视图识别模型的能力,进行了以下优化方法:
上述说明的方法以及具体提高如下图6、图7所示
MRC模型侧的优化:
MRC样本的构造成本非常高,远监督或弱监督方式构造出来的数据质量问题会导致天花板很低,人工精标数据生产成本特别高,所以在前期版本,尝试去引入外部数据来做一阶段抽取范式的学习,再迁移到自有数据上做二阶段的精标和微调,适配具体场景,如图8所示
MRC模型测的优化:
MRC侧本身的拒识在负样本比例很大的情况下效果很弱,故对于整个系统的拒识,大部分都有后置rank部分来承担,此环节可以拿到答案支撑片段的数量,支信号的强度,从而拿到每个答案在多文档下的支撑度,且最后的环节做拒识,对准确率的提升也是直接能折射到业务侧,效果的折算更加直接
每一个Doc都会切分成多个Paragraph,每个Paragraph会抽出多个答案,在这些答案之间,先按照答案的文本做第一步的聚合,变成一个答案外加多个支撑para的答案组;基于这样的答案组,采集各类特征:
基于上述特征融合成最终打分,做rank取best的同时,通过阈值做最后阶段的拒识处理,如图9所示。
该方案出自此文,其中描述“从非结构化文档中提答案的方法即DocQA”。MRC模型以问题和文档为输入,通过阅读文档内容预测问题的答案。根据需要预测的答案形式不同,阅读理解任务可以分为填空式 ( Cloze-style )、多项选择式 ( Multi-choice )、片段提取式 ( Span-extraction ) 和自由文本 ( Free-form )。在实际问答系统中最常使用的是片段提取式阅读理解 ( MRC ),该任务需要从文档中提取连续的一段文字作为答案。
DocQA借助机器阅读理解 ( MRC ) 技术,从非结构化文档中抽取片段回答用户问题。在问答场景中,当用户输入问题后,美团场景下的问答系统首先采用信息检索方式从商户详情或诸多UGC评论中查找到相关文档,再利用MRC模型从文档中摘取能够确切回答问题的一段文本。
深度神经网络结构较早的应用到机器阅读理解任务,代表性的包括Bi-DAF、R-NET、QANet、BERT等。这些模型均采用多层循环神经网络或Transformer加注意力机制等方式来解决问题和文档的上下文向量表示,最后通过边界预测来获取答案片段的起始和结束位置。方案选择表现最好的BERT模型进行相应任务的建模,将问题和文档作为输入,预测在文档中的起始位置和结束位置,将最大可能的起始位置和结束位置之间的片段抽取出来,作为答案。
问答系统的预测流程步骤如下,图n则展示整个过程:
为了解决用户的输入问句很可能属于“是否类问题”,在之前的任务上再加上一个使用所有的序列token的隐状态判断是/否的二分类问题,最后的模型结构如图11所示,其中用句首[CLS]token的隐状态计算NA score,用剩下全部的token的隐状态判断是否问题,对段落中的token预测答案的开始和结束位置。此外,还要注意“尽量选择完整的数据构造数据集”、“答案的时效性”等问题。
针对当前应用从多个文档中查找一个与问题最相关的答案,促使该团队尝试多文档MRC模型,即直接对多文档进行阅读理解的建模,从而选择最优的一个作为最终答案。在上图左边结构中,我们将多篇文档作为输入,每篇文档都预测它的起始和结束位置,然后通过文档排序任务将多文档的相关性进行加权,对每个片段的得分进行排序。右边表格是模型在公开数据集DuReader上的验证结果,通过比较单文档模型、多文档联合训练以及在多文档联合训练基础上增加排序任务加权,Rouge-L和Bleu-4值都有大幅提升,当前我们的模型在DuReader Leaderboard上排名第一。
本笔记的主要内容是从三篇发布的文章中提取的如何构建DocQA系统的技术路线(三篇文章在对应章节可直接跳转),通过总结发现,虽然每种方法均有其独有的实现细节,但整体路线基本一致,如注意query的分类、“是否问题”的区分、答案的时效性以及进行拒识等注意事项。本笔记内容较多,难免存在问题,读者如果发现错误或者有疑问可留言交流学习。本笔记主要目的是总结现有的QDA路径,方便后续学习和借鉴,如果本笔记内容涉及侵权,请联系本人,会及时删除。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。