Rasa 聊天机器人专栏(一):基本原理介绍

作者 | VK

编辑 | 奇予纪

出品 | 磐创AI团队出品

本页面解释了用Rasa构建助手的基本原理,并展示了Rasa项目的结构。你可以在这里测试它,而不需要安装任何东西。你也可以安装Rasa并在命令行中执行。

在本教程中,你将构建一个简单、友好的助手,它将询问你的近况,并在你难过时发送一张有趣的照片给你,让你振作起来。

mark

1.创建新的项目

第一步是创建一个新的Rasa项目。要做到这一点,运行下面的代码:

代码语言:javascript
复制
rasa init --no-prompt

rasa init命令创建rasa项目所需的所有文件,并根据一些示例数据训练一个简单的机器人。如果你省略了——no-prompt参数,将会询问你一些关于项目设置的问题。

这将创建以下文件:

文件名称

作用说明

init.py

帮助python查找操作的空文件

actions.py

为你的自定义操作编写代码

config.yml ‘*’

配置NLU和Core模型

credentials.yml

连接到其他服务的详细信息

data/nlu.md ‘*’

你的NLU训练数据

data/stories.md ‘*’

你的故事

domain.yml ‘*’

你的助手的域

endpoints.yml

接到fb messenger等通道的详细信息

models/.tar.gz

你的初始模型

最重要的文件用“*”标记。你将在本教程中了解所有这些文件。

2.查看你的NLU训练数据

Rasa助手的第一个部分是NLU模型。NLU代表自然语言理解,这意味着将用户消息转换为结构化数据。要使用Rasa做到这一点,你需要提供一些训练示例,展示Rasa应该如何理解用户消息,然后通过展示的这些示例来训练模型。

运行下面的代码,查看由rasa init命令创建的NLU训练数据:

代码语言:javascript
复制
cat data/nlu.md

##开始的行定义意图的名称,这些名称是具有相同含义的消息组。Rasa的工作是预测用户向助手发送新消息时的正确意图。你可以在[训练数据格式]()中找到数据格式的所有细节。

3. 定义你的模型配置

配置文件定义了模型将使用的NLU和Core组件。在本例中,你的NLU模型将使用supervised_embeddings管道。你可以在[这里]()了解不同的NLU管道。

让我们看一下你的模型配置文件。

代码语言:javascript
复制
cat config.yml

languagepipeline键指定应该如何构建NLU模型。policies键定义Core模型将使用的策略。

4. 写下你的第一个故事

在这个阶段,你将教会你的助手如何回复你的信息。这称为对话管理(dialogue management),由你的Core模型来处理。

Core模型以训练“故事”的形式从真实的会话数据中学习。故事是用户和助手之间的真实对话。带有意图和实体的行反映了用户的输入和操作名称,操作名称展示了助手应该如何响应。

下面是一个简单对话的例子。用户说你好,助手也说你好。故事是这样的:

代码语言:javascript
复制
## story1
* greet
   - utter_greet

你可以在[故事]()中看到完整的细节。

-开头的行是助手所采取的操作。在本教程中,我们所有的操作都是发送回用户的消息,比如utter_greet,但是一般来说,一个操作可以做任何事情,包括调用API和与外部世界交互。

运行下面的命令查看文件data/stories.md中的示例故事:

代码语言:javascript
复制
cat data/stories.md

5.定义域

接下来我们需要做的是定义一个域。域定义了助手所处的环境:它应该期望得到什么用户输入、它应该能够预测什么操作、如何响应以及存储什么信息。我们助手的域名保存在一个名为domain.yml的文件中:

代码语言:javascript
复制
cat domain.yml

那么各个部分是什么意思呢?

解释说明

intents

你希望用户说的话

actions

你的助手能做的和能说的

templates

你的助手可以说的东西的模板字符串

这些如何配合呢?Rasa Core的工作是在对话的每个步骤中选择正确的操作来执行。在本例中,我们的操作只是向用户发送一条消息。这些简单的话语操作是从域中以utter_开头的操作。助手将根据templates部分中的模板返回一条消息。请参阅[自定义操作](),以构建不仅仅用于发送消息的操作。

6.训练模型

每当我们添加新的NLU或Core数据,或更新域或配置时,我们都需要根据示例故事和NLU数据重新训练一个神经网络。为此,运行下面的命令。该命令将调用Rasa Core和NLU训练函数,并将训练后的模型存储到models/目录中。该命令只会在数据或配置发生更改时自动对不同的模型部件进行重新训练。

代码语言:javascript
复制
rasa train
echo "Finished training."

rasa train命令将同时查找NLU和Core数据,并训练一个组合模型。

7. 和你的助手谈谈

恭喜你! ? 你刚刚建立了一个完全由机器学习驱动的助手。 下一步就是尝试一下!如果你正在本地机器上学习本教程,请运行以下命令与助手对话:

代码语言:javascript
复制
rasa shell

你也可以用Rasa X来收集更多的对话以提高你的助手: 尝试[Rasa X]()