这一章我们来看一下问答型助手中的架构和设计,什么是问答型助手呢?就是主要指知识问答型,用来回复用户的问题,而不是用来操作设备,比如智能客服。
问答型助手类型
问答型助手一般有IRQA、KBQA(又叫KGQA)、MRCQA。
- IRQA:即基于检索的问答,即在问答库中检索用户问题进行回复,这要求存在和用户问题匹配的FQA对,FQA对可以是人工生成或者经过人工审核过的。适用于能够被FQA中Q匹配的问题,优点是回答的覆盖率较高(在FQA对比较全的情况下),即使对于FQA库中不包含的问题,也可以给出一个语义最相近的回答。但是缺点在于需要做专门模型来对FQA库过滤和排序,才可以找到最相近的QA对。
- KBQA:基于知识图谱的问答,知识图谱如下图:
当知识图谱中存在和用户问题相匹配的内容时,就可以用KBQA来做,比较适合回答一些需要经过一定KB推理才可以回答的问题。但是缺点在于KB的构建成本较高。 - MRCQA:即基于阅读理解的问答,当问题询问的答案在已知文本中出现过,并且是文本中连续出现的片段时,就可以用MRCQA来做,优点是文本比较容易获取,比如百度文库、维基百科等都是优质内容来源,当用户询问的问题是其中的知识时,可以使用MRCQA来寻找答案。但是这个需要大量训练数据来训练阅读理解模型。
不同的QA类型各有优劣,在一个问答型助手中,往往是其组合体。下面我们来看一下一个问答型助手的整体架构。
问答型助手整体架构
一般业务中落地的问答型助手,会融合IRQA、KBQA、MRCQA为一体,如下图:
来按照顺序看一下,干预层和QU层这里不多解释,前面的章节有讲到其作用。
场景分类模块会将用户query分类,分类为特定领域问答、通用问答、非问答。特定领域问答指我们专门搭建过的问答库,问答库中均为指定领域内的内容,比如手机相关领域、汽车相关领域、星座相关领域等,其答案质量会比较高,专业性强。通用问答指比较泛的问答库,其里面的内容没有经过特意整理,可能是从各个地方收集汇总到的问答对。非问答顾名思义,即用户并非询问助手问题,可能是让助手执行某个操作,也可能是和助手进行闲聊,这都不是问答型助手需要处理的内容,需要给出不支持的回复。
命中了特定领域问答或者通过问答后,则进入QA部分,分为KBQA、IRQA、MRCQA。
KBQA需要在知识图谱中检索答案,因此需要用到图数据库来存储知识图谱内容,目前用到较多的时neo4j,它是一个高性能的,NOSQL图形数据库,它将结构化数据存储在网络上而不是表中,可以使用类似SQL语句来进行检索。所以这里的关键就在于如何基于用户query得到查询SQL语句进行图检索。一般可以有两种方式:基于模板的语义解析与基于复述的语义解析。
基于模板的语义解析,即预先设定一些查询模板,比如:属性查询模板、关系查询模板、最值查询模板等。对于用户query,通过分类匹配到对应的查询模板,然后抽取query中的实体,填充到模板中,生成查询实例。这种方式基于子图结构查询,查找到的答案准确率较高,但是实体、关系识别部分的误差会导致查询模板匹配的召回率不高。
基于复述的语义解析,则是预先生成标准问法集,每个标准问答均对应一个查询实例。对于用户query,经过粗筛(比如ES检索),精排(learning to rank),得到语义最相近的标准问法,进而生成查询实例。这种方式基于相似问题匹配查询模板,召回率较高,但是需要构造大量的候选问题,匹配的准确率不高。
IRQA需要在FQA库中查询问题和答案,一般是对于用户query,经过粗筛、精排得到语义最相近的标准问题后(一般为top_n),针对这top_n再使用语义匹配模型对问题和答案进行QA相关度匹配,找到和用户问题最相关的答案。
IRQA和KBQA都需要预先构建KB库或者FQA库,这里需要大量的人工标注和处理的工作,相比而言,MRCQA则可以从相对原始的资历内容中检索答案。一般方式为对于已有的资历进行索引分类,对于用于query,通过语义匹配、分类等方式划定目标资料范围(比如某几篇文章),然后通过MRC模型在文章中检索答案。
通过上述方式得到用户query的answer后,再通过NLG模块生成回复,就可以返回给用户了。关于IRQA、KBQA、MRCQA的具体实现,以及FQA、KB的构建部分,并非本章的主要内容,这里就不再展开讲了~