问答型机器人(简称FAQ问答系统)目前被大量使用在电商、金融、银行、旅游等行业中,本文就以旅游行业为例,详细介绍如何设计并实现一个基于结构化知识库的问答系统,数据来源:东方航空官网http://www.ceair.com(会员常见问题为例)。
系统介绍
用户诉求
通过最短的对话轮次(一问一答),获得精准、直接的答案以及更好的完成任务,来满足用户的需求。
实现目标
系统根据用户输入问题,理解用户的问题后,通过标签分类里的问题中匹配相似问句,并将答案反馈给用户,以此来为用户提供服务。
系统功能
在特定的垂直业务领域下,问答系统可以回答用户所提出的一系列问题,其主要功能包括问句预处理、问句理解、问句相识度匹配和标签分类。
1)问句预处理:将用户问句进行分词和词性标注
2)问句理解:提取问句中的关键词
3)问句相似度匹配:将问句与每个标签分类下的问题进行相似度计算后召回
4)标签分类:为问句添加标签,在标签分类下的问题匹配相似问题,以此来提升机器理解能力和匹配精度,同时也可以对问答对进行分类化管理,可以按业务分类、问题所属业务部门等自己需要的维度来管理问答对,提高问答对的管理效率。标签分类根据实际业务场景需求进行分类,切记标注标签分类的时候需要保持数据的一致性
产品结构
用户问题分类
首先我们需要对问答系统需要支撑的业务进行分析,然后把用户将会问到的问题进行归类整理,并设计符合实际业务场景需求的分类。
问答型机器人适用场景
适用于回答非用户个性化的问题(即一问一答),返回的是静态知识,无需调用外部数据接口或调用知识图谱返回答案。
问答型机器人处理流程
问答系统流程如下:
1)用户提问:怎么样才能注册东方万里行会员
2)问句预处理:将问句进行分词和词性标注(词法分析)
分词:怎么样/ 才能 / 注册 / 东方万里行 / 会员
词性标注:代词 名词动词名词名词
注:在对问句进行分词处理时,可以加入领域词库进行同义词扩展,如“上海”扩展为“沪”、“申城”;“东方航空”扩展为“东航”,需要结合关键词词库进行识别
3)问句理解:提取问句中的关键词
关键词提取:怎么样 注册 东方万里行会员
注:关键词可以是名词、动词、助词、代词,是描述某一类特征的词,关键词的颗粒度可以很粗(例如“我要申请”、“帮我申请”、“申请”),也可以有一定限度的泛化能力(例如:如何办理东方万里行会员中的“如何”就可以与“怎样”、“怎么样”)的代词一起作为关键词,并在计算句子相似度方面只考虑这些关键词。对于特定句某个名词、代词、动词、形容词或副词不一定是该句中的主语、宾语或谓语成分,但相对于句中所有的词构成的词序列而言,关键词序列却具有一定的句法结构信息表达能力,至少可以了解句子中的哪些词在组成句子框架结构方面是比较重要的。在此基础上进行相似度计算,比一般基于词的方法更准确。
4)问句相似度计算:将用户问句与每个标签分类下的问题进行相似度计算后召回,同时返回相似度最高的标准问题和所属标签分类。
注:在这里主要讲解的是产品设计思路,告知读者在设计问答型机器人过程中会用到哪些NLP相关技术,而不会详解技术实现过程。
问句相似度计算方法1:基于多重信息的方法(关键词加权的语句相似度计算),结合了语法和语义信息的改进句子相似度计算方法。首先计算两个句子的语法相似度(词形、句长),借鉴基于词信息和句法分析的方法,综合考虑词的相似度和句子结构(长度)信息,结合同义词词林进行句子语义的相似度计算。最后,考虑关键词、句长、语义多重信息的一种融合算法,值得注意的一点是该方法需结合词库一起使用,其目的是提升分词、关键词提取、词性权重标注准确率。
注:在计算语法相似度的时候需要注意的是关键词出现的频次应该采用大规模语料进行统计,而在限定领域问答系统中,可以用简化的方法,根据经验,在实践过程中发现名词和动词在句子中起着非常重要的作用,并且名词比动词承载着更多的信息量,一个句子的中心信息基本上都是围绕着名词和动词来展开的,所以在进行计算时也特意加大了名词和动词的重要程度,将句子的重心落在名词和动词上面,经查阅论文资料根据实际经验,将句子相似度计算中权值分别是名词类权重(W)为0.3;动词类权重(W)为 0.3;形容词、代词、副词类权重(W)为 0.2。
问句相似度计算方法2:基于向量空间模型的方法。该方法把问句用向量来表示,计算2个句子的相似度就是计算2个向量的距离。本文使用word2vec对句子进行向量化表示,以作为 LSTM (即长短记忆神经网络)神经网络的输入实现问句相似度计算。而基于神经网络的词向量模型可以从大规模的文本数据中自动学习数据的本质信息,得到低维实数向量,很好地解决了传统的词向量模型因为词语独立性假设带来的语义建模困难和维度爆炸问题。
用户问句:
Q:怎么样注册东方万里行会员
FAQ库中的句子:
R1:如何办理万里行会员(标签分类:会员办理)
R2:如何获得会员卡(标签分类:领取会员卡)
R3:东方万里行会员申请电话是多少(标签分类:咨询电话)
R4:东方万里行会员应该怎样申请(标签分类:会员办理)
返回结果:(使用word2vec计算得出)
R1:如何办理万里行会员
0.8045011574330355
R2:如何获得会员卡
0.6247308971541259
R3:东方万里行会员申请电话是多少
0.7638216222999513
R4:东方万里行会员应该怎样申请
0.9042637469903886
以上案例从人的主观判断可以看出问句Q实际上和R1,R4是同一个问题,假设阈值设置0.9,而R4的相似度值超过阈值0.9,与人的主观判断完全一致,同时也返回R4的标签分类“会员办理”。
阈值控制:经过问题相似度计算后,通过阈值控制来返回1个、多个问题或者返回其它的信息给用户。
设计思路:初始化阈值分三个匹配等级>= 0.9为精准匹配,则返回1个问题;>= 0.3为模糊匹配,则返回多个问题;>=0为没有匹配到(在系统中用户可以根据业务实际情况调整阈值配置)
返回结果:
>= 0.9为精准匹配
R1:如何办理万里行会员(标签分类:会员办理)
>= 0.3为模糊匹配
R1:如何办理万里行会员(标签分类:会员办理)
R2:如何获得会员卡(标签分类:领取会员卡)
R3:东方万里行会员申请电话是多少(标签分类:咨询电话)
>=0为没有匹配到
A:我现在还不会,正在学习中......
阈值控制流程图:
5)答案:假设精准匹配,则将R1问题的答案返回给用户
整体产品结构图
以下是问答系统整体产品结构图,主要围绕核心模块有问答管理、模型训练、阈值设置、关键词管理、未知问题管理。则其余模块不会做详细讲解。
问答管理模块
问答型知识构建是基于问答对中的问题匹配算法来设计的,所以首先需要搭建问答对,而问答对是由标准问题和相似问题以及答案组成,通过新增相似问题来提升问答机器人的准确率。
而标签分类能有效的对问答对进行分类化管理,可以按业务分类、问题所属业务部门等自己需要的维度来管理问答对,提高问答对的管理效率。标签分类的用途是在特定标签分类里的问题中匹配相似问题,其目的是找到用户问题的所属标签分类。
问答对是由标准问题、相似问题、答案组成,而标准问题与答案的组合称之为问答对。问答对支持一对一、一对多、多对一和多对多;当问题中包含多个答案时,答案随机呈现。相似问题是标准问题的泛化,其表达的意思与标准问题是一样的,其目的是匹配用户问题最相似的问题,并反馈给用户答案,问题样本越多匹配的准确率也就越高。
模型训练模块
是将编辑好的问答对或新增相似问题加入到算法中进行训练并生成模型,模型需要生效后才可使用。
阈值设置模块
经过标准问题相似度计算后,通过阈值控制来返回1个、多个问题或者返回其它的信息给用户。
关键词管理模块
关键词在问答管理模块中已经有详细的描述关键词对整个问答管理模块来说其重要性,以及关键词的使用和发挥的作用。
未知问题管理模块
未知问题是用户与机器人在对话过程中未识别的问题,用户可以对未知问题进行标注并添加至问题样本中通过模型进行训练。
结束语
问答型机器人能否实现智能化,最直接的体现就是能否回答人类自然语言的问题,本文通过详细介绍问答型机器人产品设计思路,以及深入研究问答型机器人处理流程。问答型机器人最核心的就是问句相似度计算,以及用户自定义词库拓展同义词来提高匹配准确率,还有就是未知问题的处理并加入模型进行训练。
本文还介绍了问句相似度计算的2种方法,一个方法是关键词加权的语句相似度计算;另一个方法是word2vec结合LSTM神经网络的问句相似度计算。试验证明,word2vec来计算问句匹配的准确率明显要好。
至此,因本人一直从事NLP领域的智能问答系统产品设计工作,所以想把一些经验分享给大家,相互学习和交流,后续还会持续更新基于知识图谱的问答系统和多轮对话的产品设计。