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 进行对话
我理解的对话流程图,不知道对不对
rasa学习(domain.yml、nlu.md、stories.md)(一)的更多相关文章
- Rasa学习记录 01
目录 Rasa的安装和简单的测试 什么是Rasa: 安装Rasa: 测试自带的数据 查看项目里的文件内容 举一反三(自己的第一个机器人) Rasa的安装和简单的测试 怪雨是新手,刚刚接触Rasa,以下 ...
- npm学习(九)之README.md文件
包括文档(readme.md) npm建议您包含一个readme文件来记录您的包.自述文件必须有文件名readme.md.文件扩展名.md表示该文件是一个标记(markdown)文件.当有人发现您的包 ...
- mdadm 创建md 删除md步骤
最近在使用mdadm创建和删除RAID设备.但是在创建和删除过程中会出现创建md0重启后变成md127,删除md127重启后又重新出现的状况.在网上搜索了一下,总结如下: 创建: 1. mdad ...
- 学习笔记(10)- 智能会话框架rasa
https://rasa.com/ 阿里用过这个,贝壳也在用这个. 优点: 有中文版本(https://github.com/crownpku/rasa_nlu_chi): 2018年发布,文档多,业 ...
- [转] GitHub上README.md教程
点击阅读原文 最近对它的README.md文件颇为感兴趣.便写下这贴,帮助更多的还不会编写README文件的同学们. README文件后缀名为md.md是markdown的缩写,markdown是一种 ...
- GitHub上README.md教程
最近对它的README.md文件颇为感兴趣.便写下这贴,帮助更多的还不会编写README文件的同学们. README文件后缀名为md.md是markdown的缩写,markdown是一种编辑博客的语言 ...
- 使用Botkit和Rasa NLU构建智能聊天机器人
欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 我们每天都会听到关于有能力涉及旅游.社交.法律.支持.销售等领域的新型机器人推出的新闻.根据我最后一次查阅的数据,单单Facebook Me ...
- Gitbook 简介 使用总结 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- GitHub上README.md教程 详情介绍 (修改图片连接地址错误)
最近对它的README.md文件颇为感兴趣.便写下这贴,帮助更多的还不会编写README文件的同学们. README文件后缀名为md.md是markdown的缩写,markdown是一种编辑博客的语言 ...
随机推荐
- C基础学习记录
函数 1:子函数定义的变量只在调用的时候才会分配空间,调用结束后会收回空间. 2:在调用子函数时只会向函数传递值,是单向传递的. 3.返回值的类型一般与函数的类型一致,如果不一致会以函数类型为准. 4 ...
- dubbo-源码阅读之Filter实现原理
最近完成一个需求,使用阿里Arms需要在log里面加上traceId,但是发现dubbo异常 被ExceptionFilter捕获 并打印 打印不出traceI,然后百度搜索如何重写Filter 参 ...
- Codeforces 1159E 拓扑排序
题意及思路:https://www.cnblogs.com/dd-bond/p/10859864.html 代码: #include <bits/stdc++.h> #define LL ...
- vue-cli构建的项目中请求代理与项目打包
vue-cli构建的项目中,生产模式下的打包路径.与生产模式下的请求代理简单示意
- Vue学习笔记【22】——Vue中的动画(列表的排序过渡)
<transition-group> 组件还有一个特殊之处.不仅可以进入和离开动画,还可以改变定位.要使用这个新功能只需了解新增的 v-move 特性,它会在元素的改变定位的过程中应用. ...
- 基于SpringBoot的花里胡哨配置
花里胡哨的配置 记录一下流行框架的一些常用配置 lomback配置文件 <?xml version="1.0" encoding="UTF-8"?> ...
- 「NOI2018」屠龙勇士 解题报告
「NOI2018」屠龙勇士 首先对于每个龙用哪个剑砍,我们可以用set随便模拟一下得到. 然后求出拿这个剑砍这条龙的答案 \[ atk_ix-p_iy=a_i \] 其中\(atk_i\)是砍第\(i ...
- Linux环境下安装PHP的mbstring模块
cd /home/local/php-5.6.25/ext/mbstring/usr/local/php/bin/phpize./configure --with-php-config=/usr/lo ...
- IDHTTP
Delphi IDHTTP用法详解 一.IDHTTP的基本用法 IDHttp和WebBrowser一样,都可以实现抓取远端网页的功能,但是http方式更快.更节约资源,缺点是需要手动维护cook,连接 ...
- flink详细介绍
Flink是什么 Flink是一个分布式计算引擎 MapReduce Spark Storm 同时支持流计算和批处理 和Spark不同, Flink是使用流的思想做批, Spark是采用做批的思想做流 ...