论文阅读:《Hybrid Code Networks》

论文阅读:《Hybrid Code Networks: practical and efficient end-to-end dialog control with supervised and reinforcement learning》

背景

这是2017年ACL第55届年度会议的论文,英文名:Hybrid Code Networks: practical and efficient end-to-end dialog control with supervised and reinforcement learning。中文名:混合代码网络:基于监督和强化学习的实用有效的端到端对话控制。论文和经典,已经有很多人总结过了,比如这里这里还有这里。所以本博客我就不重新全文翻译了,直接上别人消化好的东西。

端到端的递归神经网络(RNNs)是学习对话系统的一个美妙的解决方法;然而,现在的技术是数据密集型的,需要海量对话数据去学习简单的行为。
我们在此介绍混合编码网络(HCNs),这一网络是一种RNN的变形和优化,将RNN与含有特定领域知识的动作模版和软件相结合。 与现有的端到端方法相比,HCNs可以借助少量但有效的数据来提高实用性和训练效率,不仅大大减少训练所需的数据量,还可以保留对话状态的潜在表示。此外,HCN本身通过可以监督学习和强化学习来优化,本文也对此进行了探索,同时获得SOTA的性能。

Introduction

1.传统端到端学习的弊端:

  • 数据驱动型,需要海量数据来学习简单的行为数据驱动型,需要海量数据来学习简单的行为
  • 领域迁移时,无法加入领域先验知识

2. 端到端和pipeline的对比

传统的任务型对话系统多是pipeline的。
pipeline需要经过 NUL,DST,动作策略选择(对话策略学习,Dialogue policy learning)和NLG等模块,模块之间的依赖会增加复杂性(比如,对话状态如何定义?需要维持怎样的对话历史?),并且每个模块都需要专门的标签。于是端到端的设计思想出现了。所谓端到端方法就是在对话的文本记录上直接训练RNN。RNN的好处是可以推断出潜在的状态表示(latent representation of state),不再需要state标签。但是,端到端的方法缺少通用的注入领域知识和约束的机制,比如说像数据库搜寻结果、更新实体词典这样的简单操作,仅仅需要软件侧的几行代码(a few lines of software)就能够表达,但是在RNN上,可能需要上千组对话才能学习到。此外,一些实用环境中必须要有编写好的约束,比如银行对话系统要求用户必须先登录然后才可以检索账户信息。

3.本文提出的HCN网络

为了解决上面说的问题,本文提出了一个端到端的面向任务对话系统的网络模型,叫做混合编码网络(HCN),除了可以在RNN上学习外,还允许通过软件和动作模板(software and action templates.)表示领域知识。既保留了端到端可训练性的优势,又能够实现较少的训练数据量。另外,通过改变梯度更新策略,这个神经网络还可以结合监督学习或者强化学习来训练。

仔细观摩本文的模型,坦率地讲,可迁移性尚可,但需要对系统做足够的设计工作,数据集在量上要求不多,但也需要比较严格的定制和规范化。

4. 文章结构:

  • 第二节:描述模型
  • 第三节:将模型与相关工作进行对比
  • 第四节:将HCN应用于bAbI对话数据集
  • 第五节:将HCN应用于作者所在公司(微软)的实际客户支持域
  • 第六节:说明了如何通过强化学习优化HCN
  • 第七节:总结

2 Model description

从顶层上说,Hybrid Code Network有4个组成部分:

  • RNN
  • domain-specific software 特定领域软件
  • domain-specific action templates 特定领域动作模板
  • a conventional entity extraction module 实体抽取模块(用于识别文本中的entity mentions)

RNN和开发者代码都起到了维护state的功能,一个动作模板可以是文本交流动作(textual com- municative)、或者是API调用。模型如图1。

模型分析:在这里插入图片描述

上图模型作为端到端模型,其实就是把pipeline的自然语言理解,对话状态跟踪,对话策略学习,对话策略选择,自然语言生成等不同功能的模块掰开揉碎混在一个模型里了。

流程:

  • 用户输入话语(utterance)时,循环开始(1)
  • 话语用多种方式进行特征化,首先构建BOW词袋向量(2)
  • 然后用预训练的词向量实现语句嵌入(3)
  • 之后通过实体提取模块提取实体,例如将“Jennifer Jones”识别为实体,类别是< name >。此处实体类别相当于slot。(4)
  • 再将文本和实体传递给开发者提供的“Entity tracking”代码(5),用来管理实体,相当于slot-filling。例如将文本“Jennifer Jones”映射到数据库中的特定行。该代码可选地返回“动作掩码”(“action mask”),指示在当前时间步允许的动作,作为位向量。例如,如果尚未识别目标电话号码,则可以屏蔽用于发出电话呼叫的API动作。它还可选地返回“上下文特征”(context features”),这些特征是开发人员认为可用于区分动作的特征,例如当前存在哪些实体以及哪些实体不存在。

Context features(上下文特征):根据本轮用户提问,更新实体追踪器的实体类别-实体值(相当于槽值对)状态,本论文是面向特定任务的对话系统,只关注当前上下文实体值的有和没有两种状态,所以论文实现使用0和1组成的掩码列表来表示对应实体值的有无。

Action Mask(动作掩码):表示在本轮用户提问,更新当前上下文特征后,允许机器在当前时间步做出的所有动作(回复),实现用一个位向量,置1的位表示本轮允许该回复,论文中的方法必须对具体的任务设计一个实体掩码(上下文特征)– 动作掩码的对应关系,即在当前轮次上下文状态中,允许机器做出的动作(回复)的所有情况,这些情况是当然也要预先设计好,所有的动作(回复)构成动作模板。

上面这实体提取、实体追踪和上下文特征部分其实就是PipeLine经典结构中的 对话状态追踪(Dialogue state tracker) 模块,作用是Entity extraction和Entity tracking管理历史对话中每轮对话的输入,Context features输出当前对话的上下文状态。用户目的就是用一系列slot-value pairs表现的,本文中就是实体类别-实体值的组合。

  • 来自步骤(1)-(5)的特征组件(动作掩码,上下文特征,语句嵌入,词袋向量)被concat形成特征向量(6),传递给RNN(LSTM或GRU)(7)
  • RNN计算隐藏状态(向量),其被保留用于下一个时间步(8)
  • 同时该隐藏向量被传递到具有softmax激活的Dense层,该层输出维度等于系统动作模板(action templates)的数量,即输出一个在action templates上的概率分布(9)。这个归一化后的向量便是一个在动作模板上的分布向量
  • 接下来,使用动作掩码对该向量做元素乘法,动作掩码中不允许的动作便被强制设为0概率,并且将结果归一化(10)为一个概率分布,这使得非法动作(动作掩码中不允许的动作)概率为0(如上文提到的电话),然后从得到的分布(11)选取概率最大的作为最终选择的动作(12)

如果有强化学习在线学习,这里会不太一样。当RL处于活动状态时,需要进行探索,即在分布中取一个样本,而RL not active时,选择最好的动作即最高概率的动作。

动作掩码加上整个RNN可以看做是PipeLine中的 对话策略学习(Dialogue policy learning) 模块,作用是根据当前的对话状态(上下文特征)选择下一步要做出的反应。

  • 将选择的action(对应一个动作模板)传递给“Entity output” (实体输出)代码,该代码可以替换实体类型(13)并生成完整形式的动作,比如动作模板“ < city >, right?”转换成“Seattle,right?”。
  • 在(14)中是判断实体输出的动作类型,进入相应控制分支。如果动作类型是API调用,则调用开发者代码中的相应API(15)。API可以充当传感器并返回与对话框相关的特征,因此可以在下一个时间步将它们添加到特征向量中(16);如果动作是文本,则将其呈现给用户(17),然后重复循环。所采取的行动在下一个时间步长中作为特征提供给RNN(18)。

实体输出和最后的步骤可以当成是PipleLine中的 自然语言生成(NLG) 模块,作用是将对话策略的输出转化成自然语言的句子反馈给用户。

3 Related work

和pipeline以及相关工作相比,之前已有工作将Policy选择用前馈神经网络来完成,但是这里的策略是人工设定的,即通过DST将观察到的对话历史汇总为状态特征,这需要专门的设计和label。
相比之下,HCN使用RNN自动推断出状态的表示。为了提高学习效率,HCN使用外部的轻量级流程来跟踪实体值,但策略并不严格依赖于它,若对话文本中不存在明显上下文,例如数据库状态,则可以将其编码为RNN的上下文特征
第二个近期工作是应用RNN来学习端到端模型,从对话历史直接映射到词序列,通过添加特殊的API调用,将数据库输出枚举为一系列令牌,然后使用memory network学习RNN,将这些系统应用于任务型对话。
HCN仍使用RNN来累积对话状态并选择动作,但HCN使用的是开发人员提供的操作模板,降低了学习复杂性。同时首次引入了强化学习。

4 Supervised learning evaluation I

在这一节中我们将HCNs与现有方法在“bAbI对话“公开数据集(Bor-des and Weston, 2016)上进行比较。该数据集包含两个餐厅领域的端到端的对话学习任务:任务5和任务6(任务1-4是5的子任务).
任务5包括合成,模拟对话数据,和高度正规的用户行为和约束词汇。
对话包括数据库访问行为,从数据库中检索相关餐馆,包括在对话框的记录结果。
我们测试任务5的“OOV”变种,其中包括在训练集中没有观察到的实体价值。
任务6用来自第二对话状态跟踪挑战的人机对话数据(DSTC2),这里,可用性工程(crowd-workers)与口语对话系统中的几个变种发生了反应(Henderson et al., 2014)。
因为没有提供DSTC2数据库,我们从数据中推断出数据库的调用并插入对话的记录。用例对话在章节末尾A.2和A.3。

5 Supervised learning evaluation II

这回用的自己公司的故障排除代码和名称拨号域模拟对话数据。
数据集状况如下:
在这里插入图片描述

6 Reinforcement learning illustration

扩展:应用强化学习实现在线学习 。
上面介绍了应用监督学习来训练LSTM。然后现在考虑,在系统大规模操作,与大量用户交互的情况下,进行自主学习。通过使用强化学习使用RL,每轮都会得到一个reward,agent探索不同情况下的不同动作序列,并进行调整以最大化reward,即回报return,表示为G。
本文使用了policy gradient方法,在此RL方法中,模型π由w参数化,在每一步对每个选择哪个sample有一个输出。在轨迹的末尾(即对话末尾),计算该轨迹的回报G,并且计算模型采用该动作的概率分布,然后采用与回报成比例的梯度来调整权重w,调整公式如下:
在这里插入图片描述
其中 α α α是学习率; a t a_t at是在时间t时采取的行动, h t h_t ht是时间t的对话历史; G G G是对话的回报(return), ▽ x F ▽_xF xF F F F相对于 x x x的雅克比行列式, b b b是下面描述的基线;
使用LSTM+AdDelta,有32个隐藏单元,每次对话后都会用RL进行策略更新。(后面懵逼了,大概就是一边SL一边RL,还可以将RL的加入到train set中?)

7.总结

就是可以加 software和端到端,减少了训练数据量;还可以将SL和RL结合?
是不是说,因为加了software手动指定的规则,减少了端到端的训练数据量,但是DST还是用端到端,不用显式追踪?和End-to-end dialog有什么区别呢?
End-to-end dialog使用了memory network。
数据集分别用了 dialog-bAbI,自己公司的故障排除代码和名称拨号域模拟对话数据。
代码实现(搬运工):https://github.com/johndpope/hcn
任务型端到端对话系统5篇论文总结(17年前-参考):https://www.jianshu.com/p/4aebac7e3bb9

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值