rasa搭建多轮对话系统(一)

文章目录

  • rasa配置文件通俗理解
  • 安装rasa:
    • 1、安装rasa_core
    • 2、安装rasa_nlp
  • 配置文件
    • stories文件
    • domain文件
  • 模型训练命令
  • 开启对话服务:
  • 添加Rasa NLU
    • nlu文件配置
    • 配置nlu_config
  • NLU训练命令:
  • 开启对话服务
  • 添加slot
    • 添加slot配置
  • action配置:
    • rasa_core_sdk安装
    • endpoints
    • action代码
  • 其他配置
    • stories文件
    • domain文件
  • 执行命令

关于rasa的原理信息请参考 rasa指南也是本文参考内容主要来源,只是有些小问题做了改进,本文主要带初学者搭建系统入门,想在实际项目中使用,请关注后续内容。

来源:https://terrifyzhao.github.io/2018/09/17/Rasa使用指南01.html

rasa配置文件通俗理解

story文件定义了聊天流程模板,多轮对话按照模板进行对话,story中有意图和行为,意图决定了返回什么行为。
domain则是定义了意图有哪些,行为有哪些,行为的具体内容是什么。
story、domain、nlu文件之间的关系如下:
rasa搭建多轮对话系统(一)_第1张图片有了slot之后呢?

rasa搭建多轮对话系统(一)_第2张图片

安装rasa:

1、安装rasa_core

pip install rasa_core

执行上面的命令这时可能会出现C++环境问题如下在这里插入图片描述
这里提供了C++的文件在windows中双击安装即可。
网盘地址:https://pan.baidu.com/s/1kQvBw1dg8qzF-e7DvH8TWw
提取码:ef5y

2、安装rasa_nlp

pip install rasa_nlu[tensorflow]

配置文件

stories文件

首先配置stories文件,注意编码格式utf-8,在编辑内容保存的时候检查文件保存格式。文件名是stories.md,文件的具体内容如下:

## story_happy 
* greet
 - utter_greet 
* mood_happy
 - utter_happy 
## story_unhappy 
* greet2
 - utter_greet 
* mood_unhappy
 - utter_unhappy
  • ##表示story的标题
  • *表示意图
  • 表示行为

domain文件

接下来配置domain文件,文件名是domain.yml,注意编码格式utf-8,在编辑内容保存的时候检查文件保存格式。文件的具体内容如下:

intents:
  - greet
  - mood_happy
  - mood_unhappy

actions:
- utter_greet
- utter_happy
- utter_unhappy

templates:
  utter_greet:
  - text: "你好,你今天过的怎么样"

  utter_happy:
  - text: "那很棒棒哦"

  utter_unhappy:
  - text: "咋了,可以告诉我吗"

domain.yml中的内容要与stories.md中的内容对应上

  • intents表示意图
  • actions表示行为
  • templates模板

注意文件的编码格式,不然会报错如下:
在这里插入图片描述

模型训练命令

以上的文件存放在同一目录下,在当前目录中执行下面的命令:

python -m rasa_core.train -d domain.yml -s stories.md -o models/dialogue

-o表示模型存放的位置
训练过程:
rasa搭建多轮对话系统(一)_第3张图片

开启对话服务:

执行下面的命令,开启对话服务:

python -m rasa_core.run -d models/dialogue

输入内容就可以对话了。

添加Rasa NLU

nlu文件配置

配置nlu文件,文件名nlu.md,文件内容如下:

## intent:greet
- 你好
- 上午好
- 下午好
- 早上好
- 晚上好

## intent:mood_happy
- 很好
- 我很好

## intent:mood_unhappy
- 我很难受
- 我心情很差

配置nlu_config

配置nlu_config文件,文件名nlu_config.yml,文件内容如下:

language: zh
pipeline: tensorflow_embedding

NLU训练命令:

在同级目录下,执行下面的命令:

python -m rasa_nlu.train -c nlu_config.yml --data nlu.md -o models --fixed_model_name nlu --project current --verbose

开启对话服务

同级目录下执行下列命令,开启对话

python -m rasa_core.run -d models/dialogue -u models/current/nlu

添加slot

添加slot配置

在domain.yml中定义slot,内容如下:

entities:
  - city
slots:
  city:
    type: text

action配置:

rasa_core_sdk安装

action依赖rasa_core_sdk的,需要安装

pip install rasa_core_sdk

endpoints

action是以服务的形式调用的。所以需要配置endpoints文件,文件名endpoints.yml,文件内容如下:

action_endpoint:
  url: "http://localhost:5055/webhook"

action代码

文件名自定义,这里定义的test.py,文件内容如下:

from rasa_core_sdk import Action
from rasa_core_sdk.events import SlotSet


class ActionAskWeather(Action):
    def name(self):
        return 'action_ask_weather'

    def run(self, dispatcher, tracker, domain):
        dispatcher.utter_message(f'您问的天气地点是哪里呢')
        return [SlotSet('city', '深圳')]

其他配置

stories文件

stroies.md中添加关于天气的场景、意图、行为,内容如下:

## story_ask_weather
* ask_weather
  - action_ask_weather
* weather_city
  - utter_weather_good

domain文件

配置domain.yml文件,在意图、实体、行为中都进行添加,具体内容如下:

intents:
  - greet
  - mood_happy
  - mood_unhappy
  - ask_weather
  - weather_city

entities:
  - city

slots:
  city:
    type: text

actions:
  - utter_greet
  - utter_happy
  - utter_unhappy
  - action_ask_weather
  - utter_weather_good


templates:
  utter_greet:
  - text: "你好,你今天过的怎么样"

  utter_happy:
  - text: "那很棒棒哦"

  utter_unhappy:
  - text: "咋了,可以告诉我吗"

  utter_weather_good:
    - text: "{city}天气很好呢"

执行命令

1、rasa_core

python -m rasa_core.train -d domain.yml -s stories.md -o models/dialogue -c policy_config.yml

2、rasa_nlu

python -m rasa_nlu.train -c nlu_config.yml --data nlu.md -o models --fixed_model_name nlu --project current --verbose

3、action

python -m rasa_core_sdk.endpoint --actions test

4、开启服务

python -m rasa_core.run -d models/dialogue -u models/current/nlu --endpoints endpoints.yml

接下来可以进行对话测试了。
以上内容理解可以参考Rasa使用指南
项目中的代码可以参考:项目源码
如果你只是了解学习rasa,截至目前为止,就可以了。如果想在公司的项目中应用rasa,那需要继续关注后续内容。

你可能感兴趣的:(nlp)