本篇文章首先梳理了对话系统中的对话管理的原理,包括中控系统的分发、各类bot处理Query的逻辑、候选回复融合和排序的功能,其中也包含了垂直领域知识图谱的构建。最后从PM角度思考,为了提升bot的表现,对话决策如何制定和优化。
下图是阿里小蜜给出的典型的对话系统的框架:
这是一个具有一般性的对话系统框架,各模块用途是:ASR让机器听得见,NLU让机器听得懂,DM让机器对话交互流畅,NLG是让机器回复自然,而TTS是让机器说得出。
很多语音交互产品/对话机器人都连接了较多领域的服务/技能,比如小蜜客服机器人、美团语音助手、浦发信用卡APP语音助手、小雅音箱等均覆盖了较多场景。
对话管理,作为中控系统而存在,它是对话的决策者。对话管理作出决策需要依赖于不同的bot(也叫子机器人),也就是常说的“技能”,可以理解为对话系统提供的服务。比如阿里小蜜就有导购bot、售后bot、问答bot、闲聊bot等。这些子机器人通过DM进行管理。
从上图看,对话管理系统的主要工作有:
1)对于用户Query,根据对话系统每个bot的处理能力,分发给不同的bot进行处理。
2)聚合每个bot返回的相应回复,然后进行去重、融合/排序,得到最终回复。
下面将对DM系统的分发、融合/排序以及子bot的处理作一些自我理解。
正如前面所说,语音助手等对话机器人覆盖了较多的领域和场景,在解析用户Query的第一步是要去判断用户的意图,包括领域识别和意图检测。领域识别是将Query应用到对应垂类的知识上处理,而意图检测是根据用户问题的类别,如问答型、任务型等,分发给不同的bot进行处理。
领域识别可以看作是一个分类问题来处理,比如分类标签是“纸尿裤”、“高铁票”等。
我们知道机器学习实验主要包含了数据预处理、模型搭建(即选定算法)、模型训练(拿数据投喂给机器,让其找出最佳的模型)三个步骤。
1)数据&模型训练
从不同业务收集数据,作为训练数据。但因为这类数据可能存在两个问题,一是标签不准,比如用户在某个业务对话中提问其他领域的问题。二是领域重叠,某些问题在多个领域中出现。
所以需要经过人工筛选和标注才可以使用,但因为数据量太大了,全部采用人工显然工作量太大了。所以一般会使用主动学习方法来训练模型。以下是美团的训练模型(来源:美团对话理解技术及实践 )
模型的迭代步骤:
1)搜索业务数据,为每条业务数据打上业务标签
2)对数据进行模型训练
3)训练好的模型对样本进行预测
4)标注人员对预测样本进行标注,选出错误和难分开的样本
5)重复2-4
2)领域识别算法
常见的分类模型,比如:传统的学习方法有朴素贝叶斯、SVM、决策树等,深度学习方法有:基于CNN、RNN的TextCNN、LSTM,Fasttext、BERT等。至于选用哪种算法,除了准确率、召回率,还需要考虑运行速度、训练时间、内存占用等综合作选择。
3)在线使用
在实际应用时,存在以下两种情况。
领域分类后,要进行问题类型分类处理,比如用户Query“怎样才能使用刷脸转账”,用户是想要查询刷脸转账的条件,属于问答型bot处理的范畴。用户Query“我要给小明转账100元”,用户是希望APP能跳到转账页面完成转账业务,这个需要任务型bot来处理。
意图检测同样可看作分类问题,具体算法不再重述。
基于领域分类和意图检测的结果,对话管理系统可以对bot进行用户指令分发。可能一个用户问题会分发到多个bot处理,比如问答型的对话,可以分发给常见问题类FAQ bot、基于知识图谱的KBQA bot或者是文档/网页搜索的bot。
Bot根据不同的领域和场景进行划分,可以分为:任务型、问答型、闲聊型。不类型的bot负责各自的对话逻辑和对话状态的维护管理,而不同类型bot的对话管理也不太相同,以下分别对各类型bot的对话管理做说明。
任务型一般是为了完成特定场景下的任务。任务又可分为工具类的(如设闹钟)、内容类的(如播放音乐/故事)、服务类的(如出行规划、导航、订电影票等)。下图是任务型对话系统常见框架,包括了DST对话状态追踪和DP对话策略两个模块。
DST 对话状态追踪
对话状态是指什么呢,简单理解就是包含用户意图、槽值对的数据结构,如下图所示。
对话状态追踪就是根据领域、意图、槽值对、之前的状态、之前系统的动作来追踪当前的状态。
DST主要功能包含:
对于状态的维护,还是用例子作说明吧。比如办公场景的“休假申请”。
User:我想申请假期 --> 上一轮用户表述Utterance,状态S(t-1)
Bot:请问你想哪天开始休假? -->系统动作Act(t-1)
User:这个星期五。–>当前用户表述 Utterance,状态S(t)
Bot:好的,请问你想休几天?–>系统动作Act(t)
…
DST的输入是上一轮对话状态S(t-1)、上一轮系统动作Act(t-1)、当前用户表述Utterance,输出的是当前轮的对话状态S(t)
DP对话策略
经过DST模块追踪到最新状态后,DP的作用就是根据现在的状态选择最好的动作,以满足用户需求。比如用户要查询“今天深圳的天气”,这个状态下所有必填槽位已填入了,对话策略就会让系统调查询天气的API接口,返回结果给到用户。这样用户“查询天气”的意图就完成了。
1)系统动作
下面罗列了一些在任务型bot中常见的系统动作
2)对话策略
另外,在语音对话机器人中,比如外呼客服机器人、派送前沟通的机器人(菜鸟语音助手)等场景,还会有“听不清”、“拉回对话”、“用户长时间不说话”等对话策略,这类对话机器人通常会事先设定好对话主流程、异常处理子流程以及对应的话术,是由话术和流程驱动的机器人。通常步骤比较多,需要机器引导用户完成。
3)DP的算法
问答型bot在处理分发到的用户Query后,处理逻辑与任务型bot是完全不同的。
问答型bot在接收了用户的自然语言表达的Query,解析用户意图和进行问题预处理后,会获取相关知识,通过相关检索、知识库匹配和推理,最终形成自然语言表达的答案,返回给对话管理中控系统进行处理。
问答bot所依赖的知识包括:文本文档、问答对、知识图谱、结构化数据库,分布式表示模型等。根据依赖的知识类型和bot的构建方法的不同,问答型bot可以划分为以下几种:基于文档的问答 DBQA bot、基于问答对的问答(也称常见问题FAQ-Bot)、基于知识图谱的问答 KBQA bot,还有根据阅读理解技术实现的问答bot。
下面对几类问答bot作简单介绍
2.1 基于文档的DBQA bot
基于文档类似于传统的搜索引擎常用的方法,搜索引擎将用户Query转化成关键词,基于关键词在大规模非结构化的文档中,找到与用户意图最匹配的几个网页或者摘要展示给用户。比如下图圈中的A,就是传统的搜索。而右边的是基于知识图谱的结构化的搜索结果。
但是问答系统返回给用户的就不能是文档或网页了,而是一句话的答案。 下面是斯坦福的基于检索的IRQA问答系统。
检索系统包括两大部分:索引处理、查询处理
对用户查询,问答系统在检索到相关文档中的段落后,会根据答案类型,从段落中抽取出答案,得到候选答案集,然后经过排序后得到最优答案返回给用户。
DBQA Bot与阅读理解
问答系统还有根据“阅读理解”技术构建的,和基于文档的区别是,基于文档返回的是一句话答案。而阅读理解通常返回一个实体。比如下图是阿里小蜜在介绍阅读理解时的例子,例子中可以看到最终返回的答案“文一西路969号”、“1200”、“上海明华物业管理有限公司”等是一些地点、数字、机构名称等实体。
2.2 基于问答对的FAQ Bot
问答对是现在很多客服机器人都采用的知识库。核心的问题就是计算问题之间的语义相似度,即Q-Qmatch。而计算语义相似度的两个挑战是:
关于FAQ-bot的介绍,我在文章浅谈智能客服机器人的产品设计中,有整理过其使用的场景、问答系统处理流程、知识库的搭建,包含增强泛化能力的处理方法,此文不再重复。
小结
不管是基于文档的问答,还是基于问答对知识库的问答,它们对用户Query的处理逻辑,都可以抽象成以下几个主要模块:预处理、召回、排序。
1)预处理
2)召回:利用检索技术或Embedding等方式,召回若干个候选问题集。
3)排序:根据各种模型计算用户问题与候选问题集的相似度,根据分值返回最高的结果。计算相似度的算法也有多种,如:TF-IDF、BM25、Jaccard距离、编辑距离、BERT、DSSM等
2.3 基于知识图谱的KBQA Bot
把知识图谱KG加入到了问答系统,是为了给机器构建人类知识,从而更好地理解用户的需求,当用户查询时,可以返回更为精准、结构化、直接的结果。
同样在《浅谈智能客服机器人的产品设计》中,也提到过了此类bot。主要讲到了知识的表示方式(RDF三元组)、可处理的问题类型,产品经理应该关注的事项,以及提了KBQA bot的两个难点。
对于KG我作了进一步学习,以下关于“垂直领域知识图谱的构建”和“KBQA的核心问题Question2Query”的说明。
任务:领域知识图谱的构建
1)知识图谱生命周期
首先需要确定知识表示模型 ,然后根据数据来源,选择不同的知识获取的手段将导入知识(这个过程包含知识抽取)生成知识图谱,接着利用知识融合、知识推理等手段对知识图谱进行质量提升。最后是根据场景需求来设计不同的知识访问和呈现的方式( 这个过程就是知识的应用,比如本文讲到的问答交互场景的应用)。
由此图可知,产品经理/业务专家要重点关注两个阶段,一个是知识建模阶段,一个是知识应用阶段。
2)知识建模
知识图谱建模是建立知识图谱的“概念模式”的过程,类比于关系数据库中定义“表结构”。
在特定领域内,一般都会有固定的知识体系,或者说可以定义模式的数据。这种情况,可以采用自顶向下的方法来构建知识图谱,即先构建概念,然后向下细分概念,形成各种分类层级。然后再把实体添加到概念中。
关于概念/本体/类、实体、属性:
概念,也称“本体”或“类”,它是由一些具有共性的实体构成的集合。比如阿里和腾讯都是公司。这里“公司”是概念/类/本体、“阿里”、“腾讯”是“实体”。
公司这个“类”下面还有“子类”,比如上市公司、有限责任公司等子类。
“属性”分为两种:一种属性是描述实体之间的关系,称为“对象属性”; 另一种属性,它的属性值是一个具体的数值,称为“数据属性”。例如“美团收购了大众点评”,描述了主体“美团”和“大众点评”的关系。
根据上面的例子,建模类、子类、属性如下:
在建模的阶段,业务专家和PM也要参与,并关注概念划分的合理性,属性定义的方式,关系建模、属性建模都需要参与了解,还有一些复杂事件的知识表示。
3)不同类型数据的获取
上面所说的实体、关系和属性对应了知识图谱的节点和边,生成知识图谱需要先获取不同的数据来源,然后将从数据中将实体、关系、属性抽取出来。
根据数据来源不同,可划分为结构化数据、半结构化数据和非结构化数据三种。
结构化数据 :垂直领域中,知识往往来源于企业业务系统的关系数据库。这类知识就是结构化的数据。
id | name | age | gender |
---|---|---|---|
1 | jo1 | 18 | male |
2 | jo2 | 19 | female |
3 | jo3 | 20 | male |
半结构化数据:一般是指网页上的信息,或者百科类的信息。比如电商平台每个商品的详情页信息就包含了大量的半结构化数据,一般是XML或者JSON的格式。这类数据可以通过目标网站,或者相关渠道直接爬取。
jo1
18
female
非结构化数据:此类数据没有固定结构,比如纯文本类、文档、图片、音频等。
这类数据可以通过爬虫方式取得,如果是自己系统的用户数据,可以在日志数据库中获得。
4)知识抽取
i. 结构化数据,可以使用工具直接将关系数据映射为RDF数据。常用的开源D2R工具有D2RQ、D2R server、DB2striples等
ii. 半结构化数据,需要使用包装器来提取,包装器是根据数据目标源编写特定的程序。
iii. 非数据化数据,使用的是文本信息抽取方法。
知识抽取后,就是知识融合,主要做实体对齐和实体消歧; 然后对知识的加工,包含本体抽取、知识推理和人工质量评估。最终得到一个质量较好的知识图谱。
任务:查询构建
回到我们的问答交互场景,要使用知识图谱进行问答,需要理解用户的输入,目前常用的方法是基于语义解析的方法,即对用户Query进行语法分析,将Query转换成逻辑表达式,然后利用知识库的语义信息将逻辑表达式转换成知识库查询,最终通过查询知识库得到查询结果 。
用户Query–>查询子图–>逻辑表达式–>知识库查询语句–>结果回复
举个例子:用户Query:姚明的老婆出生地在哪里?
逻辑表达式:λx.配偶(姚明, y)∧出生地(y, x)
知识库查询SPARQL:
SELECT DISTINCT ?x
WHERE{
?y 出生地 ?x.
res: 姚明 配偶 ?y.
}
查询结果:上海
这几步中,最关键的是逻辑表达式的生成,而这是通过知识图谱子图得到的。所以KBQA的关键问题就是从用户问题到知识图谱最合理的映射,即找最优查询图。现在比较前沿的方法是基于深度学习做的。
基于知识图谱+检索模型
在问答交互场景,除了直接使用知识图谱进行查询外,还可以将知识图谱构建与检索模型相结合来进行核心匹配系统的设计,可以得到更优结果。
详情可看以下链接:
智能人机交互在电商领域的技术实践-阿里小蜜
基于知识图谱的寿险问答系统
聊天型bot属于开放域的问答,此类bot一般采用生成模型生成答案,主流的是seq2seq模型。每次对话都会基于对话的历史进行响应。
在售前导购的场景,需要用到推荐型bot来为用户作推荐,点击率、转化率是这类bot的一些主要考核指标。推荐型bot会进行用户的兴趣的匹配以及推荐内容的评分、排序和筛选,以便给生成更好的给用户推荐的内容。这里涉及bot如何与用户交互以明确用户的意图(具体购买的商品和属性要求),以及如何优化交互过程和策略控制的问题。
问题分发给各个Bot后,每个bot都生成的回复,然后将在策略中心完成去重、融合和重排序等过程,最终产生一个或一组最优解。
我们知道基于知识图谱的子机器人,是基于结构化的数据进行查询,能处理更精准的问题理解和答案查询,但这类数据是有限的。而基于检索的问答子机器人,可以从纯文本中抽取答案,领域中存在大量的文本领域知识。目前有将不同类型问答机器人混合的框架,比如Watson的DeepQA。下面是主要的几个步骤:
1)候选答案生成
同一个Qeury,可以从网络上搜索相关文档并抽取答案,也可以从知识图谱中直接查询答案,每个bot可能返回的是多个回复,其答案集合并后在对话管理系统聚合。
2)候选答案评分
对每个答案选取一些重要特征,并对各特征打分
3)答案融合及排序
首先把相同的答案去重,形成一个新的答案候选集。然后对答案候选集进行再排序,用分类器模型,如传统机器学习的LR、GBDT算法,或者LrR学习排序算法对每个候选答案计算置信度,并返回置信度最高的作为最终答案。
对话策略是对话的决策者,决定了用户的对话交互体验,也为用户需求匹配相应的技能,并按策略更好地满足用户需求。前面内容是关于DM技术的实现原理的梳理,以下是我站在PM角度对提升bot技能的一些思考。
对话系统,包含Siri这种手机语音助手或各种chatbot技能的对话体验。从用户Query到最终满足用户需求,整个产品框架可以拆分成两端,一端是用户角度的交互流程; 另一端是背后的解决方案(包含每个环节的策略)和资源支撑(包含数据、NLP能力等),这部分对于用户基本是不可见的,好比一个黑盒。所以要满足用户需求,我们应该关注这两部分的内容。
比如问答型bot的产品框架,如下图。
决策的效果如何,首先要搭建指标体系来做评估。以产品目标定义核心的业务指标,再细分到各个中间指标。
还是以问答型bot为例,从用户需求满足来评估效果,评价指标有:
从策略层面来评估,主要评价指标有:
性能指标:系统响应时间、故障率等
产品是为了解决用户问题,策略也不过是解决问题的一个手段。从“发现问题,找到问题根本原因,问题分类,然后提出解决方案,到开发评估,再到效果回归阶段评估效果”是一个产品循环的过程,如下图所示。这个同时也是解决问题的一般流程。
1)分析问题。分析用户的反馈(显式和隐式)、查看用户对话日志、对bad case的抽样分析,查看数据指标的绝对变化/相对变化等都是发现问题的方法。
2)提出解决方案。基于数据分析进行问题的定义、分类、影响度等总结后,需要提出解决的方案(即对应的新策略)以提升各类Bot的表现。
举个例子,比如在问答型bot,发现用户的提问机器人没有作出应答。在抽样分析对话session后,推理出主要原因:
3)跟进开发评估。提出解决方案后,RD完成策略开发,需要进行评估,评估指标主要有:
策略评估是一个多轮送评和评估的过程,当达到/接近目标时就可以上线。
4)上线&效果回归。上线可采取ABtest后,再全量上线。最后上线后进行效果回归,看之前设定的指标达成情况,如未达预期然后重新找出问题…并以此循环。
以上是本篇文章的全部内容。
《知识图谱:方法、实践与应用》王昊奋,漆桂林,陈华钧 编
《搜索引擎:信息检索实践》克罗夫特
《聊天机器人:入门、进阶与实战》 刘宇,崔燕红 等
《推荐系统实践》项亮
201902人工智能之知识图谱报告 by Aminer
阿里小蜜开放开台算法介绍