对话机器人作为近年来愈发普遍的产品,以各种各样的形态出现我们的生活中:电话客服、文本客服、超市里的导购机器人等;那这些机器人如何实现和我们人类的智能对话的呢?本文将用显浅易懂的文字讲述机器人的对话原理与产品设计要点。
在正式开始接受设计原理前,我们一下来回顾下生活中,常见的对话机器人包括哪些类型:
这种类型的对话机器人大多出现在app中或者网站上,以文字为主要的交互方式,旨在为顾客提供常见的问题解答与简单任务的处理(如退货,换货等);常见的有:
这种类型的对话机器人常见于银行与大型企业(如家电)的话务咨询上,以语音为交互方式,同样也是为了解答顾客的常见问题与处理简单任务(如查询余额、充值等);常见的有:
这种的对话机器人现阶段基本已经渗透到了每一台智能手机,进入大多数人的日常生活,旨在为用户提供一种语音交互的手段来提高操作的效率(如闹钟设置,日程提醒);常见的有:
这种类型的对话机器人主要用于以文本或者语音对话的形式帮助员工进行假期申请,事务提醒等日常工作事项,起到办公事项的整合(各种办公事项都可以通过工作助手对话来实现)与效率的提高;常见的有:
在这个场景下,对话机器人最大的价值在于问题的拦截,即100个顾客来咨询,最终需要人工客服解答的顾客只有10个——大大降低客服成本。
这种场景下,对话机器人最大的价值在于接待的及时性;想象下,淘宝里询问掌柜问题,若是掌柜隔了五分钟再回复,那基本就不会在这家店买东西了。因此,这类机器人在顾客到来的第一时间由机器人接待,同时机器人也在通知掌柜的抓紧上线,接管会话。
对于企业服务来说,这类机器人还会判断顾客的意向程度,针对高意向的顾客会引导留下联系方式,方便后续客户经理的跟进。
这种场景下的机器人,最大的价值在于以语音交互的方式提高用户操作效率。例如在晚上在床上准备睡了,忘了设闹钟,而手机在桌子上,这时候一句话就能完成闹钟设置想必是一个很爽的体验。
这类型最典型的代表就是文本智能客服,这类客服常见于各种app中,以文本的形式为用户排忧解惑。
下面我们来看下一个文本型智能客服的完整工作流程:
1)用户发送消息:用户以文本的形式输入自己的问题。
2)NLU:NLU单元收到用户的文本消息后,进行自然语言理解,识别用户的问题,输出识别结果
3)对话管理:对话管理单元收到NLU的识别结果后,找到该识别结果对应的回复内容,进而以文本的形式输出回复内容给到用户
在整个工作流程中,NLU作为核心环节之一,想必是许多朋友们希望能够了解的,那我们接下来就讲讲,在这一个环节里面,机器到底是如何理解人类的语言的。
如果用一句话来概括NLU的工作的话:根据用户的问题,在知识库中寻找对应的问题。
这里涉及了一个概念,知识库:所有用户常见问题的集合(包含同一个问题的多种问法与回答)。
这就好比一个行军打仗的将领,面临大敌的时候,拿出仙人给的锦囊,从锦囊里掏出一条退敌的妙计。知识库在这里就好比是锦囊,而挑选出锦囊中的妙计这一过程就好比NLU的工作。
2.1 基于统计学的自然语言理解
实际应用中,NLU常用的技术是基于统计学的自然语言理解,即:通俗的说就是把用户的问题经过简单处理后,和知识库中的所有问题进行相似度计算,找到相似度最高的问题,然后把该问题的答案返还给用户。
用一句话来概括就是:找相似。
而在这个过程中,又可以详细的拆分为以下几个环节:
2.2 其他NLU技术
1)基于模版标注的语言理解
基于模版标注的自然语言理解也是常用一种技术,人工标注知识库每个问题的最简表达、关键实体、同义词标注。这样做的最大好处就是识别的准确率高,因为系统通过标注数据,已经知道了知识库问题的最简表达,以及每个问题的关键词,以及同义词;进而利用这部分数据去解析用户的问题,往往能够得到更加准确的识别结果。但是,缺点也是同样明显,需要针对每一个问题的每一个文法进行标注,典型的有多少人工,就有多少智能的做法。
2)基于知识图谱的问答(KBQA)
另外的话,基于知识图谱的知识问答也逐渐走上舞台。通过知识图谱来对问题进行语义解析。例如姚明的老婆的国籍这样一个问题,知识图谱先找到姚明,然后找到姚明的老婆叶莉,最后找到叶莉的国籍中国。这项技术的准确率一般很高,但是能够覆盖多少问题,就要看这个知识图谱建设的好不好,够不够广;而知识图谱的搭建,本身就是有多少人工,有多少智能的工作。
讲了NLU之后,不得不讲的就是知识库了,顾名思义,就是【知识的宝库】,里面收集了所有希望机器人能够回答的问题,对应问题的N种文法(如价格这个问题:多少钱?怎么卖?价格怎样?),以及问题的对应答案。
构建一个知识库的步骤也很简单(简单,但不代表很快,它需要多次调整和补充):
除却问答型的机器人外,市面上常见的还有闲聊机器人,最典型的代表就是微软小冰:无聊了,寂寞了,都可以找小冰说说话,而小冰一般也能给出不错的对话内容。
要满足机器人的闲聊场景,做法和问答型机器人大同小异,就是加入一个闲聊的语料库,这个语料库一般都可以从网上找到,但语料的覆盖范围和提供者所从事的服务有很大的关系,例如阿里云小蜜的闲聊就满满的都是淘宝味,毕竟那些训练的语料大都来自于淘宝体系内用户和掌柜的聊天内容。
而一般的智能客服厂商,为了更好的衔接对话,也为了让用户有一个更好的对话体验,一般也会加入一定量级的闲聊语料库,但这个库一般却是不允许编辑的,里面涉及一些敏感词的管理,以及运营成本的考虑。
而这个闲聊语料库,厂商必定也是在服务客户的过程中,根据对话记录去不断丰富和完善的。
图片中是一个物业报修机器人的对话截图,一个用户通过和机器人的多轮对话,完成了问题的描述并成功报修。
类似的场景逐渐得到了越来越多的应用,例如海尔的家电安装预约已经实现了全量的机器人接待和预约,一方面大大的节省了企业的人力成本,另一方面也解决了及时响应消费者的问题。
在开始讲任务型对话机器人设计之前,我们先明确下任务型对话机器人的定义:
结合以上定义,我们就不难理解,完成一个任务型对话,需要进行以下三个关键点的设置:
意图,就是用户想要达到的目标。上图的示例讲的是一个早餐预定的例子。
对于机器人来说,我们得先告诉它,用户输入了哪些内容之后,即可认为用户想要达成的就是该意图。而这个设置,一般有以下几种常见的方法:
1)对话样本集
例如示例这里的意图是早餐预定,那么当用户输入:预定早餐、订一份早餐等语句的时候,即可认为用户想要达成的就是早餐预定这个意图。
而这个设置的基本原理和方法与知识库中的问题设置基本一样,就是把用户表达该意图时常用的对话样本进行收集和录入。后续用户只要表达了相近的输入后,系统就会按照该意图来执行对话。
2)关键词
这个很好理解,就是对用户表达某个意图时的关键词进行识别,只要用户的表达中含有这些关键词,系统就会按照该意图执行对话。例如订火车票这个意图,只要用户提及【订火车票】这个词时,即可让机器人进入订火车票这个意图的多轮对话。
3)句式模版
句式模版这种方法,其实就是把某个意图的语言表达进行规则化的抽象。例如订火车票这个意图,一般的表达就有:订一下从广州到长沙的火车票。像这种表达就可以抽象成这样的句式模版:【发起预定】+【出发城市】+【到大城市】+【票类】
词槽是多轮对话过程中将初步用户意图转化为明确用户指令所需要补全的信息。例如说,示例中的早餐预定,我们识别到了这个意图之后,还需要知道顾客想要吃什么,什么时候来拿——这两个关键信息就是机器人在执行这个意图前需要完成收集的。
而词槽设置一般包含以下几个关键环节:
1)词槽设置
词槽设置的核心在于明确执行该意图过程中,需要明晰哪些关键信息。例如示例的早餐预定,那【时间】和【吃什么】则是两个必须明确的信息。
当然,除了必须要明晰的信息外,我们也可以让机器人去记录一些非必要因素(例如是否加辣),如果用户有表达这个信息,机器人则会记录相关信息;若用户没有表达该信息,机器人也不回去追问。
2)词典
词典,即告诉机器人,那些关键信息都有哪些枚举值。例如示例的早餐预定,【吃什么】这个词槽的词典,就包含了:饺子、牛肉丸、萝卜糕等词。
而机器人只要能够完成这些词的识别,即可完成【吃什么】这个词槽的填写。
至于词典的设置,一般分为两部分:
3)澄清话术
既然一个意图中设置了若干的关键信息(词槽)需要用户填写,自然就会存在用户在表达意图过程中没有一次性表达清楚所有的关键信息,这时候机器人就需要针对一些必要的关键信息做追问,并根据用户的回答完成关键信息的识别和提取。
而这个追问的话术,正是这里的澄清话术,即我们告诉机器人关于某个具体的关键信息,机器人应该如何发问。且一般针对同一个关键信息,会设置多个澄清话术,为的是在追问用户同一个关键信息的时候,机器人能够用不同的化询问同一个信息,让用户能有更好的体验。
4、回复设置
当机器人完成用户意图的识别,且完成了关键信息的收集后,即可进行意图的执行。而意图的执行后,机器人需要给用户一个回复(总得告诉人家做得怎么样嘛),这个回复可以是一句话,也可以是一个操作的执行入口,又或者是意图执行之后的模版消息,也可是一个h5页面等等,这个要具体场景,具体而论,没有太多的限制。
当前市面上的机器人,更多的是综合型的对话机器人,即同一个机器人,挂载了问答知识库、闲聊语料库以及多个任务技能。只是每个机器人根据自身具体的服务场景,在知识问答、闲聊、任务对话三者上面有所倾向罢了。
也正是因为综合型对话机器人的出现,让我们现在的生活更加多彩,我们才可以在深夜十二点进行物业报修预约,才可以夜深人静的时候有个倾诉的对象,才可以在懒癌发作的时候通过一把声音控制家里的电器。
那是不是只要一个综合型对话机器人做到了以上的内容,就可以高枕无忧,和我们人类畅通对话了呢?显然不是的!上面这些内容如果形容为游戏中的核心装备的话,那要做好一个对话机器人,还需要针对不同的服务场景增加不同的辅助装备——这方面我们下回分解!