一、检索型机器人FAQ-Bot
在客服处理的问题中70%都是简单的问答业务,只要找到QA知识库中与用户当前问句语义最相近的标准问句,取出答案给用户就可以了。FAQ-Bot就是处理这类问题的。在没有使用深度学习算法之前,通常采用检索+NLP技术处理。
1.适用场景
适用于解答非用户个性化的问题,返回的是静态知识,无需调用接口返回答案。
2.问答系统处理流程
基本的问答流程如下:
1)用户提出问题:“忘记密码怎么办”
2)本体识别:用户问题分析后,识别出本体为“密码忘记”
3)计算FAQ相似度:问题与知识库里的标准问题根据相似度计算后召回,例如:
Q1: “登录不上了?”,相似度0.56;
Q2: “登录密码忘记了,找回密码的方式有哪些?”, 相似度0.92 。
4)候选答案排序:Q2-Q1
5)若阀值设定为0.9,Q2达到阀值,返回Q2问题的答案。如果有多个答案都到达阀值,选相似度最高的标准问题的答案返回给用户。如果都没有达到阀值的,但达到推荐阀值的答案有几个的,显示推荐的答案。
6)本体继承:把“忘记密码”继承至下文
7)继续提问:用户问“怎么找回密码”,话题继承。
3.知识库的设计
FAQ-Bot是基于知识库匹配算法设计的,所以首先需要搭建本体知识库,通过新增和维护机器人知识库,来提升机器人问答的准确率和用户体验。
1)它的层级结构是:类目—> 词条, 这里的词条就可以理解为本体,它是关键词的模板。所以当用户问“如何登录”时,识别出来的本体/词条就是“登录”。
2)每个词条需要维护的信息有:同义词、关联问题、相似问题、分类等。其中分类主要用于知识点的管理,当某一分类下数据量较大时,分类还可以作为算法聚类的一个标记,认为分类下的问题相关度高,在检索匹配时作为一个计算因子。
3)本体识别,可看作一个文本分类问题。
QA语料添加与维护,可以分为三个阶段:
1)机器人上线前,处理已有QA。(故障决策分析)
若业务上线前,客户已经有一定的原始用户语料积累,比如通过线上客服渠道或者论坛等积累的问答对,或者有大量用户咨询的问题。可以使用聚类工具自动聚类后,再人工进行调整。知识库应该提供“批量导入”的功能(车险服务平台的问答场景基本都有原始的线上数据,可以通过爬取这些数据后做清洗,提炼出高频问题,然后进行优先处理)
2)冷启动阶段,人工添加+NLP手段扩充语料。
前期没有标注数据的,需要人工手动标注数据。但因为问题和候选答案包含的词通常都很少,此时可以利用同义词、复述句对问题和候选答案进行扩展和改写。
功能上:在编辑界面支持“增加同义词”、“新增相似问句”的功能
3)机器人上线后,人工标注迭代。
系统上线后,对于回流数据(没有答案的、机器推荐而用户没有点击的、机器回答错误的、用户不满意的问题等)进行诊断,系统将这些语料先做聚类,然后由标注人员作统一处理。
具体处理方式可以有:答案纠错、标注到已有问题的相似问题里、新增知识/词条、标注为负训练样本、优化词条和问题标题/关键词等。
从产品层面上,应该提供知识库的“badcase标注”功能,以及提供测试模拟窗口功能(测试demo)
4.语义相似度计算
通常根据训练方式不同,从前期无标注数据到有一定量标注数据,语义相似度的算法也向深度学习迭代:
1)无监督学习:冷启动阶段没有足够标注数据时,通常使用无监督学习算法。将用户问句和标准问题作降维得到向量表示,用余弦相似度等方法计算出句子间语义相似度(值越靠近1说明越相似)
2)监督学习:机器人上线后经过用户问题和重新标注过程,积累了一定的数据后,通常可使用深度学习算法。如基于RNN的语言模型。用RNN训练出来的语言模型,采用其隐层状态作为词向量,将词向量代入其他需要word embedding的问答匹配方法中,经验证,可以取得比原方法更优秀的表现。
5.阀值
1)关注阀值的可配置性:从产品层面输入阀值后,改变相对应的输出结果。如果阀值配得过高,会影响召回率;太低又会影响准确率。要根据业务场景做权衡。
2)设置问题推荐的阀值。处理逻辑是:当结果达到直出阀值,直接给出答案; 未达到直出阀值,但达到推荐阀值的,给出几个推荐回答; 未达到推荐阀值的,给出无答案回复。无答案回复可以进入配置后台进行配置。
推荐阀值是基于机器阅读理解模型训练的,目前设计是在知识库的词条中进行维护,添加段落,模型会自动列出将关联问题和答案。
6.信息咨询型多轮对话
简单问答中除了单轮对话外,也多轮对话的情况。这类咨询型多轮与任务型多轮有所区分。以下类型的多轮对话情况在FAQ-Bot中处理
1)情况1:条件挖掘。用户提问“如何登录?” ,机器人会返回“登录”的条件相关的提问“请问是希望通过下面哪个渠道登录”,用户作出回答后,机器人返回答案。这个对话虽然是多轮,但不涉及用户的个性化信息,还是用语义匹配来实现。
2)情况2:话题继承。如用户提问“怎样才能删除保单”,话题“删除保单”被记录下来了,若用户问“怎么删除”,机器人应该识别到是同一话题下的关联问题,并返回相应答案。