logo资料库

rasa_nlu和rasa_core官方文档阅读笔记.pdf

第1页 / 共41页
第2页 / 共41页
第3页 / 共41页
第4页 / 共41页
第5页 / 共41页
第6页 / 共41页
第7页 / 共41页
第8页 / 共41页
资料共41页,剩余部分请下载后查看
一,用户指南
1.架构
2.模型评估
3.常见的任务命令
4.创建新项目
5.训练模型
6.交互式学习
7.可视化stroies
8.训练和测试数据拆分
9.在Markdown和JSON之间转换数据
10.消息和语音通道
11.nlu模型评估
12. 评估core模型
13.验证数据集
14.运行服务器
1.从服务获取模型
2.从远程存储中获取模型
3.安全注意事项
1.基于令牌的身份验证
2.基于JWT的身份验证
15.端点配置
二、NLU
1.只是用NLU
1.训练仅限NLU模型
2.命令行测试nlu
3.运行NLU服务
2.训练数据的格式
1.markdown 数据格式
2. json格式
3.提高意图分类和实体识别
1.Common Examples
2.正则表达式的功能
3.Lookup Tables(查找表)
4 Normalizing Data
Entity Synonyms(实体同义词)
3.选择管道
1.简单回答
2.详细回答
1.pretrained_embeddings_spacy
2.supervised_embeddings
3.mitie
3.类不平衡
4.多个意图
5.理解Rasa nlu的pipeline
6.组件的生命周期
7.“实体”对象解释
8.预配置pipeline
1.supervised_embeddings
2.pretrained_embeddings_spacy
3.mitie
8.自定义 pipelines
4.语言支持
1.使用任意语言训练模型
2.预训练词向量
spacy
mitie
5.实体提取
1.介绍
2.自定义实体
3.提取地点,日期,人物,组织
4.日期,金额,持续时间,距离,标准
5.正则表达式
三、core
1 stories
1.1 format
1.2 story的组成
1.3 用户消息
1.4 动作(actions)
1.5 事件
1.6 槽事件
1.7 表单事务
1.8 检查点
1.9 OR语句
2 Domains(域)
2.1 一个域的例子
2.2 什么含义?
2.3 自定义动作和槽
2.4 话语模板
2.4 图像和按钮
2.5 自定义输出负载
2.6 特定通道的对话
2.7 变量
2.8 变化
2.9 忽略某些意图的实体
3 响应
3.1 在域中包含对话
3.2 为机器人响应创建自己的NLG服务
4 动作
4.1 对话动作
4.2 检索动作
4.3 自定义动作
4.4 使用python编写自定义动作
4.5 在其他代码中执行动作
4.6 使用动作主动接触用户
4.7 默认动作
5 策略
5.1 配置策略
5.2 最大历史
5.3 数据扩充
5.4 动作选择
5.5 keras动作
5.6 嵌入策略
5.7 映射策略
5.8 各种策略
6 词槽
6.1 什么是槽?
6.2 rasa如何使用槽
6.3 槽如何设置
6.3.1 从nlu设置槽
6.3.2 通过单击按钮设置槽
6.3.3 通过动作设置槽
6.4 槽类型
6.4.1 文本槽
6.4.2 布尔槽
6.4.3 分类(Categorical)槽
6.4.4 浮(float)槽
6.4.5 列表槽
6.4.6 未填充的插槽
6.5 自定义的槽***
7 表格(forms)
7.1
Rasa_nlu和Rasa_core阅读 一,用户指南 1.架构 消息处理,此图显示了使用rasa构建消息响应的基本步骤:   步骤是: 1,消息被接受并且传递给Interpreter(解释器),它将源消息转化为包含原始文本,意图和实体 的字典。这部分由NLU处理。 2、Tracker(追踪器)是追踪并记录会话状态的对象,他接受新到来的消息。 3、policy接受当前Tracker的状态 4、policy选择下一个要使用的动作 5、选择的动作记录在Tracker中 6、向用户发送请求 2.模型评估 我们还可以调节nlu模型的超参数 https://blog.rasa.com/rasa-nlu-in-depth-part-3-hyperparameters/?_ga=2.185072874.2590330 68.1567321116-549374689.1567321116 3.常见的任务命令
命令 rasa init rasa train 作用说明 使用示例训练数据,操作和配置文件创建新项目 使用你的NLU数据和故事训练模型,在 ./model 中保存训练的模型 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 rasa x rasa -h 4.创建新项目 在不同格式之间转换NLU训练数据 在本地启动Rasa X 显示所有可用命令 我们使用下面的命令来创建一个完整的项目: 1 rasa init 这将创建下面的文件:(项目结构)   随着文档的建立,我们需要熟悉这些命令:训练rasamo模型,与模型通信,测试模型;如果在 这里你只想训练core或者是nlu的话,我们可以这样训练rasa train core / rasa train nlu。 5.训练模型
注意: 使用rasa train训练模型时,确保Core和NLU的训练数据存在。如果仅存在一种模型类型的训练 数据,则该命令将根据提供的训练文件自动回退到rasa train nlu或rasa train core。 6.交互式学习 1 `rasa interactive` 如果使用 --model 参数提供训练模型,则使用提供的模型启动交互式学习过程。如果没有指定模 型,且没有其他目录传递给 --data 参数, rasa interactive 将使用位于 data/ 目录中的数据训练一 个新的Rasa模型。在训练初始模型之后,交互式学习会话开始。如果训练数据和配置没有改变,将跳过 训练。 注:交互式学习就是你的助手在学习的时候,记录和你的之间交流的对话内容,以此作为训练数 据。 7.可视化stroies 这实在浏览器界面以图的形式展示故事: 1 rasa visualize 通常, data 目录中的训练故事是可视化的。如果你的故事位于其他地方,则可以使用 --stories 指定其位置。 8.训练和测试数据拆分 下面的这个方法可以把nlu的训练数据拆为训练集和测试集 1 rasa data split nlu 你可以使用以下参数指定训练数据,百分比和输出目录: 9.在Markdown和JSON之间转换数据 要将NLU数据从LUIS数据格式,WIT数据格式,Dialogflow数据格式,JSON或Markdown转换为 JSON或Markdown,请运行: 1 rasa data convert nlu 注:这里是说训练数据的格式,我们可将其转为json或者是Markdown
10.消息和语音通道 如果您在本地计算机(即非服务器)上进行测试,则需要使用ngrok。这为您的机器提供了域 名,以便Facebook,Slack等知道将消息发送到本地计算机的位置。 要使您的助手在消息传递平台上可用,您需要在 credentials.yml 文件中提供凭据。运行 rasa init 时会创建一个示例文件,因此最简单的方法是编辑该文件并在其中添加凭据。以下是Facebook凭 据的示例: 1 2 3 4 facebook: verify: "rasa-bot" secret: "3e34709d01ea89032asdebfe5a74518" page-access-token: "EAAbHPa7H9rEBAAuFk4Q3gPKbDedQnx4djJJ1JmQ7CAqO4iJKrQcNT0wtD" 11.nlu模型评估 模型评估详见(下同):http://rasachatbot.com/6_Evaluating_Models/ 在标准的机器学习技术中,我们需要将一些数据作为测试集分开,我们可以使用下面的命令来将 数据分为训练集和测试集: 1 rasa data split nlu 你如果已经运行了上面的命令,我们可以使用下面命令,查看测试用例的状况: 1 rasa test nlu -u test_set.md --model models/nlu-20180323-145833.tar.gz 如果你不想创建单独的测试集,可以使用交叉验证来估计模型的泛化能力。 1 rasa test nlu -u data/nlu.md --config config.yml --cross-validation 12. 评估core模型 你可以使用评估命令在一组测试stories中评估训练模型: 1 rasa test core --stories test_stories.md --out results 这会将失败的故事打印到 results/failed_stories.md 。如果至少有一个操作被错误预测,我 们会将任何故事视为失败。 此外,这会将混淆矩阵保存到名为 results/story_confmat.pdf 的文件中。对于你域中的每个 操作,混淆矩阵会显示操作的正确预测频率以及预测错误操作的频率。 13.验证数据集 测试 域和数据 文件的错误 要验证域文件,NLU数据或故事数据中是否存在任何错误,请运行验证脚本。你可以使用以下命 令运行它: 1 rasa data validate *:这里可以记录一下,这是个非常好的命令,他可以帮你检查错误,嗯,按时就先这么说吧
14.运行服务器 你可以使用经过训练的rasa模型来运行一个简单的HTTP请求: 1 rasa run -m models --enable-api --log-file out.log 各个参数分别代表: 1 1. -m: 包含Rasa模型的文件夹的路径 2. --enable-api: 启用此附加API 3. --log-file: 日志文件的路径 Rasa可以通过三种不同的方式加载你的模型: 1. 从服务获取模型(请参阅下面从服务获取模型) 2. 或从远程存储中获取模型(请参阅云存储) 3. 通过 -m 从本地存储系统加载指定的模型(上例中正是此条) Rasa尝试按上述顺序加载模型,即如果没有配置模型服务和远程存储,它只会尝试从本地存储系统 加载模型。 1.从服务获取模型 你可以配置HTTP服务以从其他URL获取模型: 1 rasa run --enable-api --log-file out.log --endpoints my_endpoints.yml 详情请见:(http://rasachatbot.com/8_Running_the_Server/) 2.从远程存储中获取模型 你还可以配置Rasa服务以从远程存储中获取模型: 1 rasa run -m 20190506-100418.tar.gz --enable-api --log-file out.log --remote- storage aws 模型被下载并存储在本地存储系统的临时目录中。有关更多信息,请参阅云存储。 3.安全注意事项 我们建议不要将Rasa服务暴露给外部世界,而是通过专用连接(例如,在docker容器之间)从后 端连接到它。 其中,内置了两种身份验证方法: 1.基于令牌的身份验证 启动服务时使用 --auth-token thisismysecret 传递令牌 : 1 2 3 4 5 rasa run \   -m models \   --enable-api \   --log-file out.log \   --auth-token thisismysecret 你的请求应该传递令牌,在我们的案例中是 thisismysecret 作为参数:
1 $ curl -XGET localhost:5005/conversations/default/tracker? token=thisismysecret 2.基于JWT的身份验证 使用 --jwt-secret thisismysecret 启用基于JWT的身份验证。对服务的请求需要在使用此密钥和 HS256算法签名的 Authorization 头部中包含有效的JWT令牌。 用户必须具有 username 和 role 属性。如果 role 是 admin ,则可以访问所有端点。如果 role 是 user ,则只有 sender_id 与用户的 username 匹配时才能访问具有 sender_id 参数的端点。 1 2 3 4 5 1 2 3 4 rasa run \   -m models \   --enable-api \   --log-file out.log \   --jwt-secret thisismysecret 你的请求应该设置正确的JWT头部: "Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ"                 "zdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIi"                 "wiaWF0IjoxNTE2MjM5MDIyfQ.qdrr2_a7Sd80gmCWjnDomO"                 "Gl8eZFVfKXA6jhncgRn-I" 15.端点配置 二、NLU 1.只是用NLU 1.训练仅限NLU模型 仅训练nlu运行下面命令: 1 rasa train nlu 这将在 data/ 目录中查找NLU训练数据文件,并在目录中保存训练有素的模型 models/ 。模型的 名称将以 nlu- 。 2.命令行测试nlu 运行命令如下: 1 rasa shell nlu 或者,您可以省略 nlu 参数并直接传入nlu-only模型: 1 rasa shell -m models/nlu-20190515-144445.tar.gz //-m 之后是模型地址 3.运行NLU服务 要使用NLU模型启动服务器,请在运行时传入模型名称:
1 rasa run --enable-api -m models/nlu-20190515-144445.tar.gz 然后你可以使用 /model/parse端点从模型请求预测。 1 curl localhost:5005/model/parse -d '{"text":"hello"}' 2.训练数据的格式 1.markdown 数据格式 实例以意图作为分组,如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ## intent:check_balance - what is my balance - how much do I have on my [savings](source_account) - how much do I have on my [savings account](source_account:savings) - Could I pay in [yen](currency)? ## intent:greet - hey - hello ## synonym:savings   - pink pig ## regex:zipcode         - [0-9]{5} ## lookup:currencies   - Yen - USD - Euro ## lookup:additional_currencies path/to/currencies.txt Rasa NLU的培训数据结构分为以下几个部分: common examples synonyms regex features and lookup tables common example是唯一强制性的部分,它有助于NLU模型使用更少的例子来学习domain,也更 加有利于预测。 synonyms将映射被提取的实体到相同的名字,比如映射“my savings acccount ” 到“savings”。 lookup 查找表可以直接指定为列表,也可以指定为包含换行分隔的单词或短语的txt文件。加载训 练数据后,这些文件用于生成不区分大小写的正则表达式模式,并将其添加到正则表达式特性中。 2. json格式
json格式由这些部分组成:顶层对象rasa_nlu_data、和键 common_examples , entity_synonyms and regex_features 。其中最重要的是common_examples。具体格式如下: {   "rasa_nlu_data": {       "common_examples": [],       "regex_features" : [],       "lookup_tables" : [],       "entity_synonyms": []   } 1 2 3 4 5 6 7 8 common_examples 用来训练模型,你应该把你所有的训练例子都放入 common_examples ,正则 特征是一种帮助分类器检测实体或意图并提高性能的工具。 3.提高意图分类和实体识别 1.Common Examples 公共的例子有三个组件,text,intent和entities。前两个都是字符串,而最后一个是数组。 text使用户的消息 intent是意图,应该和text相关联 entities是text需要被识别的特殊部分 entity由一个开始值和一个结束值指定,这些值一起使python样式范围应用于字符串,比如下面 这个例子,text='show me chinese restaurants' ,然后text[8:15] == “Chinese”。entity可以包含多个 单词,实际上value字段不必与示例中的子字符串完全对应。这样,您就可以将同义词或拼写错误映射 到相同的值上。 1 2 ## intent:restaurant_search - show me [chinese](cuisine) restaurants 2.正则表达式的功能 正则表达式可用于支持意图分类和实体提取。例如,如果您的实体具有确定性结构(如邮政编码 或电子邮件地址),则可以使用正则表达式来轻松检测该实体。对于zipcode示例如下: 1 2 3 4 5 ## regex:zipcode - [0-9]{5} ## regex:greet - hey[^\\s]* 名称(name)不定义实体也不定义意图,它只是一个人类可读的描述,让您记住这个正则表达 式的用途,并且是相应模式特征的标题。 正如您在上面的示例中所看到的,您还可以使用正则表达式功 能来提高意图分类性能。 尽量使用更加少的单词的方式去创建你的正则表达式,例如:使用 hey[^\s]* 而不是 hey.* ,因为前者可能是一个单词,而后者是一段话。 实体提取的正则表达式功能目前仅由 CRFEntityExtractor 组件支持!
分享到:
收藏