• 章节一: 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开源体系结构

            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消息处理过程

     上图展示了从用户的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...

  • 相关阅读:
    React 注意事项
    能量守恒和打造能量缺口
    猿创征文 第二季| #「笔耕不辍」--生命不息,写作不止#
    JavaScript 在未来可能出现哪些新的应用场景?
    【云原生之kubernetes实战】在k8s集群环境下部署Tomcat应用
    博科交换机使用
    用代码玩转迷你图:手把手教你用编程语言打造简洁易读的数据图表!
    中高级Java程序员,你不得不掌握的基本功,挑战20k+
    Jupyter Notebook的安装和使用
    在 openEuler 22.03 上安装 KubeSphere 实战教程
  • 原文地址:https://blog.csdn.net/qq_35273499/article/details/127600824