引言
编写目的
为了从整体上描述基于文档的限定领域对话式问答系统要实现的功能,使用户能够对本系统有一个全面正确的认识,同时给程序开发者一个关于系统的使用,系统的功能模块,以及系统的各种技术解决方案一个详细的说明。
背景
问答系统 (Question Answering System, QA) 是信息检索系统的一种高级形式,它能用准确、简洁的自然语言回答用户用自然语言提出的问题。其研究兴起的主要原因是人们对快速、准确地获取信息的需求。问答系统是目前人工智能和自然语言处理领域中一个倍受关注并具有广泛发展前景的研究方向。
不同的应用需要不同形式的问答系统,其所采用的语料和技术也不尽相同。从涉及的应用领域进行分类,可将问答系统分为限定域问答系统和开放域问答系统。
限定域问答系统是指系统所能处理的问题只限定于某个领域或者某个内容范围,比如只限定于医学、化学或者某企业的业务领域等。由于系统要解决的问题限定于某个领域或者范围,因此如果把系统所需要的全部领域知识都按照统一的方式表示成内部的结构化格式,则回答问题时就能比较容易地产生答案。
开放域问答系统不同于限定域问答系统,这类系统可回答的问题不限定于某个特定领域。在回答开放领域的问题时,需要一定的常识知识或者世界知识并具有语义词典。
按支持问答系统产生答案的文档库、知识库,以及实现的技术分类,可分为自然语言的数据库问答系统、对话式问答系统、阅读理解系统、基于常用问题集的问答系统、基于知识库的问答系统,以及基于大规模文档集的问答系统。
目前国内的大多数问答系统都是针对开放领域的对话式问答系统,在限定领域特别是基于文档的对话式问答系统很少,且功能均不够完善。本文设计了一种使用最先进的深度学习自然语言技术的基于文档的限定领域对话式问答系统设计说明。基本步骤包括处理文档数据、构造训练数据集、模型训练和优化、模型部署等,使用时输入用户需要查询的问题,系统可以自动匹配与问题最相关的段落,并由模型给出问题的答案。此外模型有完整的日志系统以及在线训练和离线训练模块。
概要设计
系统总体设计
系统的整体编程语言使用 Python 进行开发,使用的深度学习框架为 TensorFlow。基于机器阅读理解模型的问答流程如下图所示:
系统模块功能
文档数据识别和处理模块
常见的办公文档多数为 txt 文档,word 文档,excel 表格或者 pdf 文档。针对不同的文档需要设计不同的数据读取方式并进行读取后数据的存储。
模型训练数据的构建模块
SQuAD 示例:
内容:阿波罗计划于 1962 至 1972 年间进行,期间得到了同期的双子座计划(1962 年 - 1966 年)的支持。双子座计划为阿波罗计划成功必需的一些太空旅行技术做了铺垫。阿波罗计划使用土星系列火箭作为运载工具来发射飞船。这些火箭还被用于阿波罗应用计划,包括 1973 年到 1974 年间支持了三个载人飞行任务的空间站 Skylab,以及 1975 年和前苏联合作的联合地球轨道任务阿波罗联盟测试计划。
问题:哪一个空间站于 1973 到 1974 年间承载了三项载人飞行任务?
答案:Skylab 空间站
基于深度学习的阅读理解模型
YESNO 问题类型的处理方式
在第一阶段使用的是分类的方法,我后来考虑同样的问题可能在不同原文中可能是不同的回答,所以我就把 YESNO 作为原文进行训练。具体做法就是在原文后边拼接 YESNO 字符串,然后将之前的答案索引修改为 YESNO 对应的索引。这样在训练过程中就可以学到答案跟原文之间的关系,而不像之前只关注问题直接得出答案,实验证明这种方法确实能提高成绩,大概提高了 3 个百分点。2. 不能回答的问题的处理方式在 BERT 的源码中,对于不能回答的问题有一套处理方式,就是根据预测结果得出的 nbest 和答案为空的概率进行对比,如果答案为空的概率最高就把空作为答案。我使用与处理 YESNO 问题的方式去试了一下,就是将 NULL 拼接到原文后,将对应的答案索引改为 NULL 的索引,实验效果证明能提升, 但是只能提升百分之零点几,anyway,有点提升就用起来吧。