一个合格的智能助手,可以帮你预约会议,处理日常办公需求,电话提醒你信用卡还款。作为用户或消费者,我们已经越来越习惯于对话机器人提供的各种服务。但对于企业来说,打造一个提供这些服务的对话机器人是一件高门槛、高成本的事情。阿里巴巴达摩院小米对话AI团队资深算法专家李永斌(水德)为我们带来了一场分享——小米智能对话开发平台,重点从平台源头、设计理念、核心技术、业务四个维度进行分享如何赋能各行各业开发自己的对话机器人。平台的由来为什么需要平台?我认为最好从一个基于任务的对话的具体例子开始。在我们的日常工作中,一个非常频繁的场景就是要求开会。看看我们的内勤助理是怎么来的。实现约会约会:我说“帮我安排一个会议”,它会问“你是哪天开会?”,告诉它“后天下午3点”,然后它会问“你是谁?”你开会了吗?”啊?”,我就告诉它我要约的人。这时候它会在后台发起服务调用,因为它会去后台获取所有参会人员的日程,看看如果我提到的时间有的话。普通空闲时间,如果没有它会建议我几个时间段。由于我提到的时间段没有普通空闲时间,我改变了时间。我说“11点”clockinthemorning”,然后它会问,“你会持续多久”,我会告诉它“一个小时”,它会问“会议的主题是什么”,所以,我告诉它“让我们讨论一下下周的启动计划”,到此已经收集了所有的信息,最后会给我一个总结,让我确认是否要发送会议邀请。我回复确认后,就在后台会调用我们的邮件系统,发出整个会议邀请,这是一个很典型的任务型对话,它满足两个条件,第一,它有明确的目标;其次,它通过多轮对话互动来实现这一目标。在整个办公行业,像这样的任务型对话,除了约会之外,还有考勤、请假、预定会议室或排班等。如果我们再放大一点看电子商务行业,电子商务行业会涉及到开发票、派送、查物流、改地址、收快递等等,而且还会涉及到很多很多这样的事物。基于任务的对话场景;再把视野拉近,看看电信行业或者整个运营商行业,都会有查话费、查流量、买套餐、报错、改密码等服务,对话场景丰富这类任务。如果再往前看,我们会发现这种基于任务的对话存在于各个行业的各种场景中,比如政务、金融、教育、娱乐、健康、旅游等,这是一种刚需和一种普遍的存在。当这一切场景落地到我们小米大家庭的时候,都是由刚刚介绍的三大蜜:阿里小米、点小米、云小米承载的。我们不可能针对每个行业的每个场景都定制一个对话流程,所以我们沿用了阿里巴巴一贯的平台思维,这也是我们整个智能对话开发平台的由来。该产品在内部称为DialogStudio。以上主要是给大家介绍一下我们为什么要搭建一个智能对话开发平台。综上所述,就是我们目前面临的业务。我们面临的场景太广泛了。不可能传播这么多人来定制所有的场景,所以我们需要有一个平台让开发者进来,开发各行各业各种场景的对话。下面我们来看设计理念的第二部分,说说工厂的一些核心设计理念。我觉得整个设计理念可以概括为“一个中心,三个原则”。一个中心是以对话为中心的。你可能会觉得这句话有点莫名其妙。为什么你们在做对话的时候强调以对话为中心?这是有它的来源的,因为在过去的几年里,世界范围内的技术实践和直到今天,在很多巨头的对话平台中,我们能看到的基本上是一种以意图为中心的设计模式,在这里传播意图。比如你想在音乐领域完成一些事情,但是你看到的其实是一个设计模式。一堆平铺的意图列表,根本看不出对话在哪。我们在这个对话工厂的设计中完全反了过来。对话要以对话为中心。您在我们的产品界面中看到的不再是孤立的意图,而是相关的和有意义的。业务逻辑关系的对话过程。在以意图为中心的设计中,你所看到的实际上是局部透视,你只能实现一些简单的任务,比如控制灯、讲笑话或查看天气。如果要实现一个复杂的任务,比如开具发票,或者去10086开包,其实是比较难实现和维护的。我们把整个概念换一下,回到以对话为中心之后,我们会看到一个全局的视野,我们可以做复杂的任务和无限的场景。整个DialogueFactory刚才说它是一个平台,搭建一个平台有很多挑战。第一个挑战,对于用户来说,使用门槛越低越好;第二个挑战是要面对各行各业的各种场景,需要灵活定制;第三个挑战是,所有大多数用户肯定希望你的机器人和你的对话系统能随着你的使用而变得越来越好,而不是停留在某个水平不动。这是我们平台面临的三大挑战。为了应对这三个挑战,我们提出了在整个平台设计和实施过程中要遵循的三个原则。第一个原则是冷启动要快,其实就是降低用户使用的门槛;第二个原则是要有灵活定制的能力,只有这样才能满足各行各业各种场景的需求;三是要有稳健进化的能力,就是模型上线后,随着时间的变化,随着各种数据的不断回流,模型的效果要不断提升。在这三个原则中,冷启动其实就是把用户使用的各种能力和数据,尽可能的变成一个预设的能力。简单来说,平台做的越多,用户越多,你做的越少;第二部分是关于灵活定制,这需要我们高度抽象整个对话平台的基本元素。你的抽象越好,意味着你的平台的适应性越好,就像经典力学一样,只有三个定律就够了;第三部分是鲁棒进化。这部分是做深度模型和算法,比如语言理解模型,对话管理模型,数据闭环,主动学习,这些方面的深度开发。以上是一些概念和原理,接下来给大家介绍一下在实现过程中是怎么做的。核心技术说到技术,因为我们做的是一个平台,涉及的技术非常广泛。它是一个全栈技术,从算法到工程到前端到交互的所有技术都会涉及到。我将算法的核心部分提取出来给大家介绍一下。DialogueFactory首先用于对话。人机对话有两个主体,一个是人,一个是机器。人有人的逻辑。人的逻辑是用来表达什么的?直到今天,主要是通过语言,所以我们需要有语言理解服务来承载这部分;机器有机器逻辑,直到今天机器逻辑还是通过代码来表达,所以我们需要一个函数计算服务;在人机对话的过程中,这个对话过程需要进行有效的管理,所以我们需要一个对话管理模块。整个对话工厂的三个核心模块是语言理解、对话管理、函数计算。第一个模块是语言理解。我们先来看看这张图。在整个图中,横轴是意图的多样性,纵轴是频率。这个有点抽象。让我给你一个具体的例子。比如我要开发票,这是一个意向。如果你拿这个意图的用户语句抽样10万条,对这些语句做频次统计,“invoicing”这三个词可能排在第一位,可能出现了20000次。第二个可能是“开具发票”。它可能出现八千次。Openaninvoiceforme”,这种因果句型在整个语句中是比较长尾的,可能只出现一两次。我们统计完后,整个意图语句的多样性分布符合到幂律分布。这个特性可以让我们在技术上进行有效的针对性设计。首先,对于这个高频部分,我们可以应用一些规则,比如上下文无关文法,可以更好地覆盖这个区域,但是基于规则的方法,众所周知,规则是没有泛化能力的,所以这时候就需要用一个匹配模型来计算一个相似度来辅助规则。这两部分的结合可以解决我们的高频问题deterministic部分更好;对于长尾的多样性这部分,到今天基本都有监督分类模型,收集或者标注很多数据,把这个做好;在规则和分类模型之间,我们有做另一部分工作,是迁移学习模型,为什么要引入这个模型?让我们看下一张图。在冷启动阶段,用户输入样本时,不会输入过多的样本。可以输入十几个或几十个样本,这已经很多了。这个时候,按照刚才的幂律分布,如果使用28定律,它的效果可能是70%以上,不能再高了。但是就用户的期望来说,你要上线,要很好的满足他的用户需求,其实是希望模型效果在90%以上。如果要达到这种效果,需要复杂的模型和标注的大量数据。所以其实是有差距的,我们引入了迁移学习模型。具体来说,我们将capsulenetwork和few-shotlearning相结合,提出了一种叫做InductionNetwork的网络结构,也就是归纳网络。整个网络结构一共有三层,一层是Encoder层,第二层是Induction层,归纳层,第三层是Relation层。第一层负责将每个类的每个样本编码成一个向量;第二层是核心层,即归纳层,利用胶囊网络的一些方法,将同一类的多个样本向量汇总为一个向量;然后第三层Relationlayer计算用户的新句子和每个类的summarizationvector之间的关系,输出他们的相似度分数。如果我们要分类结果,就输出一个One-hot,如果不要One-hot,就输出一个关系的Relationscore,就是整个Induction网络的网络结构。这个网络结构提出后,在学术界的few-shotlearning数据集上,我们取得了state-of-the-art的效果,提升幅度比较大,是目前最好的。同时,我们会把整个网络结构都推出到我们的产品中,也就是语言理解。第二篇我们看一下对话管理。其实我刚才说了对话管理。如果想让平台有足够的适应性,那么它的抽象能力一定要好。对话管理有什么作用?对话管理就是管理对话,那么什么是对话呢?对话的最小单位是一轮,一个回合。我们进去一看,一个回合分为两部分,一个叫对话输入,一个叫对话输出;在输入和输出之间,有一个对话处理的过程,就像两个人在交流,我让你回答,但其实你在回答之前是有一个思考过程的,如果你不假思索地回答,那么你的回答就是没有质量,所以会有一个中间的对话过程。我们把对话抽象到这个程度之后,整个平台就有了三个节点,一个叫触发节点,一个叫功能节点,一个叫回复节点。触发节点用于用户的对话输入,功能节点用于对话处理,回复节点用于对话输出。有了这一层抽象,无论你在什么行业,什么场景,什么样的对话过程,你都可以通过连接把你的业务流通过这三个节点画出来。举两个例子,先看一个简单的。你想查看天气。这很简单。首先,触发节点用于触发天气过程。中间有两个功能节点,一个是调整中心气象站的接口,把结果传过来,一个是把结果解析封装一次,通过auser中的reply节点回复给用户-可读形式。这里稍微解释一下,就是增加了一个slot-filling节点。填槽节点是什么意思?在基于任务的对话中,几乎所有的任务都需要收集用户信息。例如,如果你想查看天气,你需要询问时间,今天是几号,地点是什么?这称为槽填充。因为slotfilling太普通太普通,符合我们冷启动快速做preset的想法,所以我们通过三个基础节点自己搭建了一个slotfilling的模板,从中拖一个slotfilling节点即可需要插槽填充时的页面。再来看一个复杂的场景。这是在线教育中的外呼场景。家里有孩子的可能知道,这种在线教育很火。上课前半小时,机器人会主动呼叫用户进行软件指导。下载、引导如何登录、登录后如何进入教室,这些过程都可以由机器人来引导。通过这两个例子我们可以看出,无论是简单的还是复杂的场景,都可以通过这三个抽象节点的连接来实现。有时我们开玩笑说,整个连线叫做一命二,二命三,三命万千对话。说完了抽象,再来看具体的对话管理技术。在实现上,这张图和你刚才看到的语言理解图是一模一样的,因为很多东西的分布其实是遵循一个普遍规律的,不同的是用对话代替了意图。举个例子,比如查天气,如果我们收集了10万个查天气的样本,对这些用户的发言做频次统计,大概就是这样一条曲线,可以分两步完成。比如查天气,先填一个时间的slot,再填一个location的slot,最后返回一个result。通过这个过程,可能有20000次;中间可能会引入一些问A和回答B的情况,这样的B可能有各种各样的情况,这样我们就跑到了长尾,这样整个对话其实是服从幂律分布的。对于高频判断部分,可以使用状态机来解决,但是状态机也面临一个问题。它没有很好的容错能力。当让A回答B时,机器不知道接下来如何连接。在这种情况下,就需要引入类人能力来补充状态机的能力。状态机加入类人能力后,基本上可以更好的解决高频对话。至于长尾上的对话,目前是整个学界或产业界的难题。更好的方案是在上线后引入在线互动学习,在对话过程中不断学习与用户的对话。状态机和在线交互式学习其实是有差距的,因为状态机本身没有学习能力,所以需要引入增强学习。接下来介绍类人能力和强化学习方面的一些工作。让我们先看看类人能力。我们在对人说的话进行分类的时候,大致可以分为三种:第一种是用户的话很清楚,只有一个意思,其实机器是可以理解的;说什么,就是未知数;还有一种用户表达的意思是可以理解的,但是是模棱两可的,可能包含两个意图或者三个意图,这是不确定的,不确定的。Deterministic,状态机其实可以很好的捕捉和描述,类人能力主要集中在拒绝和不确定性上。对于拒绝识别,比如在线英语的例子,机器人打电话询问是否方便调试设备。这时候从设计的角度来说,用户回答方便不方便就OK了。用户回答了一个更个性化的问题,比如,“呃,我刚扫完地,稍后可能会有人来”。这时候,我们的语言理解模块很难捕捉到this的语义。这个时候我们需要引入一个个性化的拒绝,比如“你好,对不起,刚才没听懂,请问方便你现在调试吗,不方便,我会打电话youlater”,这是对话的底线,是对未知的处理。其次,让我们看一下澄清。用户的句子有歧义怎么办?通过大量的数据分析,我们发现这种歧义主要出现在两种情况。一是用户把两种意图混合在一句话中表达;二是用户在表达意向之前做了很长的准备。目前对这两个长句的语言理解给出了意图的概率分布。我们把这个概率分布放在对话管理模块后,需要用户进行一轮澄清。比如这个例子,这是移动领域的一个例子。这句话的理解有三层意思。无论是想问费用明细、套餐,还是合同的低保,把这三个问题丢给用户问清楚。好的。技术上是如何实现的?让我们看一下这张图。开发者负责用流程图把对话过程说清楚,然后说清楚其实是我们系统的一个内置能力。澄清时通过低端取决于这两个引擎的能力。第一个是ErrorDetection,用于检测用户当前所说的句子是否需要触发澄清。一旦觉得需要触发澄清,就会交给下一个模块处理。使用什么样的澄清,如何生成澄清词,是我们整个智能澄清目前的工作。再看看我们在强化学习方面的工作。在对话管理模型中,经典分为两个模块,一个是neuralbelieftracker,用于对话状态跟踪,另一个是policynetwork,用于行为决策。在整个框架下,在训练这个网络的时候,有两种训练方式,一种是端到端训练,使用强化学习来训练,但是这种方式一般收敛速度较慢,训练出来的结果不好;另一种方法是先单独进行预训练。这时候用监督学习训练就够了,不用强化学习训练。训练结束后,使用强化学习调优监督学习预训练模型。向上。无论是端到端的一步训练,还是预训练再调参,只要涉及到强化学习,都需要外部环境。因此,在我们的实现架构中,引入了模拟器的概念,也就是用户模拟器。模拟器主要分为三个部分,一是用户模型,用来模拟人的行为;二是错误模型,在模拟人的行为后,通过错误模型引入一个错误扰动,用用户模型产生的只是一个概率为1的东西,对网络训练来说不够好。误差模型会扰乱这个结果,将其他几个结果引入其中,重新计算概率分布,这样训练出来的模型在扩展能力或者泛化能力上会更好;第三个模块是奖励模型,用于提供奖励价值。这是我们今天在整个强化学习的对话管理中的一些工作。最后看看函数计算。什么是函数计算?让我们举个例子。比如10086的用户想查话费,10086的机器人会回复是发短信还是放语音。表面上看是简单的一对一,其实需要多轮服务查询才能完成这个结果,因为要查话费的话,首先要通过函数计算查当天.如果是下一个计费周期,则无法查看话费,即每月最后一天无法查看话费。如果可以查话费,先查用户是否有话费。如果有收费的话,第三步调用服务看是否宕机,因为宕机的话就只能语音播报,不能接收短信。所以看一个简单的一对一出的对话背后,有一个复杂的过程,而这些过程今天都是在机器端用代码实现的。函数计算的引入使得对话工厂能够处理复杂的任务。业务应用最后,我们来看一下对话工厂的业务应用。这是我们在浙江推出的114动车。当市民举报违章停车堵路时,他会自动打电话让他挪车。第二个是金融领域的贷款催收例子。刚刚过去的双十一,对话工厂在整个电商也有大量的应用,主要是在电小蜜和阿里小蜜。点小米主要处理开发票、催收、更改地址等流程。这是发票的示例。用户可能先讲开发票,进去之后还要经过复杂的流程。一个在说的时候,他已经把订单号发过去了。不说订单号,就得去后台系统查订单号。找出来后,弹出一个订单选择器来选择订单。接下来,如果是个人发票,走这个流程。如果是公司发票,再走一个流程。接下来会问你是普通发票还是增值税发票。如果是普通发票,请到这里。如果是增值税发票,需要获取企业增值税的税号,最后聚合到一个节点。调用后台开票系统开具发票。这是本次双十一使用的开发票示例。阿里小米主要负责阿里巴巴集团内各BU的业务。手机淘宝是最大的业务。进入手机淘宝后,“我的”里有一个客服小米,就是阿里小米;上个月我们刚刚在优酷上线了优酷小米,9月份上线了星巴克。它是新零售最大的尝试点,还有很多其他的场景。在钉钉上,对话工厂通过智能办公助手,为千万级企业提供智能考勤、智能用人等对话服务。最后再来看看我们整体的落地情况。目前整个对话工厂应用于阿里经济体内部的各个业务(如淘宝、优酷、盒马等)、淘宝天猫商户、千万钉子企业、公有云企业、关键私有云行业(政府行业、运营商行业、金融行业等)、国际化(新加坡、印尼、越南、泰国、菲律宾、马来西亚等)等业务开始大规模应用,赋能各行各业的开发者生活独立搭建对话机器人。
