【NLP-ChatBot】搜索引擎的最终形态之问答系统(FAQ)详述
本篇介绍聊天机器人中出现的比较早的一种:问答系统。问答系统跟检索技术很相似,基本的功能就是,用户可以向系统咨询信息,系统通过“检索”,向用户返回精准、有效的信息。所以,常常有人说,问答系统是搜索引擎的最终形态。
作者&编辑 | 小Dream哥
1 什么是问答系统
我们之前介绍过,按照应用场景的不同,聊天机器人可以分为问答系统,对话系统以及闲聊机器人三类。今天我们就来详细讲一讲其中的问答系统。
问答系统是基于用户的问题,给定一个回答,不涉及到多轮对话。通常用于智能搜索,智能家居中的家电控制等场景。问答系统往往不需要调用业务能力,只需要完成对用户问题的匹配及回答。
我们之前介绍过,问答系统的任务其实就是,对用户的输入进行相似度或者相关性计算,然后在相应的FAQ库里,寻找该用户输入对应的答案,并返回给用户。
2 问答系统(QA)中的语料库
通常,一个问答系统,都是针对某一个领域的。例如,一个淘宝卖家的问答系统,针对的是买家常问的商品类型和价格信息问题作出回答。
因此,要构建一个问答系统第一步就是整理FAQ库。一个FAQ库应该如下的内容:
1.标准问。标准问是问答系统设计者设计的标准问题,例如,“***商品的价格是多少?”。标准问的个数,决定了问答系统的规模,通常由业务专家给定。
2.相似问。一个标准问通常会对应多个相似问,与标准问表达相同的意思,但往往会不那么规范,较口语化,相似问通常要求覆盖面越广越好。例如,“****商品多少钱呀?”。相似问早期由业务专家拟定,数据师扩写,后期会不断修缮、规整和增加。
3.答案。一个标准问对应一个答案,返回给用户。由业务专家拟定。
FAQ库的质量,对于一个问答系统非常的重要,但是FAQ库的建立和维护往往都是一件极其费时费人力的事情。当一个FAQ库规模变大时,相似问之间的界限开始变的迷糊,会给算法带来非常大的挑战;另一方面,当FAQ库规模很大时,后期的维护也变得非常的困难。例如,当系统出现bad case,数据师很难判断bad case出现的原因,无法判断是哪条标准问对应的相似问加错了,从而很难修改。
对于一个问答系统而言,高质量FAQ库需要建立的时候就异常用心,通常需要业务专家和算法工程师通力合作;在使用时也需要倍加用心的维护,这时,需要培养多位既了解算法特性,又熟悉业务场景的数据师。这大概是目前生产中大部分问答系统采用维护方案了。
3 问答系统Q-A的匹配方式
在问答系统中,模型算法的任务其实就根据用户输入的问题匹配到相应的答案。这看起来是个简单的问题,实际上不然。
一方面,一个标准问,用户可能的问法有很多,很多时候都无法预料,需要不断的完善;另一方面,FAQ库的规模通常很大,标问数目可以达到数万,相似问的数据可能就更多了。这么大数目的预料,长度不一,算法难度很大。
模型的训练过程,其实就是让模型能够学习到问题-答案(Q-A)对之间的联系,或者Query集的特征。如下图所示,是QA中匹配用户query的模式。
由此可知,目前QA系统的实现,主要有以下三种方式:
1.计算用户输入Query和Question的相似度。通过计算用户输入Query与FAQ语料集中Question之间的相似度,选出相似度最高的Question,再通过Q-A map找到相应的答案返回给用户。
2.计算用户输入Query和Answer的之间的相关性。通过计算用户输入Query与FAQ语料集中Answer之间的相关度,选出相关度最高的Answer,返回给用户。
3.结合用户输入Query和Answer的之间的相关性以及用户输入Query和Question的相似度。通过结合相关性和相似度,选出最匹配的Answer,返回给用户。
4 问答系统中匹配的算法
由上节可知,问答系统中的匹配可以归结为query与FAQ库中标问和相似问的相似度计算与query与FAQ库中答案的相关性计算。总的来说,目前相似度或相关性计算有下面的几种方式。
1)规则匹配
也许有读者会觉得很惊讶,都9012了,还有人用规则匹配来做机器人?其实不必惊讶,目前,很多机器人都有规则匹配的部分,它可控,高效、易于实现。
我这里介绍一种规则匹配的方式,也有人称为句式法。所谓句式法,就是针对FAQ库中的标问和相似问进行分词、提炼出大量的概念,并将上述概念组合,构成大量的句式,句式再进行组合形成标问。例如,标问“华为mate30现在的价格是多少?”,拆出来“华为mate30”是cellphone概念,“价格是多少”是askMoney概念,“现在”是time概念,那么“华为mate30现在的价格是多少?”就是cellphone+askMoney+time。用户输入"华为mate30现在卖多少钱?"进行分词,可以得到相同的句式和概念组合,就能够命中“华为mate30现在的价格是多少?”这个相似问了。
2)深度学习语义匹配
语义匹配笔者之前有介绍相关的代表性论文,感兴趣的同学可以仔细看看,非常有好处:
语义匹配的技术,从早期的DSSM,利用词袋模型,计算句之间的相似度;到后面利用LSTM-DSSM来捕捉长时间序列的语义信息;再到现在的基于BERT的语义相似度计算与匹配。本质上,其实都是提取句子的语义特征,再通过数学运算计算相似度。
5 KBQA介绍
Knowledge Based Question&Answer(KBQA),是一种基于知识体系的问答系统,现在知识库更多的是指知识图谱了。
KBQA回答用户问题的方式通常有如下两个步骤组成:
1.利用NLU模块进行语义理解和解析,包括意图识别,实体识别,实体关系识别,实体匹配等。
2.利用知识图谱进行查询、推理得出答案
搭建KBQA中最重要最关键的一步就在于知识图谱的搭建。知识图谱对于绝大部分NLP任务都有极大的加成,个人认为是当前最有价值的NLP方向。
总结
搭建一个问答系统是非常耗费时间和人力的事情,不管是传统的QA,还是近来的KBQA。对传统的QA,FAQ库的建立和维护都异常费事;对于KBQA,知识图谱的搭建,就是一个难度巨大的工程。
近期我们会在知识星球实现问答系统,具体实现和优化,感兴趣扫描下面的二维码了解。