Gavin老师Transformer直播课感悟 - Rasa对话机器人项目实战之教育领域Education Bot项目Policies Data详解(七十二)

84 篇文章 16 订阅

   本文继续围绕工业级业务对话平台和框架Rasa,对Rasa对话机器人项目实战之教育领域Education Bot项目Policies Data,end-to-end的训练方式及使用时需要注意的事项,checkpoints的使用,如何在特定条件下使用rules等方面进行详细分析。

 一、Rasa对话机器人项目实战之教育领域Education Bot项目Policies Data详解

  1. Education Bot项目Policies Data中Stories和Rules分离的架构设计

以下是stories训练数据样例,可以看到在steps中定义了每个intent及对应的action,而定义在rules.yml中的MemoizationPolicy或者AugmentedMemoizationPolicy会根据对话内容到stories中查找是否有匹配的数据,如果找到匹配数据,则会直接使用数据中的action来作为预测的action。这两种policies的预测confidence要么是1.0(匹配到数据),要么是0.0(没有匹配到数据),所以如果发生预测错误而confidence为1.0时,没有其它的policy可以覆盖其预测结果。

Stories数据是用来训练对话管理模型的,通过训练从而使模型能够泛化到其它当前未知的对话路径。

关于格式:

一个story就是用户与对话机器人的一段对话的数据表示,其数据格式包括:

-把用户输入表达为intents(和entities,如果存在)

-把对话机器人的responses和actions用action key来表示

下面是story数据格式的样例:

 2.  Policies Data中User Messages、Actions及Events三个组件解析

关于User Messages:

在写stories时,不需要处理用户发送消息的实际内容,而是利用NLU pipeline的输出,即使用intent和entities的组合来表示用户针对某个意图可能会发送的所有消息。重要的是需要包括entities,这是因为policies是基于intent和entities的组合来预测下一个action的。

关于Actions:

所有对话机器人执行的actions和responses都是定义在stories中的action key下面,stories中的responses来自domain文件中responses key下面的内容,而stories调用的自定义actions来自domain文件中actions key下面的内容。

关于Events:

在训练时,Rasa不会调用action server,这就意味着对话机器人的对话管理模型不知道一个自定义action会返回什么事件。基于此,在stories中必须明确写出触发slot设置或者激活、不激活form的事件。如果一个slot是通过自定义action来设置的,那么在stories中需要在action后面添加slot_was_set事件,下面是样例:

 3.  Form Events详解及案例分析

当处理stories中的form时,需要注意以下三种类型的事件:

-form action事件:当第一次启动form时会使用,另外在form激活时需要继续执行form action

-form激活事件:在第一个form action事件发生后使用

-form不激活事件:用来使form进入不激活状态

 4.  Checkpoints详解及案例分析

你可以使用checkpoints来模块化或者简化你的训练数据,虽然checkpoints有用,但是不要过度使用它。使用过多的checkpoints会很容易导致你的stories训练数据很难被理解,从而降低训练速度。更好的方式是使用Rules或者ResponseSelector。

下面是包含了checkpoints的stories数据样例:

 5.  OR statements详解及案例分析

使用or关键字可以是stories更短,特别是处理多个意图或者slot events时。如果你要求用户确认某件事,譬如可以把affirm和thankyou这两个intents都用同样的方式进行处理。下面这个story在训练时会转换为2个stories来处理:

下面是处理多个slots事件的样例,譬如slot的值可以设置为两个值之一:

 6.  End-to-end Training工作机制解析及案例分析

当使用end-to-end training时,不需要处理通过NLU pipeline提取的基于用户消息的intents,或者单独使用domain文件中的responses。你可以把用户消息和对话机器人的responses直接包括在stories中,以下是数据样例:

你可以以end-to-end的格式来混合使用训练数据,end-to-end的数据具有被标注的intents和actions。当使用End-to-end的方式时,NLU pipeline从用户输入中识别的intents和提取的entities都会被忽略,policies可以直接基于用户文本数据进行预测。

只有Rule Policy和TED Policy可以进行end-to-end训练。

RulePolicy:当rules定义的用户文本数据与预测时的用户输入相同时才会使用RulePolicy进行匹配

TEDPolicy:通过另外的神经网络来传递用户消息从而生成文本的hidden representations。为了获取比较健壮的表现,需要提供足够的stories训练数据用于捕获基于各种end-to-end对话turn的用户文本数据。

你可以在用户文本数据中添加entity tag,这样就可以被TEDPolicy所提取,语法格式同NLU训练数据使用的格式。以下是样例:

另外还可以使用bot key来指定你想让对话机器人说什么:

下面是混合使用以上两种end-to-end方式的样例:

对于TEDPolicy来说,end-to-end training要求更多的参数,所以要求有更多的计算资源,资源数量取决于在stories中包含了多少end-to-end的对话turns。

 7.  Rules for the Conversation Start详解及案例分析

Rules描述了需要总是遵循同样的对话路径的较小的对话片段,rules被用于训练RulePolicy。Rules被定义在rules key的下面,一个rule有一个step key,包含了与stories一样的步骤列表,另外还可以包含conversation_started。为了只在对话的开始使用一个rule,可以这样配置:

 8.  Rules with Conditions详解及案例分析

可以使用condition key来指定当满足这个条件时才能使用rule,样例如下:

 9.  Skip Waiting for User Input at the End of a Rule

默认情况下,当rules完成最后一步后会等待用户的下一个输入,如果你想跳过这个状态而把下一个action的预测转交给其它的story或者rule,那么可以使用以下配置(设置wait_for_user_input: false):

 10.  Form下的ActionExecutionRejection机制详解及实例解析

当一个form处于激活状态时,如果用户输入不能填充所请求的slot,那么form action的执行就会被拒绝。这时form会自动抛出异常:ActionExecutionRejection。作为你的自定义验证逻辑或者slot mapping处理的一部分,你也可以有意抛出ActionExecutionRejection来终止form action的执行。

在有的情况下,当用户不想再继续业务处理时,你可以使用一个默认action “action_deactivate_loop”来使form进入不激活状态,并且重置所请求的slot,下面是样例:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值