当前位置:   article > 正文

Rasa教程系列-0-Rasa安装和项目创建_rasa详细教程

rasa详细教程

0. 背景

事先说明:本系列Rasa教程基于Rasa 1.6.1版本。
Rasa是一个开源机器学习框架,可用于构建具有上下文理解能力的AI助手(assistant)。
Rasa有两个主要模块:

  • Rasa NLU :用于理解用户消息,包括意图识别和实体识别,把用户的输入语句转换为结构化的数据。
  • Rasa Core:是一个对话管理平台,用于决定对话和下一步做什么。
  • Channels 和 integrations:将assistant连接到用户和后端系统。

Rasa X 是一个用以改进Rasa构建的上下文助理的工具,包括用户界面和 REST API。

1. 安装

rasa 安装:

pip install rasa
  • 1

如果想要同时安装rasa 和 rasa x:

pip install rasa-x --extra-index-url https://pypi.rasa.com/simple
  • 1

2. 创建新项目

在当前目录创建Rasa project:

rasa init
  • 1

如果使用如下命令:

rasa init --no-prompt
  • 1

该命令创建Rasa项目需要的文件,以及训练一个简单对话机器人需要的数据。如果命令不使用--no-prompt标识,那么在创建过程中需要回答几个关于项目创建的问题。
在这里插入图片描述

使用rasa init --no-prompt创建项目后目录下的文件:
在这里插入图片描述

创建的文件如下,其中*标记的为最重要的部分:

  • _init_.py,用来帮助Python找到action的空文件
  • actions.py,用来自定义actions的文件
  • config.yml *,NLU和Core模型的配置文件
  • credentials.yml,用来连接到其他服务(services)
  • data/nlu.md *,用于NLU训练的数据
  • data/stories.md *,用于训练Core模型的故事数据集
  • domain.yml *,assistant的领域(assistant’s domain)配置文件
  • endpoints.yml,连接到类似于Facebook的messenger的详细配置(即可以配置到其他类似Facebook的平台)
  • models/.tar.gz,初始化模型

3. 查看NLU训练数据集

Rasa的NLU(即自然语言理解)模块,用来将用户消息转换成结构数据。在Rasa中,可以通过提供训练示例,告诉Rasa如何理解用户消息,然后训练获得模型。可以看一下上述初始化的项目下的nlu.md文件内容:

## intent:greet
- hey
- hello
- hi
- good morning
- good evening
- hey there

## intent:goodbye
- bye
- goodbye
- see you around
- see you later

## intent:affirm
- yes
- indeed
- of course
- that sounds good
- correct

## intent:deny
- no
- never
- I don't think so
- don't like that
- no way
- not really

## intent:mood_great
- perfect
- very good
- great
- amazing
- wonderful
- I am feeling very good
- I am great
- I'm good

## intent:mood_unhappy
- sad
- very sad
- unhappy
- bad
- very bad
- awful
- terrible
- not very good
- extremely sad
- so sad

## intent:bot_challenge
- are you a bot?
- are you a human?
- am I talking to a bot?
- am I talking to a human?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56

其中以**##**开始的行定义了意图(intents),是具有相同含义消息的集合。Rasa中NLU模块的任务是,预测用户输入的消息的正确意图。具体数据格式可以参见NLU Training Data Format

4. 定义模型的配置

config.yml配置文件将会在NLU和Core中用到。上述项目中的config.ml文件的内容为:

# 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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在上述例子中,NLU模型会使用supervised_embeddings流水线。不同NUL模型的流水线可以在这里查看
其中languagepipeline这两个关键词,用来定义NLU模型应该如何构建。policies关键词定义核心模型中使用到的policies,更多关于policies的可以查看这里

5. 书写自己的Stories

在这个阶段,通过Stories将教Rasa assistant 如何响应用户的消息,这个叫做对话管理,由于Core model所决定。

Core model以训练"stories"的形式从真实对话中进行学习。一个story是用户和assistant之间的真实的一次对话。带有意图和实体的行反应了用户的输入和assistant将响应的action名。上述项目的stories.md内容如下:

## happy path
* greet
  - utter_greet
* mood_great
  - utter_happy

## sad path 1
* greet
  - utter_greet
* mood_unhappy
  - utter_cheer_up
  - utter_did_that_help
* affirm
  - utter_happy

## sad path 2
* greet
  - utter_greet
* mood_unhappy
  - utter_cheer_up
  - utter_did_that_help
* deny
  - utter_goodbye

## say goodbye
* goodbye
  - utter_goodbye

## bot challenge
* bot_challenge
  - utter_iamabot
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

用户说hello 时候,意图分类为greet,assistant 根据utter_greet进行回复。以-为起始的句子表示 assistant 所做出的 action。本系列教程中所有的actions都是发送给用户的,比如utter_greet。需要注意的是,一个action是可以做任务事情的,包括调用 API 或者与外部世界进行交互。更多关于Stories的具体格式可以参考这里

6. 定义 Domain

下一个事情需要处理的是定义一个领域(Domain)。Domain定义了 assistant 所处的世界:期望从用户那边获取什么输入,assistant 能够预测什么行为,如何做出响应,存储什么消息。domain 相关的内容存储在domain.yml文件中。上述上面的domain.yml内容如下:

intents:
  - greet
  - goodbye
  - affirm
  - deny
  - mood_great
  - mood_unhappy
  - bot_challenge

actions:
- utter_greet
- utter_cheer_up
- utter_did_that_help
- utter_happy
- utter_goodbye
- utter_iamabot

templates:
  utter_greet:
  - text: "Hey! How are you?"

  utter_cheer_up:
  - text: "Here is something to cheer you up:"
    image: "https://i.imgur.com/nGF1K8f.jpg"

  utter_did_that_help:
  - text: "Did that help you?"

  utter_happy:
  - text: "Great, carry on!"

  utter_goodbye:
  - text: "Bye"

  utter_iamabot:
  - text: "I am a bot, powered by Rasa."

session_config:
  session_expiration_time: 60
  carry_over_slots_to_new_session: true
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

其中intents:定义了期望用户的输入,即意图分类的详情;
actions:定义了 assistant 能够说什么和做什么;
templates:定义了 assistant 相应的消息模板。

这些是如何一起协调工作的呢?Rasa核心的任务是针对每个对话选择合正确的响应。在这个例子中,我们的响应是简单的发送消息给用户,这里面的响应都用utter_开头。assistant 根据模板进行响应。可以参见 Custom Actions 创建更复杂的响应。

7. 训练模型

一旦添加了新的NLU或Core数据,或更新 domain 或配置文件的时候,就需要重新训练模型。执行下面的命令rasa train。这个命令会调用Rasa Core 和NLU的训练函数,并将训练得到的模型存储到models/目录下面。这个命令会自动重新训练更新的部分。

8. 与助手进行对话

到目前为止就建立了一个基于机器学习的对话助手。下一步通过执行下面的命令和assistant进行对话:

rasa shell
  • 1

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/527659
推荐阅读
相关标签
  

闽ICP备14008679号