Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

VK作者磐创AI团队出品出品奇予纪编辑

Rasa 聊天机器人专栏(上)

安装

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项目的结构。你可以在这里测试它,而不需要安装任何东西。你也可以安装Rasa并在命令行中执行。
在本教程中,你将构建一个简单、友好的助手,它将询问你的近况,并在你难过时发送一张有趣的照片给你,让你振作起来。
mark

1.创建新的项目

第一步是创建一个新的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

languagepipeline键指定应该如何构建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]()

专业用户独享

本文为机器之心深度精选内容,专业认证后即可阅读全文
开启专业认证
工程聊天机器人
5
相关数据
混淆矩阵技术

混淆矩阵也称误差矩阵,是表示精度评价的一种标准格式,用n行n列的矩阵形式来表示。具体评价指标有总体精度、制图精度、用户精度等,这些精度指标从不同的侧面反映了图像分类的精度。在人工智能中,混淆矩阵(confusion matrix)是可视化工具,特别用于监督学习,在无监督学习一般叫做匹配矩阵。矩阵的每一行表示预测类中的实例,而每一列表示实际类中的实例(反之亦然)。 这个名字源于这样一个事实,即很容易看出系统是否混淆了两个类。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

自然语言理解技术

自然语言理解是人工智能的核心课题之一,也被广泛认为是最困难和最具标志性的任务。最经典的两个人工智能思想实验——图灵测试和中文房间,都是围绕自然语言理解来构建的。自然语言理解在人工智能技术体系中的重要性不言而喻,它一方面承载着机器和人的交流,另一方面直达知识和逻辑。自然语言理解也是人工智能学者孜孜以求的圣杯,机器学习的巨擘 Michael I. Jordan 就曾经在 Reddit 上的 AMA(Ask Me Anything)栏目中畅想用十亿美元建立一个专门用于自然语言理解的实验室。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

交叉验证技术

交叉验证,有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证的目标是定义一个数据集到“测试”的模型在训练阶段,以便减少像过拟合的问题,得到该模型将如何衍生到一个独立的数据集的提示。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

暂无评论
暂无评论~