安装
Rasa 的推荐安装方式是通过pip
:
pip install rasa-x --extra-index-url https://pypi.rasa.com/simple
这将同时安装Rasa和Rasa X。如果你不想使用Rasa X,只需要运行pip install Rasa
除非你已经安装了numpy和scipy,否则我们强烈建议你安装并使用Anaconda。
如果你想使用Rasa的开发版本,你可以从GitHub上获得:
git clone https://github.com/RasaHQ/rasa.git
cd rasa
pip install -r requirements.txt
pip install -e .
Windows系统下的环境要求
确保安装了Microsoft vc++编译器,这样python就可以编译任何依赖项。你可以从Visual Studio获得编译器。下载安装程序并在列表中选择vc++构建工具。
NLU 管道依赖项
Rasa NLU有用于识别意图和实体的不同组件,其中大多数都有一些额外的依赖项。
当你训练NLU模型时,Rasa将检查是否安装了所有必需的依赖项,并告诉你缺少哪一个依赖项。[选择管道]()的页面将帮助你选择要使用的管道。
注意:
如果你想确保为你可能需要的任何组件安装了依赖项,并且不介意有其他依赖项存在,那么你可以使用
pip install -r alt_requirements/requirements_full.txt
安装所有依赖项。
一个很好的开始:spaCy提供的pretrained embeddings
pretrained_embeddings_spacy
管道组合了几个不同的库,是一个流行的选项。更多信息请查看spaCy文档。
你可以用以下命令安装:
pip install rasa[spacy]
python -m spacy download en_core_web_md
python -m spacy link en_core_web_md en
这将安装Rasa NLU、spacy及其英语语言模型。我们建议至少使用“中型”模型(_md
),而不是spacy默认的小型en_core_web_sm
模型。小模型运行需要更少的内存,但会在一定程度上降低意图分类(intent classification )性能。
第一选择:Tensorflow
要使用 supervised_embeddings
管道,你需要安装Tensorflow,并安装sklearn-crfsuite库来进行实体识别。要做到这一点,只需运行以下命令:
pip install rasa
第二个选择:MITIE
MITIE后端对于小型数据集执行得很好,但是如果你有数百个示例,那么训练可能会花费很长时间。我们可能会在未来弃用MITIE后端。
首先,运行:
pip install git+https://github.com/mit-nlp/MITIE.git
pip install rasa[mitie]
然后下载MITIE模型。你所需要的文件是total_word_feature_extract .dat
。可以将其保在任何地方。如果你想使用MITIE,你需要告诉它在哪里可以找到这个文件(在本例中,它保存在项目目录的data文件夹中)。
language: "en"
pipeline:
- name: "MitieNLP"
model: "data/total_word_feature_extractor.dat"
- name: "MitieTokenizer"
- name: "MitieEntityExtractor"
- name: "EntitySynonymMapper"
- name: "RegexFeaturizer"
- name: "MitieFeaturizer"
- name: "SklearnIntentClassifier"
单独使用MITIE进行训练可能非常慢,但是你可以使用这种配置:
language: "en"
pipeline:
- name: "MitieNLP"
model: "data/total_word_feature_extractor.dat"
- name: "MitieTokenizer"
- name: "MitieEntityExtractor"
- name: "EntitySynonymMapper"
- name: "RegexFeaturizer"
- name: "MitieIntentClassifier"
基本原理介绍
第一步是创建一个新的Rasa项目。要做到这一点,运行下面的代码:
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训练数据:
cat data/nlu.md
以##
开始的行定义意图
的名称,这些名称是具有相同含义的消息组。Rasa的工作是预测用户向助手发送新消息时的正确意图。你可以在[训练数据格式]()中找到数据格式的所有细节。
3. 定义你的模型配置
配置文件定义了模型将使用的NLU和Core组件。在本例中,你的NLU模型将使用supervised_embeddings
管道。你可以在[这里]()了解不同的NLU管道。
让我们看一下你的模型配置文件。
cat config.yml
language
和pipeline
键指定应该如何构建NLU模型。policies
键定义Core模型将使用的策略。
4. 写下你的第一个故事
在这个阶段,你将教会你的助手如何回复你的信息。这称为对话管理(dialogue management),由你的Core模型来处理。
Core模型以训练“故事”的形式从真实的会话数据中学习。故事是用户和助手之间的真实对话。带有意图和实体的行反映了用户的输入和操作名称,操作名称展示了助手应该如何响应。
下面是一个简单对话的例子。用户说你好,助手也说你好。故事是这样的:
## story1
* greet
- utter_greet
你可以在[故事]()中看到完整的细节。
以-
开头的行是助手所采取的操作。在本教程中,我们所有的操作都是发送回用户的消息,比如utter_greet
,但是一般来说,一个操作可以做任何事情,包括调用API和与外部世界交互。
运行下面的命令查看文件data/stories.md
中的示例故事:
cat data/stories.md
5.定义域
接下来我们需要做的是定义一个域。域定义了助手所处的环境:它应该期望得到什么用户输入、它应该能够预测什么操作、如何响应以及存储什么信息。我们助手的域名保存在一个名为domain.yml
的文件中:
cat domain.yml
那么各个部分是什么意思呢?
解释说明 | |
---|---|
intents | 你希望用户说的话 |
actions | 你的助手能做的和能说的 |
templates | 你的助手可以说的东西的模板字符串 |
这些如何配合呢?Rasa Core的工作是在对话的每个步骤中选择正确的操作来执行。在本例中,我们的操作只是向用户发送一条消息。这些简单的话语操作是从域中以utter_
开头的操作。助手将根据templates
部分中的模板返回一条消息。请参阅[自定义操作](),以构建不仅仅用于发送消息的操作。
6.训练模型
每当我们添加新的NLU或Core数据,或更新域或配置时,我们都需要根据示例故事和NLU数据重新训练一个神经网络。为此,运行下面的命令。该命令将调用Rasa Core和NLU训练函数,并将训练后的模型存储到models/
目录中。该命令只会在数据或配置发生更改时自动对不同的模型部件进行重新训练。
rasa train
echo "Finished training."
rasa train
命令将同时查找NLU和Core数据,并训练一个组合模型。
7. 和你的助手谈谈
恭喜你! 你刚刚建立了一个完全由机器学习驱动的助手。
下一步就是尝试一下!如果你正在本地机器上学习本教程,请运行以下命令与助手对话:
rasa shell
你也可以用Rasa X来收集更多的对话以提高你的助手:
尝试[Rasa X]()