【Python大语言模子系列】开源机器人对话系统框架RASA介绍与利用(案例分析 ...

打印 上一主题 下一主题

主题 839|帖子 839|积分 2517

这是我的第361篇原创文章。


一、引言

Rasa是一个开源的对话式 AI 框架,用于构建自定义的对话式 AI 助手。它可以处理自然语言理解(NLU)和对话管理(DM),使得开辟者能够轻松地创建功能丰富的对话式 AI 应用。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 NLU 和Rasa Core,旧版本:rasa-nlu和rasa-core是分开安装的,最新版本:rasa 将二者做了合并。
Rasa NLU 是核心模块之一,NLU是英文Natural Language Understanding的简称,也就是自然语言理解,这个模块用于对用户消息内容进行语义理解,并将效果转换成结构化的数据。在Rasa这里,需要提供一份练习数据,Rasa NLU会基于这份数据进行模子练习,然后通过模子对用户消息进行语义理解,重要是意图识别和实体提取。


  • 意图分类器重要是对用户的每一次对话进行意图识别,确定用户的每次意图,确定客户每次问的意图是哪种,需要做什么。一样平常使命型对话中,意图识别都是确定的集合,需要人为先确定使命意图类型,然后在实际场景中进行意图分类。RASA的意图分类器重要是完成这一使命。
  • 实体提取器重要是对用户的每一次对话中进行定名实体识别,实体做为slot(槽)信息进行填充。举例来说,用户意图为订火车票,那机器人必须知道是从那里出发目的地是那里,这个信息就需要从用户对话中提取地名这个定名实体。RASA的实体提取器支持这一个功能。
NLU组件也是一个可细分pipeline结构,过程是Tokenize->Featurize->NER Extract->Intent Classify。
例如,下面句子:
"I am looking for a Mexican restaurant in the center of town"
返回结构化数据:
{ "intent": "search_restaurant","entities": {    "cuisine" : "Mexican",    "location" : "center"  }}
Rasa_NLU_Chi 作为 Rasa_NLU 的一个 fork 版本,加入了jieba 作为中文的 tokenizer,实现了中文支持。
Rasa Core是一个对话管理平台,用于举行对话和决定下一步做什么。Rasa core是Rasa框架提供的对话管理模块,它雷同于谈天机器人的大脑,重要的使命是维护更新对话状态和动作选择,然后对用户的输入作出响应。所谓对话状态是一种机器能够处理的对谈天数据的表征,对话状态中包含所有大概会影响下一步决定的信息,如自然语言理解模块的输出、用户的特性等;所谓动作选择,是指基于当前的对话状态,选择接下来符合的动作,例如向用户追问需增补的信息、实行用户要求的动作等。
RASA在处理对话时,团体流程是pipeline结构,自然语言理解(NLU)、对话状态追踪(DST)以及对话策略学习(DPL)一系列流程处理下来,再判断实行下一个动作。利用Rasa构建的助手响应消息的根本步骤:




  • 首先,将用户输入的Message传递到Interpreter(NLU模块),该模块负责识别Message中的"意图(intent)“和提取所有"实体”(entity)数据;
  • 其次,Rasa Core会将Interpreter提取到的意图和实体传给Tracker对象,该对象的重要作用是跟踪会话状态(conversation state);
  • 第三,利用policy记录Tracker对象的当前状态,并选择实行相应的action,其中,这个action是被记录在Track对象中的;
  • 最后,将实行action返回的效果输出即完成一次人机交互。
几个术语


  • 意图:用户打算问什么?
  • 实体:用户查询中重要的信息是什么?
  • 故事:即对话脚本,对话进行的大概方式是什么?
  • 举措:机器人应根据特定请求接纳什么行为步伐?


四、利用

1、安装rasa
利用pip install rasa[full]安装Rasa,则会为每种配置安装Rasa的所有依赖项(好比spaCy、MITIE)
2、创建一个新的rasa项目
  1. rasa init
复制代码


项目结构:一个典范的 Rasa 项目包含以下文件和文件夹:






  • credentials.yml: 存储与外部服务(如 Facebook Messenger、Slack 等)的 API 根据。
  • config.yml: 存储 Rasa 的配置信息,如 NLU 管道、策略等。
  • data/: 存储练习数据,包括 NLU数据(练习意图识别模子)和对话数据(练习对话策略选择模子)。
  • domain.yml: 定义对话的领域,包括实体、槽、意图、动作、模板等。
  • credentials.yml: 存储与外部服务的 API 根据。
  • endpoints.yml: 定义 Rasa 服务器的端点,如模子存储、自定义操作等。
3、根据业务配置文件
nlu.yaml


nlu文件是告诉模子用户大概会说什么。给的例子是模拟了平时人在相关情形下常说的话。可以理解为,有监视的机器学习,我们给模子提供的学习数据。为了创建自定义谈天机器人,我们将在其中编写一些意图,同时确保意图名称没有重复,并且每个意图确保至少给出两个示例。
domain.yml


这个文件列出了nlu里的所有类型,而responses则是我们告诉机器人,当用户做出了nlu里的相关行为之后,应该怎样回应(其实就是雷同一个判断分支的代码逻辑),好比当我识别出用户想让我讲个笑话的时候,我们就复兴本日的风儿甚是喧嚣啊。当然,我这里只定义了一条,当定义多条复兴信息时,机器人就会随机复兴其中的一条。
sotries.yaml:


这里其实是模拟了大概发生的对话环境,每一条练习数据是一个story,即是一次完整的场景对话(多个intent-action),好比第一个沮丧环境,机器人问候之后,用户表示不开心,机器人会做一个cheer_up行为,然后询问刚才的鼓励行为是否有效,假如用户复兴确认,机器人会进行说请保持,也就是23行的happy行为。


4、练习模子
准备好domain.yml和sotries.yaml数据之后,就可以进行模子的练习了。Rasa会根据这些数据来练习机器人的答复策略,模子的输入数据是历史对话记录,lable是下一个决定action。模子本质上是num_actions个种别的多分类。
这里它直接问我要不要练习这个初始化的模子,我直接输入Y就可以。等价于命令
  1. rasa train
复制代码
练习过程:


练习完成:


练习完成之后这将在models/文件夹下生成一个练习好的模子。
5. 测试模子
利用以下命令测试模子:
  1. rasa test
复制代码
这将在results/文件夹下生成测试效果。


6、运行
现在,可以将此谈天机器人集成到自己的网站大概毗连到任何其他平台,但是必须创建自己的自定义毗连器。有两种运行Rasa的方法:在Shell和localhost上。
这里它直接问我要不要对话这个练习好的模子,我直接输入Y就可以。等价于命令
  1. rasa shell
复制代码


另一种方法是在本地服务器上运行Rasa。为此,只需在Rasa文件夹中打开的终端上运行以下命令:
  1. rasa run
复制代码
这将在本地系统上运行Rasa,并在本田主机的5005端口公开REST端点。为了与Rasa服务器公开的REST端点进行通讯,可以利用cURL命令(对于Linux爱好者)或Postman。这里推荐Postman,由于它易于利用。


7、摆设对话式 AI 助手
要将你的对话式 AI 助手摆设到生产环境,你可以利用 Rasa 的 REST API。首先,在endpoints.yml文件中配置端点:
  1. action_endpoint:
  2. url: "http://localhost:5055/webhook"
  3. model:
  4.   url: "http://localhost:5005/model"
  5.   token: "your-token"
  6. tracker_store:
  7.   type: "sql"
  8.   dialect: "sqlite"
  9.   db: "rasa.db"
复制代码
然后,利用以下命令启动 Rasa 服务器:
  1. rasa run
复制代码
现在你的对话式 AI 助手已经摆设到生产环境,可以通过 REST API 与外部服务进行交互。
   作者简介:
  读研期间发表6篇SCI数据发掘相关论文,现在某研究院从事数据算法相关科研工作,联合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列根本知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小同伴可以关注底部公众号添加作者微信。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表