
如何开发智能助理平台.docx
12页如何开发“智能助理”平台 林琳一个合格的智能助理能够帮你预约开会时间,处理日常办公需求,还能打提醒你还信用卡,作为用户或者消费者,我们已经越来越习惯对话机器人提供的各色服务但对于企业来讲,搭建提供这些服务的对话机器人是一件门槛和成本都很高的事情阿里巴巴达摩院小蜜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种长句子现在的语言理解给出的是意图概率分布,我们把这个概率分布放到对话管理模块以后,就需要让用户进行一轮澄清比如举个移动领域的例子,明细这句话理解有三种意图,到底是想问花费明细,还是套餐的事情,还是想问合约。












