基于Rasa框架的智能对话系统研究与设计
2023-03-14李孟全吴士泓王志刚
李孟全,吴士泓,王志刚
(远光软件股份有限公司,珠海 519085)
0 引言
在企业推进以人机协同系统为基础的智能化进程中,任务型对话系统是其中最核心的领域,需要各方深入研究和推动。赵阳洋等[1]认为,尽管对话系统近年来有较大的发展,能够帮助用户完成简单的任务,但其在通用性、深度理解等方面还面临着许多挑战。笔者研究了Rasa开源框架,发现Rasa在通用性和深度理解方面具备一定的优势,该框架设计高效、灵活,提供了对话机器人开发时必要的基础架构和工具,尤其是Bunk等[2]基于Rasa框架提出的DIET模型,能够对用户意图和实体信息进行联合建模,且Rasa整体上与NLP技术的最新研究进展融合性很好。所以,本文将基于Rasa框架深入研究和设计一套智能对话系统,以便减轻相关人员的工作压力,满足公司“提质增效”的管理需求,为企业数字化转型奠定坚实基础。
1 研究现状和问题
1.1 对话技术研究现状
对话技术大体上经历了三个发展阶段,分别是基于符号规则和模板阶段、基于传统机器学习阶段、基于深度学习阶段。
基于符号规则和模板阶段。该阶段的技术严重依赖专家手工制定的语法规则和本体设计,优点是容易理解,缺点是人工成本非常高、扩展性差。例如,Goddeau等[3]提出的有限状态机方法需要人工预先定义好全部状态和状态转移条件,采用NLU输出中得分或概率最高的结果才能完成对话状态更新,该方法缺点是无法解决错误识别问题,且在复杂应用场景下灵活性不足。后来,Sun等[4]提出用于修正NLU中错误识别的N-Best列表分数方法,但缺点也同样明显:相关参数依赖人工编制,不能根据数据分布情况进行学习。
基于传统机器学习阶段。该阶段的技术方法包括K近邻、决策树、朴素贝叶斯、逻辑回归、集成学习、条件随机场、支持向量机(SVM)等。该阶段的技术虽然具备弱学习能力,但漏洞修补难度大,也不利于模型大规模应用。例如,Lewis等[5]、Zhang等[6]认为朴素贝叶斯模型的独立假设条件比较苛刻,在实际场景中应用价值不大;Yang等[7]、Weinberger等[8]认为K近邻算法在结果一致性方面简单、有效,且重新训练代价低,但其性能过于依赖模型查找到的最近邻距离度量,且面对高维数据时处理效果不佳。Joachims[9]指出SVM应对高维空间和过拟合时表现出来的稳健性不错,但其性能又高度依赖于相关参数和核函数的选择。Lubis等[10]通过变分自编码潜在动作空间对对话策略进行优化,主要探索了预训练、动作知情的先验和多任务学习三种借助辅助任务塑造潜在变量分布的方法,优点是与目前的Transformer不同,不需要额外的数据,且计算成本低,在端到端对话任务上效果显著,但在长距离上下文和对话轨迹准确性方面有待完善。
基于深度学习阶段。该阶段的技术促使了端到端的学习成为可能,是目前研究的主流方法,也涌现了大量的研究成果,当然也存在一定程度的不足。目前在处理序列标注任务时会在传统序列标注方法基础上加入深度学习方法,例如,Ma等[11]、Dilek等[12]提到的具有条件随机场层的双向LSTM,成为目前处理序列标注任务的主流模型,既可以兼顾上下文又可以兼顾依赖关系信息,满足过去和未来的信息均可被充分利用的要求,但该方法有时候还是需要人工构建特征;其他方面,冯强中[13]利用知识图谱和神经网络(主要是双向LSTM)进行知识增强,将复杂且非标准的自然语言查询语句转换为符合公司知识库标准的问题,再结合知识库中的问题、相似问题和答案等实体构建知识图谱,完成智能问答工作,但不足之处是模型仅限于其公司内部相关数据上的表现不错;Li等[14]提出了一种上下文感知的动态卷积网络,可以在生成卷积核的同时充分利用上下文信息,提出的新网络框架可被扩展至多任务学习下的双通道上,用于完成对话行为和情感分类的联合识别任务。
1.2 目前存在的问题
目前主流的深度学习方法在对话任务的表现不错,但有些问题需要进一步解决,比如:①模型中领域漂移(domain shift)、语义间隔等问题;②目前对于语言的理解多数停留在语义表层,复杂场景下融合知识后的逻辑推理能力偏弱;③域适应能力面临的问题亟需解决,以便应对自由度比较高的对话场景。
2 Rasa框架概述
Rasa是一个用于构建智能对话机器人的开源机器学习框架,拥有大量的可扩展特性组件,几乎覆盖对话系统的所有功能,是目前对话系统的主流开源框架[15],主要包含以下四部分。
(1)Rasa NLU:提取用户想要做什么和上下文关键信息;
(2)Rasa Core:基于对话历史,选择最优的回复和动作;
(3)通道(channel)和动作(action):连接对话机器人与用户及后端服务系统;
(4)辅助系统:Tracker Store、Lock Store和Event Broker等。
Rasa内部运行机制如图1所示。用户可以利用通道支持的客户端将查询信息输入对话系统,Rasa NLU负责将用户的输入转换成意图和实体信息,完成自然语言理解工作。然后,Rasa Core负责基于当前和历史的对话记录(其中NLU的输出是对话记录的一部分)采取下一个动作,下一个动作可以是回复用户信息、调用用户自定义的动作类。自定义动作运行在一个单独的服务进程中,被称为动作服务器,该服务器通过HTTP(hypertext transfer protocol)与Rasa Core进行相互通信。多数情况下,我们重点关注Rasa NLU和Rasa Core两个核心部分。
图1 Rasa内部运行机制示意图
3 系统设计与实现
3.1 自然语言理解模块
3.1.1 Rasa NLU模块中各类组件
Rasa NLU主要是通过监督学习算法完成意图提取和实体提取,所以需要自行准备一些包含意图信息和实体信息的语料。这里将以某央企总部制定的“会计基础管理办法”及省公司本部制定的“会计科目责任制管理规范(业务规范)”等原始数据为基础,准备需要的相关语料,同时会根据最新的内外部政策要求更新语料库。
Rasa NLU在软件架构设计上比较灵活,允许开发人员自行使用各种算法完成相关工作,这些算法的具体实现被称为组件(component)。由于这些相互连接的各类组件及组件间的数据流共同组成了有向无环图,所以Rasa NLU也可以被看作一个基于有向无环图的通用框架。自然语言理解模块通常有实体识别和意图识别两个任务,为了完成这些任务,图2给出了一个典型的Rasa NLU配置通常包含的各类组件,下面针对这些组件进行逐一说明。
图2 典型Rasa NLU组件示意图
3.1.2 流水线配置
由上面分析可知,Rasa NLU是基于有向无环图进行组件配置,这种有向无环图在Rasa中被称为流水线(pipeline),配置文件格式为YAML,配置样例如算法1所示。
算法1流水线配置样例
recipe:default.v1
language:zh
pipeline:
-name:JiebaTokenizer #使用Jieba中文分词器
-name:LanguageModelFeaturizer
#基于HuggingFace的Transformers库
model_name:bert #BERT的语言模型和架构
model_weights:bert-base-chinese#BERT的中文语言模型和架构
-name:RegexFeaturizer
#读取训练数据中的正则表达式配置
-name:DIETClassifier
#Rasa提供的实体和意图联合提取组件
epochs:100 #模型运行100个epoch
learning_rate:0.001
tensorboard_log_directory:./log
-name:ResponseSelector
epochs: 100
learning_rate: 0.001 #模型学习率
- name: EntitySynonymMapper #实体识别组件
3.1.3 Rasa NLU分析结果
如果输入“请问车辆燃油费报销时需要上传哪些附件”,NLU将会给出如算法2所示的解析结果,显然“attachment”和“attachment”之间的相关性明显高于与“goodbye”的相关性。
算法2Rasa NLU分析结果
{
“text”:“请问车辆燃油费报销时需要上传哪些
附件”,
“intent”:{
“id”:5313274288154357548,
“name”:“attachment”,
“confidence”:0.999690031993
},
“entities”:[
{
“entity”:“reimbursement”
“start”:2,
“end”:9,
“confidence”:0.999778123345692,
“value”:“车辆燃油费报销”,
“extractor”:“DIETClassifier”
}
],
“intent_ranking”:{
“id”:5313274288154357548”,
“name”:“attachment”,
“confidence”:0.999688021375883,
},
{
“id”:-3614266674174050593,
“name”:“goodbye”,
“confidence”:0.000122011470351,
}
]
}
3.2 对话管理模块
Rasa Core是Rasa体系中负责对话管理(dialog management,DM)的部分,主要职责是根据NLU模块的输出实现会话行为状态的更新和跟踪,并结合一定的策略(policy)选择下一个动作输出。简言之,对话管理的核心在于基于意图(intent)和状态(state)的动作预测。对话管理模块内部运行原理示意图如图3所示。
图3 对话管理模块内部运行机制示意图
3.2.1 通道
通道的主要作用是对经过的数据进行统一封装,将符合规范的数据推送至下一个节点处理。这里的通道有两类:输入通道和输出通道,前者负责将用户的身份和输入信息封装成用户信息对象后推送给Processor处理,后者将对话系统需要返回给用户的信息进行统一封装。
3.2.2 领域
领域(domain)对象定义了对话系统需要掌握的所有信息,例如意图、实体(entity)、词槽(slot)、动作、表单(form)和回复(response)。这些数据明确界定了模型的输入和输出范围,一般由Rasa框架中的配置文件domain.yml统一提供。
本质上讲,领域有利于将对话系统需要使用的模板信息进行统一管理,包括定义的意图、实体、槽位、话术模板,以及自定义的动作和策略等。领域对象在动作执行时可以提供这些模板信息,如果需要添加或修改这些信息,只需要修改domain.yml文件里的数据就可以,不需要修改任何代码,实现了系统配置和代码解耦,便于整体上对对话系统进行管理。算法3给出了领域对象的样例。
算法3领域对象样例
intents:
-goodbye
-greet
-chitchat
-deny
-stop
-affirm
-info_date
-info_reimbursement
entities:
-reimbursement
-date-time
slots:
address:
type:text
influence_conversation:false
mappings:
-entity:reimbursement
type:from_entity
date-time:
type:text
influence_conversation:false
mappings:
-entity:date-time
type:from_entity
responses:
utter_greet:
-text:您好,请问有什么事情可以帮到您?
utter_goodbye:
-text:再见!
utter_ask_reimbursement:
-text:需要咨询哪类报销业务问题?
utter_ask_date-time:
-text:业务什么时候发生的?
utter_ask_continue:
-text:是否要继续?
utter_default:
-text:小E没有理解您说的是什么意思。
actions:
-utter_greet
-utter_goodbye
-utter_ask_reimbursement
-utter_ask_date-time
-utter_ask_continue
-utter_default
-respond_chitchat
-action_reimbursement_form_submit
forms:
reimbursement_form:
required_slots:
-reimbursement
-date-time
3.2.3 故事
故事(story)是一种较高语义层次上记录对话过程的方式,它不仅需要记录用户的语义表达,还需要记录系统内部正确的状态变化。故事本身是以字典的形式存在,包含两个键:story和steps。后面的策略就是通过学习故事内容才进行动作预测的。
3.2.4 策略
策略(policy)担负着根据当前用户反馈的信息告知Processor当前一轮对话中应该执行的后续动作以及如何更新对话状态信息等任务。Rasa框架中的策略管理模块支持人工规则的策略和依靠机器学习、深度学习完成的数据驱动策略,也支持组合策略。由于前期财务领域的样本数据偏少,所以采用以表单策略(form_policy)为代表的人工规则策略,该策略与动作管理中的表单动作(form_action)相对应。需要说明的是,Rasa框架提前预置了一个叫fall_back的策略,其目的是为对话系统执行一个兜底策略。
3.2.5 动作
动作接收用户输入和对话状态信息,按照业务逻辑进行处理,并输出改变对话状态的事件和回复用户的消息。
3.3 系统部署
在生产环境中部署对话系统时,使用单机部署模式,使用Redis作为Tracker store和Lock store背后的数据库,单机高并发设置为6,满足Rasa服务器使用6个worker,性能测试时使用REST接口连接Rasa进行对话处理,并使用JMeter等测试工具对Rasa的吞吐量和响应时间进行测量。
4 结语
本文首先从企业以人机协同系统建设推进其智能化建设的角度引出对话系统,并对选择Rasa框架搭建智能对话系统进行说明,提出构建智能对话系统的实现方式;其次,针对对话技术研究现状和目前的问题进行分析,给出相关研究进展和未来挑战;然后,针对Rasa框架内部运行机制进行解读;最后,针对智能对话系统进行详细设计,针对对话系统实现及系统部署进行说明。笔者认为,随着全国“全电发票”试点工作的深入推进,国内大型企业在以财务数智化为基础的智能系统建设步伐必将提速,以人机多元协同为主线的管理智能化创新应用将会越来越多。