Gavin老师Transformer直播课感悟 - 基于Transformer的Rasa之去掉对话系统的Intent所使用之End2End Learning剖析(三)

        本文继续围绕工业级业务对话平台和框架Rasa来解析如何通过End2End Learning的方式在业务对话机器人实现中去掉intent,即意图识别相关的内容。

四、关于Rasa提出的去掉intents的实现方式的剖析

        Rasa2.0版本引入了end-to-end learning,这样使得intent的使用可以是optional的。关于end-to-end的实现方式有很多,包括前面提到的seq2seq方式。语言理解(NLU)在使用时会产生由intents,entities,slots构成的状态信息,通过这种end-to-end方式来取代一个两阶段的过程(一个NLU预测+选择下一步action的对话策略(dialogue policy)),从而使Rasa能够让对话机器人通过用户输入信息来直接决定下一步的action。

        从下图可以看出,在左边部分,用户输入信息首先经过Tokenizer和CountVectorFeaturizer的处理,然后再经过分类器和entity提取器的处理后,获得intent(s)和entities以及slots,然后把这些作为输入传给右边部分的对话管理器进行处理,最后产出next action,这就是传统的对话信息处理过程。

Rasa2.1及之前的版本使用的传统做法如下所示,每个输入文本(text)都会经过NLU被映射到一个intent:

Rasa2.2版本提出了通过End-to-End learning的方式来跳过intent的使用:

  1. 实现不局限于intents的最小限度的对话机器人

        通常来讲,随着时间的推移,你所做的对话机器人会变得越来越复杂,end-to-end learning的方式可以让对话机器人保持不断进化和改进而不会受到一套僵硬的intents的束缚。采用这种新的方式意味着在某些场景下可以不使用intents了(譬如在上一篇文章里提到的几种无法使用intents的场景)。

        这里给出了一个例子,当用户提出要寻找一个餐馆,对话机器人给出了一个随机的菜肴建议,然后用户给出了这样的信息“I had that yesterday”,从正常的对话思维来说,意味着用户说”no”,实际上是想换个口味,所以对话机器人需要对此做出相应的回应,在这里,很难把信息“I had that yesterday”映射到一个具体的intent,因为这样的信息如果放在其它的语言环境下,它所表达的可能是其它的意思了。

                                                                                                       

再看一个例子,用户的对话信息表明是针对对话机器人的建议说“yes”,那如果后面对话机器人给出了其它的菜肴信息,那就意味着跟用户的意图相反,所以从这个角度讲,把用户的每一条信息都映射到一个intent是有局限性的。

   2. Rasa的end-to-end learning是如何工作的

        在Rasa 2.2版本里,对于story (训练对话信息,training dialogues)里的每个对话turn,intent是可选的,对于用户的信息,可以使用”user”这个key来指定,这时并没有提供intent。当然在你觉得需要的场景下,仍然可以使用intent。如下图所示,注意由user和action组成的示例,而在这之前的部分,采用了intent和action的组合:

当训练对话机器人时,Rasa对于上面例子中提到的用户输入信息“I had that yesterday”的处理机制如下:

  1. NLU模型通过预测把这句话映射为intent “search_restaurant”
  2. 因为有两个end-to-end的训练语料,对话策略也能够直接基于用户输入信息来预测下一步action
  3. 在这个场景里是由对话策略来决定下一步action的,预测得出的intent不是有用信息,所以忽略它,结果表明对话机器人根据用户输入信息正确预测出了action,即根据输入信息“I had that yesterday”推荐了另一种菜肴

在实际实践中,对话策略可以做出两种方式的预测,一种是只基于intent来预测,另一种是只基于用户输入信息来预测,然后选择具有较高confidence的预测结果作为response返回给用户。

下图演示了end-to-end learning是如何进行的:

  3. 基于上下文的NLU

        借助上下文做NLU可以增强对话机器人的处理效果,如果进行NLU处理时需要考虑到对话上下文,那么需要把上下文信息包含在NLU的训练数据里,或者实现一个定制化的NLU组件来替换intents。End-to-end learning把NLU和对话管理合并到一个模型里,这是Rasa获得基于上下文的NLU的一种方式(然而从stories里配置的用户输入和action的信息来看,实际上并没有给出更多的历史对话信息来作为上下文)。

        在上面的例子里,如果想从上下文的角度来把信息“I had that yesterday”解释为”no”,那么Rasa借助end-to-end learning的方式能够正确预测出下一步action,而不需要考虑用户输入的信息应该对应到哪个正确的intent。这也意味着并不总是需要把每一个信息都映射为一个intent。

  4. 关于完全实现end-to-end的对话机器人

        使用Rasa2.2的版本可以尝试去实现end-to-end的对话机器人,也就是说对话机器人不需要再去预测下一步action的名称(e.g. utter_greeting),训练数据直接包含了response的内容,在下面的story里,intent和action这两个key都是不存在的,你可以基于人与人之间的对话数据来训练Rasa模型,而不需要首先去创造intent和action的名称,然后使用它们来标注对话内容。但是并不是现在就可以立即开始使用这种方式,这里面还有很大的探索空间。

                                                                                                       

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值