Gavin老师Transformer直播课感悟 - 使用Transformer构建具有抗干扰能力的Task-oriented对话系统

一、概述

        本文围绕Dialog Transformers这篇论文来阐述如何使用Transformer建立抗干扰的对话系统。

        首先论文提到了Transformer的自注意力机制(self-attention)可以帮助很好地处理对话中的序列,所谓序列(sequence),就是在一个用户和系统的对话里,当用户说一句话,之后由系统给出对应的回复,在一个对话里,可能会有很多这样的交互过程,每一次交互就是一个turn,在一个对话任务里往往会包括多个turn。在Transformer中,无论是用户的输入还是系统的输入,都可以转换为文本的sequence,通过在sequence里加入特殊的token用于区分哪些是用户输入,哪些是系统的输入。在一个对话环境里,用户可以在当前的上下文里插入其它的主题,那这样的主题可以看做是当前对话的干扰因素。Transformer可以通过自注意力机制来决定使用哪些会话(turns)来对当前的对话状态进行编码,这是Transformer天然具有的一种基于历史对话信息进行有选择性操作并忽略其它无关信息的架构设计。这样一种对话编码设计(Transformer Embedding Dialogue, TED), 克服了其它基于RNN架构的语言模型的局限性,如LSTM和REDP。

        AI对话系统通常是帮助用户用自然语言的方式来完成一个任务,对话系统必须能够处理多轮对话,这样的场景就很适合使用Transformer来建模。在下面这个例子里,BOT代表对话系统,USER代表用户,从对话内容分析,第二行用户的输入看起来跟第一行系统给出的内容不太相关,那针对这个内容,接下来系统给出了基于第二行用户输入的相应的回复,这样的对话可以看做是在原有对话里插入的一个子对话(sub-dialogue),再接下来,系统给出了绿色部分的回复,而这个回复同第一行内容高度相关,也就是说重新回到了之前的对话上下文里,所以这个例子演示了对话系统的抗干扰能力,并且系统在最后完成了这个下单的任务。

二、几种对话技术的比较

       下面通过比较几种技术来看一下它们是如何处理对话的,以及它们各自的优缺点。

  1. 对话栈(Dialogue Stacks)

        这种技术把对话视为一个堆栈,对话内容依次被压入栈里,然后在栈顶进行操作,就是一种后进先出的操作,在上面的例子中,如果采用这种技术,那么当干扰子对话完成后,如果在对话后面要想再回到原来的子对话里,那就不可能完成了,因为子对话已经被栈抛弃。

    2.  RNN网络(Recurrent Neural Networks)

        核心思想是当前的状态总是包括过去的信息,理论上讲,如果给予足够的数据,应该能够模拟各种对话场景,如上面举的例子,但是在实际的业务对话场景里,能够获得的数据是有限的,所以不能满足RNN训练的需求。如果不能很好地通过训练来拟合,训练结果就会充满了不确定性。另外一个致命的方面来源于RNN的特点,RNN默认是使用整个输入来进行编码,那么如果前面的输出有偏差,后面在训练时会不断地放大这种偏差,导致最后的训练结果远远偏离了目标。LSTM(Long Short-Term Memory)机制虽然在基于足够数据的前提下进行训练时具有遗忘一个输入序列的部分的这样一种学习机制,但是相对于Transformer来说还是差了很多。

   3.  Transformers

        Transformer对于对话场景中的所谓意外的输入内容具有更强的抗干扰性,这是因为Transformer的自注意力机制能够预先选择哪些tokens会对encoder的当前状态有影响,从而忽略掉对当前状态没有意义的其它tokens。为了在对话的每一步做出预测,而LSTM需要更新自己内部的状态,并把这种更新传递到下面的步骤,如果当前步骤的输入不是所期望的,这种内部状态会被干扰,这种干扰会被传播到下面的步骤。Transformer使用自注意力机制来追踪历史信息,使得每一步的预测都是相互独立的,如果Transformer接收到一个无关的输入,那么它会忽略这样的输入而只使用前面相关的输入来做出预测,这使得Transformer总是聚焦于当前的业务对话场景中。另外一种抗干扰机制是基于RNN的REDP(Recurrent Embedding Dialogue Policy), 它使用了复制对话历史信息的机制,在发现有无关输入内容时,可以用复制的内容让对话能回到正轨,但是与Transformer相比,使用的网络结构更复杂,泛化能力比较差,而Transformer更简单,更轻量级,在使用领域数据方面具有更好的灵活性。

        对于开放领域的对话,使用Transformer对对话上下文和领域背景知识进行合并来应对基于开放领域的对话任务。在实现时有两种方式,一种是retrieve模式,就是使用两层 Transformer,因为需要进行相似度的对比,另外一个Transformer用来对通过排序产生的备选回复进行编码;另外一种是通用模式,Transformer用做解码器(decoder)通过token-by-token的方式产出回复。这篇论文提到的是把自注意力机制运用到整个对话级别而不是单轮对话的序列。

三、Transformer的对话机制解析

        Transformer会把对话状态和每个系统行为进行编码,训练时最大化它们之间的相似度,即对当前用户输入的信息,系统给予的信息和历史信息进行一个编码来代表当前的状态,这就是hidden state, 然后与每个系统的action生成的vector进行相似度比较,从而选择相似度排名最高的。

        在下面的架构图里,在一个对话里,会包括历史的系统行为,当前状态信息的变量slots(如时间,地点等),用户输入信息,然后使用Transformer对左侧部分进行编码,形成一个embedding layer,也会对系统行为进行编码,形成一个embedding layer,然后进行相似度比较。这里采用单向注意力的机制,是因为不能让Transformer看到接下来的内容,需要把这些内容遮住。

        端到端的TED策略仍然是retrieve模式,并不会产生新的响应,用户和系统的对话被编码成”bag-of-words”的向量。Transformer在每轮对话里动态地使用自注意力机制来访问对话历史信息的不同部分,

损失度计算

        把输入vector和系统行为vector放在同一个网络里进行训练,然后通过loss进行反向传播。

损失度的计算公式, S+代表正样本的损失度,S-代表负样本的损失度:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值