rasa学习(domain.yml、nlu.md、stories.md)(一)

rasa学习(domain.yml、nlu.md、stories.md)(一),第1张

rasa学习(domain.yml、nlu.md、stories.md)(一) 可以跟进:rasa框架学习二(slots,entities,actions,component)


一、什么是rasa

Rasa是一个用于自动文本和基于语音的对话的开源机器学习框架。


了解消息,保持对话以及连接到消息传递通道和API

  Rasa分为Rasa core和 Rasa nlu两部分:

  Rasa core用于指导会话流,而Rasa nlu用于理解和处理文本以提取信息(实体)

  Rasa了解用户想说的内容(Rasa NLU - 实体和意图提取),然后根据上下文信息对其进行适当的 *** 作谈话(Rasa Core)

  官方推荐安装方式(安装rasa和easa X):

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

    如果您不想使用Rasa X,请改为运行

pip install rasa

注意:

如果你想确保为你可能需要的任何组件安装了依赖项,并且你不介意附加的依赖项,你可以使用以下代码安装一切

pip install -r alt_requirements/requirements_full.txt

二、创建一个新项目

1. 创建rasa项目

rasa init --no-prompt

该命令创建Rasa项目所需的所有文件。


会创建以下文件:

__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/<timestamp>.tar.gz 你的初始模型

要检查是否已创建所有文件,请运行:

ls -l

2. 定义一个域

domain.yml文件

domain可以理解为机器的知识库,其中定义了意图,动作,以及对应动作所反馈的内容

intents     你期望用户说的东西。



entities 您想要从消息中提取的信息片段。



actions 你的机器人可以做和说的东西
slots 在会话期间跟踪的信息(例如用户年龄)
templates 你的机器人可以说的东西的模板字符串

intents:
- greet
- goodbye
- mood_affirm
- mood_deny
- mood_great
- mood_unhappy actions:
- utter_greet
- utter_cheer_up
- utter_did_that_help
- utter_happy
- utter_goodbye templates:
utter_greet:
- text: "Hey! How are you?"
buttons:
- title: "great"
payload: "great"
- title: "super sad"
payload: "super sad" 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"

Rasa Core取intent,entities以及内部的对话状态,并且选择的所述一个actions应该下一个执行。


如果该动作只是向用户说明,Rasa将在域中查找匹配模板(动作名称等于完全模板, utter_greet如上例所示),填写所有变量并进行响应。


对于不仅仅发送消息的 *** 作,您可以将它们定义为python类,并通过它们的模块路径在域中引用它们。


3. 定义一个解释器

解释器负责解析消息。


目前我们的机器人已经可以通过输入意图来获取答案了,但是怎么让机器理解真正的语言呢,这个时候就需要用到NLU模块了,NLU的任务是解析消息,它能把自然语言解释成我们需要的结构化的数据

在Rasa NLU中,我们需要定义我们的机器人应该能够以Rasa NLU训练数据格式处理的用户消息。


我们将使用Markdown格式来获取NLU训练数据。


我们来创建一些意图示例data/nlu.md:

## intent:greet
- hey
- hello
- hi
- hello there
- good morning
- good evening
- moin
- hey there
- let's go
- hey dude
- goodmorning
- goodevening
- good afternoon ## intent:goodbye
- cu
- good by
- cee you later
- good night
- good afternoon
- bye
- goodbye
- have a nice day
- see you around
- bye bye
- see you later ## intent:mood_affirm
- yes
- indeed
- of course
- that sounds good
- correct ## intent:mood_deny
- no
- never
- I don't think so
- don't like that
- no way ## intent:mood_great
- perfect
- very good
- great
- amazing
- feeling like a king
- wonderful
- I am feeling very good
- I am great
- I am amazing
- I am going to save the world
- super
- extremely good
- so so perfect
- so good
- so perfect ## intent:mood_unhappy
- my day was horrible
- I am sad
- I don't feel very well
- I am disappointed
- super sad
- I'm so sad
- sad
- very sad
- unhappy
- not so good
- not very good
- extremly sad
- so saad
- so sad

我们现在可以使用我们的示例来训练NLU模型(确保首先 安装Rasa NLU 以及 spaCy)

4. 定义故事

到目前为止,我们已经有了一个NLU模型,一个定义我们的机器人可以采取的动作的域以及它应该处理的输入(意图和实体)。


我们仍然错过了中心部分,故事告诉我们的机器人在对话的哪一点做什么


一个故事是,对话系统训练数据样本。


有两种不同的方式来创建故事(你可以混合它们):

  • 手动创建故事,直接将它们写入文件
  • 使用交互式学习创建故事。


我们将通过直接写入故事来创建故事stories.md。


故事以##一个字符串作为标识符开始。


用户 *** 作以星号开头,机器人 *** 作由以短划线开头的行指定。


故事的结尾用换行符表示。


## happy path               <!-- name of the story - just for debugging -->
* greet
- utter_greet
* mood_great <!-- user utterance, in format _intent[entities] -->
- utter_happy ## sad path 1 <!-- this is already the start of the next story -->
* greet
- utter_greet <!-- action of the bot to execute -->
* mood_unhappy
- utter_cheer_up
- utter_did_that_help
* mood_affirm
- utter_happy ## sad path 2
* greet
- utter_greet
* mood_unhappy
- utter_cheer_up
- utter_did_that_help
* mood_deny
- utter_goodbye ## say goodbye
* goodbye
- utter_goodbye

请注意,虽然直接用手写故事比使用交互式学习要快得多,但在使用插槽时需要特别小心,因为它们需要在故事中正确设置

5. 命令

rasa init     使用示例训练数据, *** 作和配置文件创建新项目。



rasa train 使用您的NLU数据和故事训练模型,
rasa interactive 启动交互式学习会话,通过聊天创建新的培训数据。



rasa shell 加载训练有素的模型,并让您在命令行上与助手交谈。



rasa run 使用训练有素的模型启动Rasa服务器。


有关详细信息,请参阅运行服务器文档。



rasa run actions 使用Rasa SDK启动 *** 作服务器。



rasa visualize 可视化故事。



rasa test 使用您的测试NLU数据和故事测试训练有素的Rasa模型。



rasa data split nlu 根据指定的百分比执行NLU数据的拆分。



rasa data convert nlu 在不同格式之间转换NLU训练数据。



rasa -h 显示所有可用命令。


 举个实例吧 

建一个新文件夹:rasa_study ,

进入文件夹:cd rasa_study

创建rasa项目:rasa init --no-prompt

项目目录:

1. 定义一个域(domain.yml)

intents:
- greet
- mood_happy
- mood_unhappy actions:
- utter_greet
- utter_happy
- utter_unhappy templates:
utter_greet:
- text: "你好,你今天过的怎么样啊" utter_happy:
- text: "那很棒棒哦" utter_unhappy:
- text: "咋了,可以告诉我吗"

2. 定义模型(nlu.md)

## intent:greet
- 你好
- 上午好
- 下午好
- 早上好
- 晚上好 ## intent:mood_happy
- 很好
- 我很好 ## intent:mood_unhappy
- 我很难受
- 我心情很差

因为用到了中文所以在config.yml里设置一下中文把en改成zh即可

3.  定义一个故事(stories.md)

*greet就是intent, - utter_greet是action

## story_happy
*greet
- utter_greet
* mood_happy
- utter_happy ## story_unhappy
* greet
- utter_greet
* mood_unhappy
- utter_unhapp

然后先要训练,在命令行里输入 rasa train注意:对上面的三个文件进行修改后都要先进行训练,再进行对话,否则对话的内容是未修改前的内容

D:\myproject\rasa_study>rasa train

2019-06-05 16:28:19 INFO     rasa.model  - Data (stories) for Core model changed.

Training Core model...

Processed Story Blocks: 100%|███████████████████████████████████████████████████

训练完后,就可以对话了。


在cmd输入 rasa shell 进行对话

我理解的对话流程图,不知道对不对

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/588585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-12
下一篇 2022-04-12

发表评论

登录后才能评论

评论列表(0条)

保存