章节一: RASA开源引擎介绍

一、前言

        随着最近对话机器人的普及和推广应用,技术更新不断。前前后后也有很多的大厂有自己的对话系统,如百度开源的基于检索式机器人的框架AnyQ;Google开源的基于生成式对话系统DeepQA;Facebook开源的基于阅读理解的系统DrQA;北京大学知识库问答系统gAnswer。但这些技术都是为了完成对话系统中的一个任务,或者说为了机器人的一个能力而开发的技术,而现有的对话系统中多是各种技术的混合,例如一个对话系统,闲聊部分可能用到DeepQA一类的NLG技术,关于知识推理部分可能用到KBQA的部分,关于FAQ的回答可能用到AnyQ或者DRQA。如何将这些技术应用到一个系统中,还是对应用开发人员的一个考验。

        幸运的是,近些年来,很多厂商都开源了自己的问答系统,整个系统是开包即用,例如Facebook开源的Blender系统,他具有个性人物聊天的功能,可以知识问答,是有史以来最大的开放域(Open-Domain)聊天机器人。还有Uber开源的Plato系统,也都具有比较完整的功能。但要说从框架完整性,可扩展性,易用性等各方面,RASA当仁不让是当前最全面的系统之一。下面我们详细介绍下RASA系统。

二、RASA系统的优势

        Rasa为建立高效,灵活,专有的上下文对话机器人提供了必要的基础架构和工具。使用Rasa,任何人员都可以通过文本编辑器配置配置文件,就可以得到一个非常不错的对话机器人。

        RASA的开发非常活跃,社区内有15k+的stars,4.1k+的forks,2500多万次下载,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开源引擎介绍_第1张图片

Rasa开源体系结构

        Rasa主要包括Rasa NLU(自然语言理解,即图中的NLU Pipeline)和Rasa Core(对话状态管理,即图中的Dialogue Policies)两个部分。Rasa NLU将用户的输入转换为意图和实体信息。该模块主要功能是意图分类,实体提取和响应检索功能。Rasa Core基于当前和历史的对话记录,决策下一个Action。

        除了核心的自然语言理解(NLU)和对话状态管理(DSM)外,还有Agent代理系统,Action Server自定义后端服务系统,通过HTTP和Rasa Core通信;辅助系统Tracker Store、Lock Store和Event Broker等。还有上图没有显示的channel,它连接用户和对话机器人,支持多种主流的即时通信软件对接Rasa。

(1)Agent:从用户角度来看,Agent就是整个RASA系统的代理,主要是接收用户输入消息,返回Rasa系统的回答。从Rasa角度来看,它连接自然语言理解(NLU)和对话状态管理(DSM),根据Action得到回答,并且保存对话数据到数据库。

(2)Action Server:提供了Action与Policy解耦的一种方式。用户可以定义任何一种Action链接到Action Server上,通过训练学习,RASA可以将Policy路由到这个Action上。此外,通过rasa-sdk可以实现Rasa的一个热插拔功能,比如查询天气预报等。 

(3)Tracker Store:将用户和Rasa机器人的对话存储到Tracker Store中,Rasa提供的开箱即用的系统包括括PostgreSQL、SQLite、Oracle、Redis、MongoDB、DynamoDB,当然也可以自定义存储。

 (4)Lock Store:一个ID产生器,当Rasa集群部署的时候会用到,当消息处于活动状态时锁定会话,以此保证消息的顺序处理。

 (5)Event Broker:简单理解就是一个消息队列,把Rasa消息转发给其它服务来处理,包括RabbitMQ、Kafka等。

 (6)FileSystem提供无差别的文件存储服务,比如训练好的模型可以存储在不同的位置。支持磁盘加载,服务器加载,S3这样的云存储加载。

四、RASA消息处理过程

章节一: RASA开源引擎介绍_第2张图片

 上图展示了从用户的Message输入到用户收到Message的基本流程:

步骤1:用户输入的Message传递到Interpreter(NLP模块),然后识别Message中的意图(intent)和提取实体(entity)。

步骤2:Rasa Core将Interpreter提取的intent和entity传递给Tracker,然后跟踪记录对话状态。

步骤3:Tracker把当前状态和历史状态传递给Policy。

步骤4:Policy根据当前状态和历史状态进行预测下一个Action。

步骤5:Action完成预测结果,并将结果传递到Tracker,成为历史状态。

步骤6:Action将预测结果返回给用户。

五、参考文献

[1]Rasa 3.x官方文档:https://rasa.com/docs/rasa/

[2]Rasa Action Server:https://rasa.com/docs/action-...

[3]Rasa Enterprise:https://rasa.com/docs/rasa-en...

[4]Rasa Blog:https://rasa.com/blog/
[5]Rasa GitHub:https://github.com/rasahq/rasa

[6]Awesome-Chinese-NLP:https://github.com/crownpku/A...

[7]BotSharp文档:https://botsharp.readthedocs....

[8]BotSharp GitHub:https://github.com/SciSharp/B...

[9]rasa-ui GitHub:https://github.com/paschmann/...

[10]rasa-ui Gitee:https://gitee.com/jindao666/r...

[11]rasa_chatbot_cn:https://github.com/GaoQ1/rasa...

[12]Rasa_NLU_Chi:https://github.com/crownpku/R...

[13]nlp-architect:https://github.com/IntelLabs/...

[14]rasa-nlp-architect:https://github.com/GaoQ1/rasa...

[15]rasa_shopping_bot:https://github.com/whitespur/...

[16]facebook/duckling:https://github.com/facebook/d...

[17]rasa-voice-interface:https://github.com/RasaHQ/ras...

[18]Rasa:https://github.com/RasaHQ

[19]ymcui/Chinese-BERT-wwm:https://github.com/ymcui/Chin...

[20]Hybrid Chat:https://gitlab.expertflow.com...

[21]rasa-nlu-trainer:https://rasahq.github.io/rasa...

[22]crownpku/Rasa_NLU_Chi:https://github.com/crownpku/r...

[23]jiangdongguo/ChitChatAssistant:https://github.com/jiangdongg...

[24]Rasa框架应用:https://www.zhihu.com/column/...

[25]Rasa开源引擎介绍:https://zhuanlan.zhihu.com/p/...

[26]Rasa聊天机器人专栏开篇:https://cloud.tencent.com/dev...

[27]rasa-nlu的究极形态及rasa的一些难点:https://www.jianshu.com/p/553...

[28]Rasa官方文档手册:https://juejin.cn/post/684490...

[29]Rasa官方视频教程:https://www.bilibili.com/vide...

[30]用Rasa NLU构建自己的中文NLU系统

[31]Rasa Core开发指南:https://blog.csdn.net/AndrExp...

你可能感兴趣的:(多轮对话,开源,自然语言处理,nlp)