如何开发“智能助理”平台

2020-04-20 06:24林琳
计算机与网络 2020年2期
关键词:意图节点模型

林琳

一个合格的智能助理能够帮你预约开会时间,处理日常办公需求,还能打电话提醒你还信用卡,作为用户或者消费者,我们已经越来越习惯对话机器人提供的各色服务。但对于企业来讲,搭建提供这些服务的对话机器人是一件门槛和成本都很高的事情。阿里巴巴达摩院小蜜Conversational AI团队的高级算法专家李永彬享了小蜜智能对话开发平台。围绕平台来源、设计理念、核心技术、业务落地四大维度讲述了如何赋能各行各业开发自己的对话机器人。

平台由来

一个非常典型的任务型对话,它满足2个条件,第一,有一个明确的目标;第二,通过多轮对话交互来达成这个目标。像这样的任务型对话在整个办公行业里面,除了约会议以外还有查考勤、请假、定会议室或者日程安排等。

如果我们把视野放大一点到电商行业,就会涉及到开发票、催发货、查物流、改地址和收快递等,也会涉及到很多这样的任务型对话场景。视野再放大到电信行业或者整个运营商的行业,会有查话费、查流量、买套餐、报故障或者是进行密码更改服务等,也会有大量的这种任务型对话场景。如果我们再放大一步去看的话,像政务、金融、教育、文娱、健康和旅游等,在各行各业的各种场景里面我们都会发现这种任务型对话,它是一种刚需,是一种普遍性存在。

所有这些场景落地到小蜜家族的时候,是通过三大小蜜来承载:阿里小蜜、店小蜜和云小蜜。我们不可能给每一个行业的每一个场景去定制一个对话流程,所以就沿用了阿里巴巴一贯做平台的思路,这也是我们整个智能对话开发平台的由来。这款产品在内部的名字叫对话工厂(Dialog Studio)。

以上主要是给大家介绍我们为什么要做智能对话开发平台,总结起来就是我们目前面临的业务,面临的场景太宽泛了,不可能铺那么多人去把所有的场景都定制化,所以我们需要有一个平台,让开发者进来开发各行各业的各种场景对话。

设计理念

再看第二部分,对话工厂的一些核心设计理念。整个设计理念,我觉得概括起来就是“一个中心,三个原则”。一个中心就是以对话为中心,这句话大家可能觉得有点莫名其妙,你做对话的,为何还要强调以对话为中心呢?

这是有来源的,因为在过去几年全世界范围的技术实践以及直到今天很多巨头的对话平台里面,我们能看到的基本还是以意图为中心的设计模式,它把意图平铺在这里,比如你想完成音乐领域的一些事情,可是你看到的其实是一堆平铺的意图列表,完全看不出对话在哪里。

在这次对话工厂的设计中彻底把它扭转回来,对话就是要以对话为中心,你在我们的产品界面里面看到的不再是一个个孤立的意图,而是关联在一起的、有业务逻辑关系的对话流程。以意图为中心的设计中,你看到的其实是一个局部视角,就只能实现一些简单的任务,比如控制1个灯,讲个笑话,或者查个天气,如果你想实现1个复杂的任务,比如开1张发票,或者去10086开通一个套餐,它其实是较难实现,很难维护的。我们把整个理念转换一下,回到以对话为中心以后,就会看到全局视野,可以去做复杂的任务,可以去做无限的场景。

整个对话工厂它是一个平台,要做一个平台就会遇到很多挑战。

第1个挑战就是用户使用门槛越低越好;第2个挑战是要面对各行各业的各种场景,就要求能做到灵活定制;第3个挑战是上线以后所有的用户肯定都希望你的机器人,你的对话系统能够越用越好,而不是停留在某一个水平就不动了。这就是我们平台所面临的三大挑战。

为了应对这3个挑战,我们提出了在整个平台的设计以及实现过程中始终要遵循3个原则。

第1个原则是冷启动要快,其实就是要让用户的使用门槛低一点;第2个原则是要有灵活定制的能力,只有这样才能满足各行各业的各种场景需求;第3个是要有鲁棒进化的能力,就是模型上线以后,随着时间的变化,随着各种数据的不断回流,模型效果要不断提升。

这3个原则里面,冷启动这一块,其实就是要把用户用到的各种能力和各种数据都尽量变成一种预置能力,简单来说就是平台方做得越多,用户就做得越少;第二块关于灵活定制,就要求把整个对话平台的基础元素进行高度抽象,抽象的越好就意味着平台的适应能力越好,就像是经典力学只要3条定律就够了;第3块就是鲁棒进化,这一块就是要在模型和算法上做深度,语言理解的模型、对话管理的模型、数据闭环和主动学习,在这些方面能够做出深度来。

以上说的都是一些理念和原则,接下来给大家介绍一下在实现过程中具体是怎么做的。

核心技术

因为我们做的是一个平台,涉及到的技术非常广,从算法到工程到前端到交互所有的技术都会涉及到。摘取里面算法的核心部分来给大家做一个介绍。

对话工厂首先是用来做对话的,人机对话有2个主体,一个是人,一个是机器,人有人的逻辑,人的逻辑使用什么来表达呢?到今天為止主要还是通过语言,所以我们需要有一个语言理解的服务来承载这一块;机器有机器的逻辑,机器的逻辑到今天为止还是通过代码来表达的,所以我们需要一个函数计算的服务;在人和机器对话的过程中,这种对话过程需要有效的管理,所以我们需要一个对话管理模块。整个对话工厂最核心的3个模块就是语言理解、对话管理和函数计算。

1.语言理解。

举一个具体的例子,比如说我要开发票,这是一个意图,如果去采样十万条这个意图的用户说法作为样本,把这些说法做一个频率统计,可能排在第一位的就是三个字“开发票”,它可能出现了两万次,另外排在第二位可能是“开张发票”,它可能出现了八千次,这些都是一些高频的说法,还有一些说法说的很长,比如“昨天我在你们商铺买了一条红色的裙子,你帮我开个发票呗”,这种带着前因后果的句式,在整个说法里面是比较长尾的,可能只出现了一次或两次。

我们统计完以后,整个意图的说法多样性分布符合幂律分布。这种特征可以让我们在技术上进行有针对性的设计,首先针对这种高频的部分,可以上一些规则,比如上下文无关文法,可以比较好的覆盖这一块,但是基于规则的方法,大家也知道,规则是没有泛化能力的,所以这时候要上一个匹配模型,计算一个相似度来辅助规则,这2块结合在一起就可以把我们高频确定性的部分解决得比较好;对于长尾的多样性这部分,基本到今天为止还是用有监督的分类模型,去收集或者去标注很多数据,把这一块做好;在规则和分类模型之间,又做了一部分工作,就是迁移学习模型,为什么要引入这个模型呢?

在冷启动阶段,用户在录入样本的时候,不会录入太多,可能录入十几条几十条就已经很多了,这个时候按照二八原则的话,它的效果可能也就是70 %多,不可能再高了。但对于用户的期望来说,如果想要上线,想要很好地满足用户需求,其实是需要模型效果在90 %以上,如果想要达到这个效果,就需要复杂的模型,需要标注大量数据。这样其实是存在缺口的,所以我们引入迁移学习模型。

具体来说,我们把胶囊网络引进来和few-shot learning结合在一起,提出了一个网络结构叫Induction Network,就是归纳网络。整个网络结构有3层:一层是编码层;第二层是归纳层;第三层是交互层。

第一层负责将每一个类的每一个样本进行编码,编码成一个向量;第二层是最核心的一层,也就是归纳层,这里面利用胶囊网络的一些方法,把同一类的多个向量归纳成一个向量;然后第三层交互层把用户的话和每个类的归纳向量进行关系计算,输出他们的相似性打分。如果我们想要一个分类结果就输出一个独热码,如果不想要独热码,就输出一个关系的关联分数,这是整个归纳网络的网络结构。

这个网络结构提出来以后,在学术圈里面关于few-shot learning的数据集上,我们以比较大的提升幅度做到了趋于最高期望值的效果,目前是业界领先的,同时我们将整个网络结构上线到了我们的产品里面。

2.对话管理。

如果想要让平台有足够的适应性的话,那么它的抽象能力一定要好。对话管理是做什么的?对话管理就是管理对话的,那么对话是什么呢?对话的最小单位就是一轮,一轮又分为两部分,一个叫对话输入,一个叫对话输出。在输入和输出中间,有一个对话处理的过程,就像2个人互相交流一样,你在答之前是有一个思考过程的,如果你不思考就回答,那你的答案就没有质量,所以就会有一个中间的对话处理过程。

我们把对话抽象到这种程度以后,整个平台就3个节点:触发节点、函数节点和回复节点。

触发节点是和用户的对话输入对应的,函数节点是和对话处理对应的,回复节点是和对话输出对应的。有了这层抽象以后,无论是什么行业的什么场景,什么样的对话流程,都可以通过这3个节点用连线的方法把业务流画出来。

举2个例子,第一个场景是查天气,很简单,先来一个触发节点,把天气流程触发起来,中间有2个函数节点,一个是调中央气象台的接口,把结果拿过来,另一个是对结果进行一次解析和封装,以一个用户可读的形式通过回复节点回复给用户。这里面增加了一个填槽节点,就是在任务型对话里面,任务需要收集用户的信息,比如要查天气,就需要问时间是哪一天,地点是哪里,这就叫做填槽。因为常用、普遍,符合冷启动里面做预置的思想,所以通过3个基础节点,把它搭建成填槽模板,需要填槽的时候,从页面上拖一个填槽节点出来就可以了。

另一个复杂的场景,这是在线教育里面的一个外呼场景,在上课之前半小时,机器人就会主动给用户打电话,指导软件下载,指导怎么登陆,登陆进去以后怎么进入教室,所有的这些流程都可以通过机器人进行引导。

通过这2个例子可以看到,无论是简单还是复杂的场景,通过这3种抽象节点的连线都可以实现。有时候我们开玩笑说,这种连线就叫“一生二,二生三,三生万千对话”。

讲了抽象以后,再看一下具体的对话管理技术。从实现上来说和语言理解是一模一样的,因为很多东西的分布其实遵循着共同规律,区别在于把意图换成了对话。

比如像查天气,如果采集十万个查天气的样本,对这些用户的说法进行频率统计的话,大概就是一个曲线,用2步能够完成:先填槽一个时间,再填槽一个地点,然后返回一个结果,通过这种流程来完成的,可能有2万次;中间可能会引入一些问A答B的情况,这样的B可能有各种各样的,这就跑到长尾上来了,这样整个对话其实也遵循幂律分布。

对于高频确定的部分,可以用状态机进行解决,但状态机同样面临一个问题,它没有很好的容错能力,当问A答B的时候,机器不知道怎么处理。在这种情况下,需要引入类人能力,对状态机的能力进行补充,状态机加上类人能力以后,基本上可以高频对话比较好地解决。对于长尾对话,目前整个学术界或者工业界都是一个难题,比较好的解决方式就是上线以后引入在线交互学习,不断地与用户在对话过程中学习对话。在状态机和在线交互学习之间其实是有缺口的,因为状态机自己没有学习能力,所以需要引入增强学习。

先看一下类人能力。我们把人说的话大概可以分為3种:第一种就是用户说话清晰明了只有一个意思,这种其实对机器来说是可理解的;第二种机器不知道用户在说什么,也就是不可理解的;还有一种就是用户表达的意思可以理解,但是有歧义,有可能包含着2~3个意图,就是不确定的。确定性的状态机其实是可以很好地捕捉和描述意图的,类人能力主要关注拒识的和不确定性的。

对于拒识,还是在线英语的这个例子,机器人打来电话,问现在方不方便调试设备,从设计的角度来说希望用户回答方便或者不方便就可以了,但是如果这个用户回答了一句比较个性化的话,比如,“呃,我刚扫完地,过会儿可能有人要来”,语言理解模块就很难捕捉到这是什么语义,这时候需要引入一个个性化的拒识,比如说,“您好,不好意思,刚才没听明白,请问您现在是否方便调试,如果您不方便,我过会儿再给您打过来”,这个就是对话的兜底,是对不可理解的处理。

第二个看一下澄清,用户说的一句话里,如果模糊不清怎么办?我們通过大量的数据分析发现这种模糊不清主要出现在2种情况下:一种是用户把多个意图杂糅在一段话里来表达;第二种是用户在表达一个意图之前做了很长的铺垫,对于这2种长句子现在的语言理解给出的是意图概率分布,我们把这个概率分布放到对话管理模块以后,就需要让用户进行一轮澄清。比如举个移动领域的例子,明细这句话理解有三种意图,到底是想问花费明细,还是套餐的事情,还是想问合约的低保,把这3个问题抛给用户进行澄清就可以了。

从技术上来说是怎么实现的呢,开发者负责把对话用流程清晰描述出来,然后像问题澄清能力其实是我们系统的一种内置能力,什么时候澄清是通过下端2个引擎的能力来决定的,第一块是错误检测,它用来检测用户当前说的这句话是否需要触发澄清,一旦它觉得要触发澄清,就会交给下一个模块,究竟用什么样的方式澄清以及怎么生成澄清的话术,这是目前整个智能澄清方面要做的工作。

再看一下增强学习方面的工作。在对话管理模型里面,分成2个经典模块:一个是神经信念跟踪器,用来做对话状态追踪;另一个是策略网络,用来做行为决策。在整个框架下,要去训练这个网络的时候,有2种训练方式:一种是端到端的去训练,用增强学习去训练,但这种方式一般收敛速度会比较慢,训练出的结果也不好;另外一种方式是先分别做预训练,这个时候用监督学习训练就好了,不用增强学习训练,训练完以后再用增强学习对监督学习预训练的模型进行调优就可以了。

无论是端到端的一步训练还是先预训练再调优,只要涉及增强学习这块,都需要有一个外部环境,所以在我们架构里引入了模拟器的概念,就是用户模拟器。模拟器主要分为三大块:第一个是用户模型,用来模拟人的行为的;第二个是误差模型,模拟完人的行为以后经过误差模型引入一个错误扰动,用误差模型产出的只是一个概率为1的东西,它对网络训练不够好,误差模型会对这个结果进行扰动并给他引进几个其他的结果,并且把概率分布进行重新计算,这样训练出的模型在扩展能力或者泛化能力上会更好些;第三个模块是激励模型,用来提供激励值。这是我们现在在整个增强学习对话管理这块的工作。

函数计算是什么?还是举一个例子,比如说,10086用户说要查一下话费,10086那边的机器人就会回复一句是发短信还是播放语音,表面看来就是简单的一入一出,其实在这背后要经过多轮的服务查询,才能完成。因为当要查话费的时候,先要经过函数计算查一下现在是哪一天,如果是下账期也就是每个月的最后一天是不能查话费的。如果可以查话费的话,先看一下用户是否存在话费,如果存在第三步调用服务看是否停机,因为停机的话只能语音播报不能接收短信。所以在简单的一入一出的对话背后,是一个复杂流程的,这些流程现在都是在机器端用代码来实现的。函数计算的引入,使对话工厂可以去处理复杂的任务。

业务应用

最后看一下对话工厂的业务应用情况。例如我们在浙江上线的114移车,当有市民举报违规停车挡路后,就会自动打电话让他移车。第二个是在金融领域里面关于贷款催收的例子。在刚刚过去的双十一,对话工厂在整个电商里面也有大量应用,主要是在店小蜜和阿里小蜜里面。

店小蜜主要是一些开发票、催发货和改地址这样的流程。例如开发票,用户可能会先说一个开发票,进来以后要进行复杂的流程,一种是在说的时候其实他已经把它的订单号送进来了:另一种是没有说订单号,这时就需要去后台系统查订单号,查出来以后弹一个订单选择器选择订单。其次问是个人发票还是公司发票。然后会问是普通发票还是增值税发票,如果是普通发票接着往下走,如果是增值税发票需要获取企业增值税的税号,最后汇总到一个节点,调用后台开发票的系统,把发票开出来。

阿里小蜜主要是负责阿里巴巴集团内部各个BU的业务,手机淘宝是一个最大的业务,进入手机淘宝以后,进入“我的”里面有一个客服小蜜,就是阿里小蜜。我们也在优酷上线了优酷小蜜,星巴克是属于新零售的一个最大的尝试点,还有很多其他的场景。

在钉钉上,通过智能工作助理,对话工厂为千万企业提供智能考勤、智能人事等对话服务。

最后是整体的落地情况。目前整个对话工厂在阿里巴巴经济体内部各业务(如淘宝、优酷和盒马等)、淘宝天猫上的商家、钉钉千万量级的企业、公有云企业、私有云重点行业(政务行业、运营商行业、金融行业等)和国际化(东南亚新加坡、印尼、越南、泰国、菲律宾和马来西亚等国家地区)等业务中开始大规模应用,赋能各行各业开发者自主构建对话机器人。

猜你喜欢
意图节点模型
自制空间站模型
基于移动汇聚节点和分簇的改进节能路由算法
自然教育《小蚂蚁的生日会》教案
CAE软件操作小百科(48)
基于点权的混合K-shell关键节点识别方法
模型小览(二)
圆周运动与解题模型
不打自招
离散型随机变量分布列的两法则和三模型
不打自招