2018年的百度AI开发者大会在7月4日和5日如期举办。在大会前,预备参会的开发者们收到了来自大会客服小姐姐的电话。很多接到电话的开发者都没有意识到电话另一端声音甜美的客服居然是一个客服机器人。这是一场真正的图灵测试,这位客服机器人勤勤恳恳服务了五百多位嘉宾,提醒他们来参会,还提供大会信息咨询服务。
大会的主论坛上,百度创始人、董事长兼首席执行官李彦宏先生,从几百通电话中,抽出了两通电话录音现场展示出来,机器人客服展现出了自然流畅的人机交互,对复杂语句的理解能力震撼了全场。
AI外呼机器人,不仅在语音语调语气方面像人,在和用户的交流中也体现出了和人一样的大脑核心。这个项目从idea诞生到实际给嘉宾打电话,只有一个月的时间,效果是超过预期的。项目组全量分析了所有嘉宾通话,回答的准确率已经达到94%。
AI客服像真人一样智能主要在于两点,一是对用户说话的准确理解,这主要得益于UNIT技术强大的支持,帮助项目实现了敏捷开发;二是机器人要能够针对用户问题做出精确的回答,并且像人一样能够响应用户打断,这样的对话逻辑十分复杂,项目组有针对性地实现了多轮对话管理逻辑,根据UNIT解析出的用户意图和当前对话状态,给出客服本轮的话术。
【让机器人像人,都要考虑哪些因素?】
外呼是一个很特殊的场景,它不仅考量一个机器人对用户提出的问题能否正确理解并应答,还要考验很多客服或者是销售人员的素质,比如礼貌应对、在对话中主动引导用户需求、口语化的沟通拉近双方关系等,该项目花了很多心思在这些方面。
【用UNIT 2.0,开发者可以打造一样的客服机器人】
相比Google的Duplex仅仅只是现场播放了一下,这个项目的难度更高,要真实的向在场的开发者拨出电话,所以一定要保证开发者的实际体验。同时,本次外呼机器人从立项到最终拨打电话,只有短短不到一个月时间。正是基于UNIT2.0,大大减少了研发的时间成本。
在对话管理方面,项目中专门为本次外呼做了定制优化,后续会升级为针对外呼场景的通用框架,逐步开放。目前来看,开发者如果要做出这样的机器人,可以通过UNIT2.0新的理解技术快速实现对话理解,并通过自己实现或者基于UNIT2.0提供的开源DM Kit框架来开发对话管理部分。简单介绍一下UNIT2.0的几大亮点:
【外呼机器人的实现思路】
搭建智能外呼机器人主要包括三个阶段:需求分析、Bot搭建、持续优化。
第一阶段是需求分析,主要是对业务场景的需求分析,梳理外呼机器人的功能定义对话逻辑,并收集对话场景中的对话数据。例如,本次外呼机器人需要完成的功能包括以下几个流程:握手寒暄流程、业务主流程、异常处理流程、通话结束流程。
l 握手寒暄流程——外呼机器人首先给出问候语,根据对方的回应做出判断,如果是正常回应则给出第二次问候语并进入主流程,否则直接进入主流程,或者超过两轮无回应进入挂断流程。
l 业务主流程——分为出席询问流程、会议相关问题解答流程。在主流程中,外呼机器人首先进入出席询问流程,主动询问用户是否参加大会,在理解用户回复是否参加后,给出相应的回答话术及语音合成播放指令。类似地,在完成出席询问流程后,外呼机器人进入会议相关问题解答流程,主动询问用户是否需要大会相关信息,根据用户回复给出相应话术及语音合成播放指令。
l 异常处理流程——机器人检测到用户静音、打断、要求停止、要求重述、无意图回复等行为时,根据用户行为给出相应的反馈。例如,用户静音时,需要询问用户是否还在;用户打断时,需要响应用户,请用户讲话;用户要求停止时,需要表示歉意进行安抚,并在超过一定次数时进入挂断流程。
异常处理流程包含多个,以静音的“异常”处理流程举例:
l 通话结束流程——是在机器人检测到主流程已完成,并且用户没有其他意图,此时即进入挂断流程,给出结束语播放指令。
第二阶段是Bot搭建,主要分为意图理解和对话逻辑两部分。这个阶段即可使用UNIT平台进行搭建,首先要定义机器人的技能,将需求分析中得到的各类用户意图配置为自定义技能,然后根据机器人的功能需求,梳理对话逻辑。下图为本次外呼机器人的功能流程。
左侧的单轮意图解析模块实现了用户意图理解,这部分需要在UNIT平台定义外呼场景中所有的用户意图,主要分为三类:业务意图、行为意图、用户态度。业务意图主要包括用户确认是否参会(用户确认参会、确认不参会、确认部分时间参会、不确定时间安排)、用户询问大会相关信息(询问交通、询问餐饮、询问签到等);行为意图包括用户打断、用户忙、用户表示不需要、要求重述、要求继续等意图;用户态度包括肯定和否定。在UNIT平台定义好所有技能后,对每个技能配置对话模板,并添加训练数据。对话模板是对用户需求表达的一种规则抽象,配置好对话模板,可以快速识别不同表达方式的用户需求。
UNIT2.0中为对话模板提供了更强大的用法,多个模板片段组成一个对话模板,每个模板片段都可以由词槽、特征词、特定文本单独或组合而成,而且多个模板片段可以是有序的,也可以是无序的。此外还可以设置模板片段是否必须在用户提问中出现。另外,UNIT2.0新增的PowSLU能力,有效融合模板规则技术与机器学习技术的混合策略模型,提供了更加灵活的意图解析机制。PowSLU内部通过具有由高到低不同置信度等级的多级分析机制,实现了比基于规则模板的SmartSLU更好的召回能力,取得了更高的口语理解精度。
右侧的多轮对话理解、话术与指令生成模块共同实现了对话逻辑管理。首先,得到UNIT平台返回的本轮用户意图,结合当前的对话状态、用户对话历史,按照需求分析中提炼出的对话流程,得出解析结果并生成机器人话术。这个话术是由一条或多条原子话术拼接而成,话术模板在需求分析阶段确定。与此同时,与话术一同输出的还有指令,包括播放语音合成、停止播放当前语音合成、挂断、转人工等,以及这些指令的有序组合。话术和指令封装好输出给呼叫中心,由呼叫中心执行指令,进行语音合成播放。
第三阶段是持续优化,这个阶段是一个周期性的、循环迭代的持续优化阶段,在此阶段我们不断地对机器人的对话理解效果进行评估,然后优化训练数据;经过一段时间的测试后可以收集到大量的用户对话日志和用户反馈,此时再次进行优化。如此循环往复,可以对对话机器人完成迭代优化。
UNIT2.0新增了干预学习的功能,可以针对识别错误/未识别的意图和词槽进行干预纠正,纠正保存后原query会立即生效。在干预学习模块可以把干预的对话加入训练数据,重新训练后,干预记录的对话将可能进一步提高Bot模型的泛化理解能力。另外,也可以在对话过程中(在使用UNIT对话API或SDK的产品中)直接用对话的方式进行干预纠错(用户和Bot都可以主动发起干预纠错),支持对话中数字、字母、单字等的纠错,支持不置信意图及歧义意图的澄清,支持必填词槽及不置信词槽的澄清。例如,用户说:“过几天可能有事”,此时系统解析得到的top1意图为“无法参会”,由于其置信度低于一定阈值,系统需要进行不置信意图澄清,主动询问用户是否为该意图:“请问您是无法参会吗”;再比如,用户问:“开车去要注意什么,车停哪里”,此时系统解析到“查询自驾信息”和“查询停车信息”两个意图,并且两个意图的置信度接近时,系统需要进行歧义意图澄清,主动询问到底是哪一个:“请问您需要自驾信息还是停车信息”。上述功能帮助Bot获得交互式学习(Interactive learning)的能力,只要和它聊一聊,即可优化对话效果,就像人一样在对话中理解和学习。在后续使用的过程中,对话越多,机器人越聪明。