(二)RASA开源引擎介绍
共 2810字,需浏览 6分钟
·
2021-09-11 20:14
作者简介
原文:https://zhuanlan.zhihu.com/p/331791105
转载者:杨夕
面筋地址:https://github.com/km1994/NLP-Interview-Notes
个人笔记:https://github.com/km1994/nlp_paper_study
正因为对话机器人有如此广泛的应用,技术应用也层出不穷。如百度开源的基于检索式机器人的框架AnyQ;Google开源的基于生成式对话系统DeepQA;Facebook开源的基于阅读理解的系统DrQA;北京大学知识库问答系统gAnswer。但这些技术都是为了完成对话系统中的一个任务,或者说为了机器人的一个能力而开发的技术,而现有的对话系统中多是各种技术的混合,例如一个对话系统,闲聊部分可能用到DeepQA一类的NLG技术,关于知识推理部分可能用到KBQA的部分,关于FAQ的回答可能用到AnyQ或者DRQA。如何将这些技术应用到一个系统中,还是对应用开发人员的一个考验。
幸运的是,近些年来,很多厂商都开源了自己的问答系统,整个系统是开包即用,例如Facebook开源的Blender系统,他具有个性人物聊天的功能,可以知识问答,是有史以来最大的开放域(Open-Domain)聊天机器人。还有Uber开源的Plato系统,也都具有比较完整的功能。但要说从框架完整性,可扩展性,易用性等各方面,RASA当仁不让是当前最全面的系统之一。下面我们详细介绍下RASA系统。
RASA系统的优势
Rasa为建立高效,灵活,专有的上下文对话机器人提供了必要的基础架构和工具。使用Rasa,任何人员都可以通过文本编辑器配置配置文件,就可以得到一个非常不错的对话机器人。
RASA的开发非常活跃,社区内有10k+的stars,3k+的forks,300多万次下载,RASA跟踪了最前沿的技术,并应用到系统中,保证了RASA的技术领先性。RASA的NLU为开发人员提供了解消息,确定意图并捕获关键上下文信息的技术。支持多种语言,单一和多种意图,以及预训练和自定义实体等功能。RASA的CORE提供了多轮对话管理机制,使用Transformer技术自动学习上下文的与当前意图的关联性,而不是比较固定的状态机,再结合RulePolicy,提供了最大的灵活性。
假如您是一名开发人员,RASA也提供的非常好的扩展性,比如说Tokenizer,Featurizer,Classifier,Policy,Action等都提供了自定义功能,您可以只使用RASA的pipeline框架,而其他各个组件都自己定义。如果您是运维人员,您可以使用Rasa-x工具可视化的配置机器人,也可以达到非常不错的效果。
RASA提供了一套从开发、测试到生产部署全套的解决方案,并提供了Conversation-Driven Development (CDD)一套方法论,提供了Action Server,Rasa X等工具,支持Docker部署方式,简化生产运维等方式。
综上,RASA系统基本上涵盖开发对话系统的方方面面,不管是运维人员,还是开发人员都可以使用RASA开发一个比较好的对话系统。
RASA系统架构
上图概述了Rasa开源体系结构。RASA包含自然语言理解(NLU)和对话管理两个主要组件。NLU提供了意图分类,实体提取和响应检索功能,它是以管道的方式处理用户对话,在上图中显示为NLU Pipeline。对话管理组件可以根据上下文决定对话中的下一个动作,在上图中显示为Dialogue Policies。
Agent组件,从Robot User来看,Agent就是整个RASA系统的代理,它接收用户输入消息,返回Rasa系统的回答。在Rasa系统内,Agent就是一个总控单元,它引导系统启动,它连接NLU和DM,得到Action,然后调用Action得到回答,它保存对话数据到数据存储。
Tracker Store是对话的存储单元,对话跟踪单元将用户和机器人的对话保存在Tracker Store中。Rasa提供了针对不同存储类型的开箱即用的实现,包括postgresql,SQLite,Oracle,Redis,MongoDB,DynamoDB。TrackerStore也支持自定义存储。
Event Broker事件代理,机器人可以通过Event Broker连接到其他服务。机器人可以发布一个消息给其他服务来处理这些消息,也可以依靠Event Broker转发Rasa Server的消息到其他服务。目前RASA支持的Event Broker有RabbitMQ,Kafka,SQL。
Lock Store,该组件是一个ID产生器,当RASA是一个集群部署的时候,并且客户端在发送RASA服务端的消息每次不一定会寻址到同一个服务器,因此需要一个全局的Session ID。Rasa使用Token Lock机制来确保全局唯一SessionID,并在消息处于活动状态时锁定会话,以此保证消息的顺序处理。
FileSystem提供无差别的文件存储服务,比如训练好的模型可以存储在不同的位置。支持磁盘加载,服务器加载,S3这样的云存储加载。
ActionServer提供了Action与Policy解耦的一种方式。用户可以定义任何一种Action连接到Action Server上,通过训练学习,RASA可以将policy路由到这个Action上。这使得给机器人热插拔一个能力成为可能。
RASA消息处理过程
上图给出了RASA处理一条用户消息的信息流向。
消息传入后,被Interpreter接收
interpreter接收消息后,将消息转换成字典(tokenizer),并转化成特征(featurizer),提取命名实体(Extractors),识别意图(Classifier)。这部分叫做自然语言理解(NLU)。interpreter将输出包括实体,意图,以及对话的特征一起传给Tracker。
Tracker用来追踪记录对话状态的对象,Tracker的当前状态(特征,意图,实体)以及历史状态信息一并传给Policy。
Policy将当前状态以及历史状态一并特征化,并传入预测模型(Policy),预测模型预测出下一个动作(Action)。
Action完成实际动作,并将动作结果通知到tracker,成为历史状态。
Action将结果返回给用户。
接下来几章,将逐块分析RASA的各个组件的细节,及具体使用的注意事项,其中会穿插引用到的模型,算法。