科技改变生活 · 科技引领未来
编辑导语:随着科技的进步和普及,AI 产品逐渐走进了大众的视野,从手机语音助手到各类智能音箱,AI 技术不仅方便了我们的生活,还逐渐改变了我们的习惯。本文作者在做了20+个AI多轮对话项目后,为我们总结了这篇文章。
在AI走进大众视野的这几年,我们或多或少的都会接触到一些AI的产品,你去咨询天猫客服,一开始肯定是个机器人接待你的;你接到一个电话问你是否需要买保险、办信用卡或贷款,可能对方就是一个机器人;当然最常见的就是智能音箱。
以天猫精灵为例:
看起来很不错的样子,但是如果用户接着说“帮我换成新裤子的《没有理想的人不悲伤》”。
不好意思,这时天猫精灵是不会响应你的。因为天猫精灵在上一轮回复完用户的话之后,就结束了对话。想要再次跟她对话,必须喊“天猫精灵”再次唤醒后,才能继续对话。
以上这种每次只能进行一轮对话的模式,我们称之为“单轮对话”。其实目前大多数机器人都是单轮对话的模式。比如说闲聊:
这里可能你又会问了,这不是连续的对话吗,怎么会是单轮呢?
是的,因为这些对话,每一轮之间都是相互独立,上下文之间没有关联关系,我们暂时称之为单轮对话。与单轮对话相对的概念是多轮对话。
举例:
是的,这就是多轮对话,也是本文主要讨论的内容。如果说NLP是AI界皇冠上的明珠,那么多轮对话就是NLP界皇冠上的明珠。由此可见多轮的话的江湖地位。
由上面例子,跟单轮对话的对比,引出了对多轮对话的定义。
定义:根据上下文内容,进行连续的,以达到解决某一类特定任务为目的的对话。
这里有3点:
多轮对话跟机器人的关系图:
通常来说,一个全能型的对话机器人是由很多个类型的机器人组成的,比如说闲聊机器人、任务机器人、问答机器人。而一个任务机器人内又可以包含多个多轮。
那怎么来实现多轮对话呢?市面上各大厂家的做法是开发一个用于构建多轮对话的平台。有了这样的平台,你就可以构建出你想要的对话流程。
多轮比较擅长处理的两类经典任务:
如果把多轮对话比作一辆汽车的话,那多轮对话平台就是一个组装车间,底层的各类AI工具,就相当于汽车的零部件,因此我们可以在对轮对话平台内,用各种的工具,来组装出你想要的对话逻辑。
这里你可能想说,这个哪里智能了,不就是我们实现定义好的流程吗?是的,它确实并没有你想象中的那么智能,没有你想象中的那样通过大量的数据就能自己学习出一个流程,也没你想象中的那样机器可以自己生成新的答复话术。
但是它确实能解决很多工业上的问题,特别是一些比较固定的流程,比如说:
这些固化的流程完全可以用机器人来完成,大大减少人力成本。相比于人,机器人可以一天24小时,同一时间多线路给多个人拨打电话。
1)进入多轮对话任务的条件
比如识别到有订票的意图,则进入到订机票的多轮对话任务中;也可以通过关键字、指令等方式进入到多轮对话任务中。
2)机器人的应答话术
即用户的每一个动作(query),机器人应该用什么话术去应答。
目前任务类型的对话通常话术都是预设的,基本不会是生成式的。因为任务性对话容错率很低,宁可答不上,也不能答错。生成式的应答话术,更多是在闲聊机器人中,因为闲聊容错率相对比较高。
3)流程流转条件的设置(if)
4)满足条件执行动作的设置(then)
条件设置和动作设置是整个流程的核心思想,整个对话流程都是按:如果条件是什么…那么执行什么动作…的格式设置。
5)退出多轮对话任务的条件
最后,这个对话肯定是不能永远继续下去的,需要设置结束对话的条件,比如说常见的有以下几种情况:
按另外一个维度,可以把多轮对话分为流程和解析工具。
1)流程–就是设定的流转规则,如是什么,那就做什么
(如下图,如果是肯定回复那就跳转到A节点,如果是否定回复就跳转到B节点)这一块跟AI没有什么关系。
2)解析工具–理解用户说的话是什么
(如上图,如果用户说“我是他妈妈”,机器人怎么知道这是属于否定回复,这就是解析工具要做的事情),也是整个多轮对话的核心。
解析工具主要分类两大类:信息收集、文本分类。
1)信息收集
收集信息的方式主要有两种:对话里收集、对话外收集。
2)文本分类
对话中的文本分类,通常又分为两大类:有较完整的句子结构类文本、超短文本。
除了是否有句子结构外,两类型的文本分类解析工具的应用场景也不一样。有句子结构类文本解析工具,是全局的应用。比如说“我要转人工服务”,可以做出一个意图,不管在流程的哪个节点,用户表达了这样的意图,都可以识别。
超短文本类解析工具,是局部应用的,是强依赖上线文的。比如说用户单独说一句“不是的”,如果没有上下文,是没有意义的。
机器问“请问您是深户吗”,用户可以回复“不是的”;
机器问“请问您是深圳高校学生吗”,用户可以回答“不是的”;
因此同样“不是的”,在不同的地方表达的意思是不一样的,只有联系上文,才能确定明确的含义。
解析工具直接决定了多轮对话平台能力的上限,而决定解析工具能力又可以分为两层:基础技术层、产品层。
1)例子1
问在哪里出发后,我们往往会调用一个地址解析器来解用户接下来说的话,用户回复“深圳明天会下雨吗”,这时会抽到地址【深圳】,那机器人就理解为出发地是【深圳】了。
解析器确实没有问题,解出了地址【深圳】,但是解出的地址是不是符合上文需要填充的槽位,这时机器人就无能为力了,因为解析器只管解析,不管业务。
2)例子2
问是几月份,我们往往会在这个时候调用一个时间解析器来解用户接着说的话,用户只回复“8”,这时时间解析器解不出结果,因为时间解析器只能解“8月”、“8号”等等这个带单位的时间。纯说一个数字,机器人就懵掉了。
从上面两个例子就可以看出,解析工具跟实际应用场景的隔阂,导致了运用起来不够灵活,主要矛盾点体现在:
举例:
还是以上面例子为例,首先来了解几个概念:
ok,了解了上面的概念之后,我们再回过来看这个例子。
用户说了:深圳明天会下雨吗?
会有两个解析工具解到结果,假设地址解析工具得到的信心分是90分,意图解析工具解到的【查天气】意图的信心分也是90,但是由于地址解析工具属于主流程,优先级高于查天气意图,因此机器人最后选择的是前者。因此机器人的动作是把【深圳】当作了出发地填入槽位。
因此,从这里可以看到有两个问题:
这里先理清一对概念:
举例:
机器人的话术已经被事先死死的设定了,问完问题1,就问问题2。没有根据用户的话做出一些反馈,就会显得很生硬。
假设能这样:
这样不但能对用户的回答做出响应,还根据用户前面说的话来调整问题2的问法。这就是非生成式回答无法达到的效果,这也是机器人比较死板的原因。
举例:
还记得她吗,在采访中她说“我已经用了洪荒之力了”。如果你只看文字,你能理解她里面所表达的是满意的情绪吗?
正常人与人的对话,一般会根据语调、文字、表情、动作等维度,组合起来理解对话所表达的内容。但是目前大多数的多轮对话平台都是只以【文字】单一维度来做解析处理,即使很多平台都亮出了自己在ASR环节的情绪理解有多么强大,但真正跟多轮平台运用起来是隔离开的,训练数据只是转译成文本的形式训练,而不是直接拿语音去训练。
不同语气的“呵呵”,表达的意思是不一样,有的是开心,有的是讽刺。如果丢失了语调的维度,那解析的结果肯定是会失真的。
在以用户体验为王的时代,如果你操作一个软件或APP,你还要看它的说明书,甚至看了说明书还不会操作,那你肯定会疯掉。
没错,多轮对话操作平台就是一个看了说明说还不会用平台,通常需要经常专业的培训才会使用,因此是有很高的使用门槛的,而且逻辑能力不好人,还真做不来。
除了操作门槛高,后续的优化也不灵活。不是说像我们想象中的那么简单,加点数据,标注下就能解决的。比如说机器人询问:你是马先生吗?
你一开始想到的用户可能的回答是两类:肯定回复(是的、我是)、否定回复(不是、打错了)。但是上线后,你会发现还有很多类型的回复:中性回复【怎么啦、你说】、式有关系人【我是他老婆、我是他儿子】、反问【你是谁呀、是机器人吧你】
每增加一个分类,就要重新在流程图里增加分支,从新设定规则等等,并非直接加点数据重新训练就能解决问题了。
前面大篇幅讨论了,目前多轮对话平台的核心是解析工具,因此我觉得未来的优化方向也是在解析工具上面,比如说:
目前的做法是对话流程、对话分支是由人工搭建的,这种方式对数据的利用率是非常低的。只是根据对话记录,人为整理出对话流程,而对话之间的上下文关系是不参与到模型训练的。机器人不会随着人机对话量的增加而变得更加聪明。
未来的优化方向一定是最大化的利用数据,比如说通过给机器输入大量的对话记录,机器能够学习出对话之间的逻辑关系,然后自己能学习出一个对话流程。
最后,用一句话总结下目前的多轮对话平台:在解决固定化流程的问题上,确实能降低人力成本,但是对话比较死板,要想做到向人与人之间的自然交流,还有很长的路要走。
AI人,一起加油吧!
本文由 @Jimmy 原创发布于人人都是产品经理。未经许可,禁止转载。
题图来自Unsplash,基于CC0协议。