本文主要介绍 Rasa 构建助手的基础知识和 Rasa 项目的目录结构。在本教程中,您将构建一个简单友好的助手,该助手将询问您的工作状况,并在您难过的时候向您发送有趣的图片为您加油。
本文的目录结构:
- 创建一个新项目
- 查看 NLU 训练数据
- 定义模型配置
- 定义 Stories
- 定义 Domain
- 训练模型
- 对话助手
1. 创建一个新项目
第一步是通过以下命令,创建一个新的 Rasa 项目。
rasa init --no-prompt
该命令将创建 Rasa 项目所需要的所有文件,并在一些示例数据上训练一个简单的 bot,如果你不使用 --no-prompt,初始化时会询问你一些关于如何设置项目的问题。
将创建以下文件:(标有星号*的文件十分重要)
文件名 | 说明 |
---|---|
__init__.py |
一个空文件,帮助 python 查找你的 actions |
actions.py |
自定义自己的 actions 的地方 |
config.yml '*' |
NLU 和 Core 模型的配置 |
credentials.yml |
连接其他服务的详细信息 |
data/nlu.md '*' |
NLU 的训练数据 |
data/stories.md '*' |
场景 stories |
domain.yml '*' |
助手的域名 |
endpoints.yml |
连接 Facebook Messager 等第三方服务的详细信息 |
models/ |
初始化模型 |
2. 查看 NLU 训练数据
Rasa 助手的第一部分是 NLU 模型,NLU 是自然语言理解,是用来将用户的消息转换为结构化数据。为了让 Rasa 能够做到这一点,你需要提供训练数据,这些训练数据显示 Rasa 助手如何理解用户信息,然后通过这些数据来训练模型。
cat data/nlu.md
以 ## 开头的行用来定义你的意图 intents,它们是具有相同含义的消息组。当你向助手发送消息时,Rasa 将预测正确的意图。你可以在Rasa 入门教程 NLU 系列(二)中查看更详细的信息。
## intent:greet
- hey
- hello
- hi
- good morning
- good evening
- hey there
## intent:goodbye
- bye
- goodbye
- see you around
- see you later
## intent:bot_challenge
- are you a bot?
- are you a human?
- am I talking to a bot?
- am I talking to a human?
3. 定义模型配置
配置文件中定义了 NLU 模型和 Core 模型的组件,本示例中的 NLU 模型将使用 supervised_embeddings 管道,你可以在Rasa 入门教程 NLU 系列(三)了解不同的 NLU 管道。
cat config.yml
language 和 pipeline 定义 NLU 模型应该如何构建,policies 定义 Core 模型将使用什么策略。
# Configuration for Rasa NLU.
# https://rasa.com/docs/rasa/nlu/components/
language: en
pipeline: supervised_embeddings
# Configuration for Rasa Core.
# https://rasa.com/docs/rasa/core/policies/
policies:
- name: MemoizationPolicy
- name: KerasPolicy
- name: MappingPolicy
4. 定义 Stories
在此阶段,你将教你的助手如何回复你的消息,这被称为:对话管理,由你的 Core 模型进行处理。
Core 模型以训练 Stories 的形式从真实的对话数据中学习,Story 是用户和助手之间的真实对话,intents 和 entities 的所在行反映了用户的输入,action 名称所在为助手做出的响应内容。
下面是一个简单的对话示例,用户打招呼,助手做出响应,这就是一个 story:
## story1
* greet
- utter_greet
你可以在这里查看 Stories 的完整信息。
以符号 - 开头的行是助手要执行的操作,在教程中,所有的动作都是发送回复用户的消息,例如:utter_greet,但是一般而言,一个动作可以执行任何操作,包括调用 API 和与外界交互。
运行一下命令查看 data/stories.md 文件中的示例 Stories:
cat data/stories.md
5. 定义 Domain
接下来我们需要定一个 Domain,它定义了你的助手所生活的世界:应该期望得到什么用户输入,应该能够预测什么 actions,如何响应以及存储什么信息。助手的 Domain 保存在 domain.yml 文件中。
cat domain.yml
Domain 文件中不同部分对应的说明如下:
名称 | 说明 |
---|---|
intents |
你希望用户说的话 |
actions |
你的助手可以说的话 |
templates |
你的助手的说话模板 |
如何搭配在一起? Rasa Core 的工作是在对话的每个步骤中选择正确的 action 去执行。在这种情况下,我们的 actions 只会向用户发送一条消息,这些简单的发送动作是在 Domain 文件中以 actions 为行,utter_开头。助手可以根据 templates 部分中的模板响应消息。若要自定义构建除了发送消息之外的 actions,请参考自定义 actions。
6. 训练模型
每当我们添加新的 NLU 或 Core 数据时,又或者更新 Domain 配置时,我们都需要根据示例 Stories 和 NLU 数据重新训练神经网络。为此,请运行以下命令。该命令将调用 Rasa Core 和 NLU 训练函数,并将训练后的模型存储到 models/ 目录下。该命令将自动重新训练发生改变的数据部分或者配置部分。
rasa train
echo "Finished training."
rasa train 命令将同时查找 NLU 和 Core 数据,并将训练成一个组合模型。
7. 对话助手
恭喜你!你刚刚构建了一个完全由机器学习驱动的助手。
下一步就是尝试一下!如果你在本地计算机上遵循本教程,请运行以下命令开始与您的助手交谈:
rasa shell
作者:关于我
备注:转载请注明出处。
如发现错误,欢迎留言指正。