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

这里写自定义目录标题

  • 0. 背景
  • 1. 安装
  • 2. 创建新项目
  • 3. 查看NLU训练数据集
  • 4. 定义模型的配置
  • 5. 书写自己的Stories
  • 6. 定义 Domain
  • 7. 训练模型
  • 8. 与助手进行对话

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

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

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

2. 创建新项目

在当前目录创建Rasa project:

rasa init

如果使用如下命令:

rasa init --no-prompt

该命令创建Rasa项目需要的文件,以及训练一个简单对话机器人需要的数据。如果命令不使用--no-prompt标识,那么在创建过程中需要回答几个关于项目创建的问题。
Rasa教程系列-0-Rasa安装和项目创建_第1张图片

使用rasa init --no-prompt创建项目后目录下的文件:
Rasa教程系列-0-Rasa安装和项目创建_第2张图片

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

  • _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?

其中以**##**开始的行定义了意图(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

在上述例子中,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

用户说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

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

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

7. 训练模型

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

8. 与助手进行对话

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

rasa shell

在这里插入图片描述

你可能感兴趣的:(NLP,Rasa,智能问答)