注:RASA版本为3.1
1.RASA简介
RASA 是构建对话机器人的开源机器学习框架。
- NLU:确定意图,捕获关键上下文信息。
- CORE:提供多轮对话管理机制,自动学习上下文与当前意图的关联性。
2. RASA系统架构
- RASA开源体系结构
- NLU:意图分类、实体提取、响应检索。以管道的方式处理用户对话。
- 对话管理:根据上下文决定对话中的下一个动作。
- 代理:接收用户输入消息,返回RASA系统的回答。连接NLU和DM,得到Action,调用Action得到回答,保存对话数据到数据存储。
- 跟踪存储:对话的存储单元,保存用户和机器人的对话。(支持自定义存储)
- postgresql,SQLite,Oracle,Redis,MongoDB,DynamoDB
- 事件代理:机器人可以发布一个消息给其他服务来处理这些消息,也可以转发RASA服务的消息到其他服务。
- RabbitMQ,Kafka,SQL
- 锁:ID产生器。当RASA时一个集群部署时,客户端发送RASA服务端的消息每次不一定会寻址到同一个服务器,需要一个全局的会话ID,在消息处于活动状态时锁定会话,保证消息的顺序处理。
- 文件系统:无差别的文件存储服务,训练好的模型可以存储在不同的位置。
- 磁盘加载、服务器加载、云存储加载
- 行动服务
- 用户可以定义任何一种Action连接到 Action Server上,通过训练学习,RASA可以将policy路由到这个Action上,使机器人热插拔一个能力成为可能。
3. RASA消息处理过程
-
消息传入后,被Interpreter(解释器)接收。
-
interpreter接收消息后,
-
将消息转换成字典(tokenizer)
-
转化成特征(featurizer)
-
提取命名实体(Extractors)
-
识别意图(Classifier)
这部分叫做自然语言理解(NLU)。interpreter将输出包括实体,意图,和对话的特征一起传给Tracker。
-
-
Tracker:用来追踪记录对话状态的对象,将当前状态(特征,意图,实体)以及历史状态信息传给Policy。
-
Policy(策略):将当前状态以及历史状态一并特征化,并传入预测模型(Policy),预测模型预测出下一个动作(Action)。
-
Action完成实际动作,并将动作结果通知到tracker,成为历史状态。
-
Action将结果返回给用户。
4. RASA项目的基本流程
- 初始化项目
- 准备NLU训练数据
- 配置NLU模型
- 准备故事(story)数据
- 定义领域(domain)
- 配置Rasa Core模型
- 训练模型
- 测试机器人
a. 常用命令
命令 | 简介 |
---|---|
rasa init | 使用示例训练数据,操作和配置文件创建一个新项目。位于空目录下运行即可 |
rasa train | 使用NLU数据和故事来训练模型,并将训练后的模型保存在中./models。 |
rasa interactive | 开始一个交互式学习会话,以通过聊天创建新的训练数据。 |
rasa shell | 加载经过训练的模型,并允许在命令行上与助手交谈。 |
rasa run | 使用训练有素的模型启动Rasa服务器。有关详细信息,请参见配置HTTP API文档。 |
rasa run actions | 使用Rasa SDK启动动作服务器。 |
rasa visualize | 把stories可视化,生成一个html文件,本地可以打开。 |
rasa test | 使用测试NLU数据和故事测试经过训练的Rasa模型。 |
rasa data split nlu | 根据指定的百分比对NLU数据进行拆分。 |
rasa data convert nlu | 在不同格式之间转换NLU训练数据。 |
rasa export | 将对话从跟踪商店存储到事件代理。 |
rasa x | 在本地启动RasaX。 |
rasa -h | 显示所有可用命令。 |
b. 项目结构
.
├── actions
│ ├── __init__.py
│ └── actions.py
├── configs
│ ├── domain.yml
│ ├── config.yml
│ ├── credentials.yml
│ └── endpoints.yml
├── data
│ ├── nlu.yml
│ └── stories.yml
├── models
│ └── <timestamp>.tar.gz
└── tests
└── test_stories.yml
4. 安装RASA
conda create -n rasa3py37 python=3.7
source activate rasa3py37
# 使用清华源
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
# 先安装指定版本的TensorFlow
pip install tensorflow-text==2.7 -i https://pypi.doubanio.com/simple
pip install tensorflow==2.7 -i https://pypi.doubanio.com/simple
# 安装rasa
pip install rasa -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com --use-deprecated=legacy-resolver
若出现包冲突,则pip uninstall 并装对应版本的包
# 安装成功后,初始化,自动生成rasa项目所需文件
rasa init --no-prompt
# 测试
rasa shell
安装成功会在指定目录下生成初始化文件。
参考文献:
[1] 孔小泉,王冠.Rasa实战:构建开源对话机器人[M].电子工业出版社.2022:201.
[2] rasa的安装:https://zhuanlan.zhihu.com/p/439666645
[3] (二)RASA开源引擎介绍 https://zhuanlan.zhihu.com/p/331806270