背景
智能语音机器人是58集团TEG架构平台线AI Lab自主研发的具有自动电话拨打、多轮语音交互、智能意向判断等多种功能的通用对话机器人。在电话拨打场景下,多轮语音交互要求具备内容的专业性和极高的流畅性,目前多轮语音交互主要由话术驱动。当前智能语音机器人已经接入多个不同的业务场景,不同的业务场景定制了多套不同的话术。让智能语音机器人在复杂且多样的话术上与用户流畅的交流,是智能语音机器人所面临的困难与挑战。
智能语音机器人总体架构(参考 智能语音机器人架构实践),核心模块主要包括语音通话模块(参考 智能语音机器人中的语音通话实践)、意图识别模块、对话管理系统等,本文主要介绍对话管理系统的实现。
简介
在业界,对话管理系统经常出现在任务型对话中,指的是结合意图、槽位识别结果和系统配置生成系统回复,系统配置的实现形式通常是有限状态机或特殊的语境机制,用于实现多轮对话功能。一般任务型对话在客服场景中出现的比较多,如:订机票、天气查询等,旨在解决用户的需求。
电话拨打场景下的智能语音机器人与智能客服的最大区别在于主动性和流畅性。智能语音机器人是主动向用户发起对话,而不是等待用户提出需求,对话通常有明确的目的性,如:销售、通知、回访等,需要根据固定话术发起通话。另外,电话拨打场景对通话流畅性的要求很高,需要有效处理用户的口头语和临时提出的一些问题,并引导用户完成话术中的内容。因此,智能语音机器人的多轮交互是话术驱动的,且需要有效的支持电话场景下的特殊行为。
话术是业务方创建的对话流程图,其结构可以简单的概括为主线话术、支线话术、通用话术和标准问题话术。主线为话术主要目的,由开场白开始发起通话,其他话术是为了应对通话过程中其他行为(参考 智能语音机器人架构实践)。下图为招聘场景下的话术示例。
对话管理系统根据用户意图、槽位等信息决定话术的下一个节点,给出回复,并结合通用意图、标准问题以及拉回策略等,提高对话流畅度。下图为招聘和黄页两个场景下的对话过程。
对话管理系统架构
对话管理系统可以分为自然语言理解(Natural Language Understanding,NLU)和对话管理器(Dialog Manager,DM)两部分。NLU接受用户输入,生成DM可以理解的用户动作(User Action),主要包括用户输入的相关信息,如用户语音、用户文本、用户意图、用户槽位、用户声音类型等信息。
DM根据用户动作和话术配置生成系统动作(System Action),主要包括系统对用户输入产生的回复相关信息,如回复语音、回复文本、回复意图等信息,其回复语音最终通过SIP通道发送到用户端,完成一轮人机对话。
用户和系统多次交互的对话动作按序排列,组成对话历史(Dialog History),也称为对话上下文(Dialog Context)。对话上下文由对话管理器保存和维护,除了保留对话历史外,还用于辅助对话管理器产生系统动作。
在人机对话过程中,有一些特殊的事件(如用户长时间不说话等)需要被系统捕获并处理,这个工作是由触发器(Trigger)来完成的。触发器在特定的触发条件下(如上述用户长时间不说话)生成触发器动作(Trigger Action)。与用户动作一样,触发器动作也由对话管理器处理,并生成对应的系统动作(如主动询问用户是否还在听)。
自然语言理解(NLU)
NLU的作用是理解用户想要表达的内容,在智能语音机器人的场景下,用户输入的是流式语音数据,经过VAD和ASR后得到转译后的文本内容,NLU根据语音和文本的内容识别出用户意图,提取表达信息量的槽位,作为用户动作供对话管理器做策略选择。NLU包括声音类型识别、单句意图识别、标准问题匹配和槽位识别。
(1) 单句意图识别
单句意图识别与通话行为相关的意图,包含:肯定、否定、在忙、不理解、继续聆听、提供信息、确认、更换、对比、提问、提供方案、建议、挂断、再见、问候、感谢、客气、抱歉、闲聊,共19个标签,这些标签的含义不随话术、上下文的变化而改变,根据这类标签可以确定用户当前的回复大致要表达什么意思,对其中的通用意图(如:问候语、挂断等)可以直接给出回复,对于包含一定信息量的意图(如:肯定、提问等),根据话术中的配置实现简单的话术跳转,跳转过程如下图所示。
单句意图是通用且相互独立的19类标签,识别过程中没有考虑对话的上下文,而是通过“理解”话术配置实现跳转,所以单句意图可以视为对用户回复文本的分类问题,但在实际电话场景中,用户说话的口音、语气、环境、非人声噪音等往往会导致语音识别不准,这给意图识别带来了很大的挑战,声音类型识别就是针对非人声噪音实现的优化方法。
(2) 声音类型识别
在电话场景下受到用户的口音、环境以及通话线路的影响,语音质量不是很高,导致语音识别不准,给意图识别带来很大的挑战。经统计,听不清、空白音、机器音、噪音在数据中占有很高的比重,其中听不清占30%,且这些情况下语音识别结果会和实际语义差别较大。声音类型识别就是将以上四种类型与正常的对话语音区分开,这样单句意图只会作用在正常语音的输入,从而降低了语音识别不准确带来的影响。
声音类型识别模型采用基于VGGish+BiLSTM的模型,VGGish使用了Google提供的预训练模型,目前通过调整阈值,听不清类别准确率达到95%的准确率。
(3) 标准问题匹配
在实际交互过程中,用户通常会问些话术之外的问题,如:“你是谁啊?”等,经过数据积累会根据不同业务总结出一些具备代表性的标准问题,在配置话术时,需要根据业务场景为这些标准问题定制答案,在收到用户回复时,会先去匹配这些标准问题,若命中某个标准问题,则会返回对应的回复,并执行拉回策略,切换到之前的话题中。以上过程为标准问题匹配,每个话术会有一套相互独立的标准问题,由于其独立性和易变性,采用基于BiLSTM DSSM的模型来实现通用的语义匹配。
(4) 槽位识别
槽位识别是从一段文字中找到有特殊含义的实体,用于有信息提取需求的话术中,如:提取时间、地点等信息,此处采用BiLSTM+CRF实现实体识别工作,识别后根据话术配置确定对话流程。
对话管理器(DM)
对话管理器主要由对话上下文和对话策略管理器组成。对话上下文(Dialog Context)是对话管理器的数据核心,是对话过程中的所有对话动作组成的列表。对话策略管理器(Dialog Policy Manager,DPM)是对话管理器的逻辑核心,是由一组按优先级排序的对话策略(Dialog Policy,DP)组成的列表(也称为策略链)。
对话策略是对话管理器的实际执行单元,其作用是根据输入的用户动作输出对应的系统动作。对话策略代表了系统的对话能力,系统拥有的对话策略越完善,系统处理不同场景对话的能力越强。
(1) 对话策略
对话策略的输入是对话上下文(包含了当前用户动作),其输出是系统动作。对话策略由三个部分组成:
优先级
优先级决定了对话策略在策略管理器中处理的先后顺序。
能力函数
智能语音机器人本质上还是一个基于知识库检索的智能对话机器人,其知识库称为话术。对话策略的能力函数主要根据能否检索到对应的话术来判断系统能否响应当前用户动作。对话策略当前主要通过三种方式来检索答复话术:
动作类型。对于特殊的动作类型,如触发器动作、拉回动作等,其处理方式特殊,分别由不同的对话策略(如触发器策略、拉回策略等)来处理
用户意图。对于部分用户意图,各个话术的处理逻辑是一致的,可以由对应的对话策略来统一处理。如通用意图(挂断、在忙、再见、抱歉、问候、继续聆听、不理解),可以使用通用意图策略来处理。
语料相似度。在大多数对话场景下,无法仅通过用户意图来生成答复,此时主要靠用户答复与话术语料的相似度来检索答案。如标准问题策略中,用户意图一般都是问句(request),只能通过用户问题与话术的标准问题及其扩展问题的语义相似度并指定相似阈值来匹配标准问题答案。
应答函数
通常能力函数已经生成了产生系统答复需要的相关参数,如标准问题ID、正负分支ID等。应答函数只需要根据相关参数,从话术中取出对应的话术答案,封装成系统动作即可。
对话策略代表着智能语音机器人的对话能力,随着业务对智能语音机器人对话能力需求的提高,对话策略也会逐步丰富和完善。
(2) 对话策略管理器
对话策略管理器的本质是一组对话策略按优先级组成的策略链。根据业务的不同性质,对话策略可以有不同的组合方式,也就有各种不同的对话策略管理器。
如只需要按键响应的业务场景,只需要按键响应策略(对用户按键进行响应)和触发器策略(处理用户长时间不操作按键的情形)即可。
如不接受用户输入的通知型场景,对话策略管理器甚至可以是一个空的策略链。
通常情况下,对话策略管理器会加载当前系统支持的所有对话策略,以便系统能够处理各种情形下的用户输入或系统事件。
对话策略管理器接收对话上下文作为输入,根据对话策略链中各对话策略的优先级依次遍历对话策略的能力函数,直到某对话策略的能力函数声明能够处理当前输入时,则对应的对话策略被命中(称为命中策略)。对话策略管理器调用命中策略的应答函数,产生系统动作作为输出,完成一次用户与系统的对话。
对话管理器的工作流程
如前所述,对话管理器由对话上下文和对话策略管理器组成。对话管理器将输入的对话动作(包括用户动作、系统动作以及触发器动作)保存到对话上下文中,对话策略管理器基于对话上下文及话术配置选择合适的对话策略,对话策略根据对话上下文和话术配置产生对应的系统动作,智能语音机器人则根据系统动作,将对应的语音数据发送给用户,或根据系统动作的内容执行诸如系统挂断、话术拉回等操作。
下面列举几种典型的场景来介绍对话管理器的工作流程。
通用意图的处理流程
通用意图由通用意图策略处理。当前动作是用户动作,其单句意图是通用意图时,通用意图策略被命中。
通用意图指的是挂断、在忙、再见、抱歉、问候、继续聆听、不理解 等用户意图。所有的话术中,这些意图的处理方法都是固定的,如挂断意图,系统会返回话术配置的客套结束语,并在对应语音发送之后主动挂断电话。
标准问题处理流程
标准问题由标准问题策略处理。当拉回策略、触发器策略、按键响应策略及通用意图策略无法命中当前用户输入时,对话管理策略会尝试命中标准问题策略。
当前标准问题策略的能力函数主要依赖语义相似度算法,即通过计算用户输入与标准问题及其扩展问题的语义相似度,当最佳匹配相似度超过相似度匹配阈值时,即认为命中了相应的标准问题。标准问题策略的应答函数根据记录的标准问题ID,获取对应的问题答案,并产生一个拉回动作。
对话管理器首先将拉回动作中的问题答案发送给用户,并根据拉回动作将当前主线流程的话术发送给用户,将用户重新拉回到主线流程中。
主线流程的处理流程
主线流程由主线策略处理。一个主线话术通常包含两个分支:正向分支和负向分支,每个分支配置了不同的语料。对于用户输入,主线策略首先检测对应的用户单句意图与分支的语料的单句意图是否匹配。如果只有一个支线的语料意图与用户单句意图匹配,则命中对应的分支答复;当两个支线的语料同时匹配时,主线策略会通过语义相似度匹配最相似分支。当分支最大相似度低于接受阈值或者两个支线的语料意图都没有命中时,则表明主线策略不能处理对应的用户输入,该用户输入会由其它优先级较低的对话策略(如拒识策略等)进一步处理。
总结
本文主要介绍了对话管理系统的作用和结构,包括自然语言理解和对话管理器,通过自然语言理解的解析和对话管理器中合理的策略选择实现与用户的流畅交互。自然语言理解在后续会有相应文章详细介绍。
对话管理系统为复杂的业务场景提供了通用的对话引擎,实现了低成本的支持多样化的业务需求,目前基本能够保证对话的流畅。但在电话场景下,语音质量较差,语音识别和语音断句难度较大,要在这种情况下保证流畅的通话是对话管理系统所面临的挑战。后续对话管理系统将重点优化在低质量的语音信号下的对话效果,使智能语音机器人与用户的交互更加稳定流畅。我们也正在寻求人才,一起打造更强大的AI系统,感兴趣请点击此处。