《Mem2Seq: Effectively Incorporating Knowledge Bases into End-to-End Task-Oriented Dialog Systems》

摘要

端到端的任务型对话系统在知识库的融合方面受到挑战,这篇文章提出一种端到端的网络member-to-sequence(Mem2Seq)来解决这个痛点。Mem2Seq是第一篇融合指针网络的多跳attention的生成式模型。我们的模型具有普适性,训练的更快,且取得了SOTA的效果。

1. 背景介绍

传统的任务型对话系统将任务拆分成几个子模块:NLU(包括意图识别、槽位填充)、DM(包括DST对话状态)、NLG(回复生成,分生成式和检索式)。对任务型对话系统来说,能利用外部知识是很重要的,但是传统方法在不同模块之间和知识库融合方面需要很多人工工作。端到端的模型可以更加方便的利用对话状态,并生成回复。 基于RNN的模型取得了一些成果,而且指针网络的copy机制可以应对OOV的单词(类似于NMT的copy机制)。但是这些网络有2个问题:

  • 由于RNN处理长序列是不稳定的,所以不能很好的融合知识库。(RNN不是擅长捕捉长依赖吗??)
  • RNN耗时比较长

此外,member networks模型可以将额外的存储编码为embedding供query依次查询,这样就可以利用它来存储知识库并实现对对话历史的编码。但是member networks是检索式的,不能生成word也不提供copy机制。
综上,作者将端到端模型思想和member network、指针网络的copy机制融合提出Mem2Seq模型。主要贡献如下:

  • 融合指针网络的多跳attention机制来融合知识库(应该是copy知识库中的word)
  • 可以学习生成动态query来控制内存加入(TODO:不理解)
  • 训练快,在几个任务型数据集上取得了SOTA的效果
2. 模型介绍

在这里插入图片描述
整体架构分为左图(a)的MemNN的编码器,详细架构参考这里;右图(b)为基于记忆网络的解码结构,生成最终回复。

2.1 符号定义

  • 定义对话历史为一个word序列X={xi,…,xn,$},其中$为一个哨兵字符。对于对话历史中的每一句话,在将其分成word序列之后,还要加入时序信息和用户信息,比如序列『hello world t1 $u』表示『hello world』这句话为第一轮对话中客户(对应机器人)说的话。
  • 定义知识库(KB)为序列B = {bi,…,bl},每个元素为一条知识,具体编码方式为:按照 (subject, relation, object)三元组的形式编码知识库,比如编码后的知识(the Westin, Distance, 5 miles),然后求三元组所有单词的embedding和作为该条知识的表征。
  • 拼接对话历史和知识库,定义U=[B; X]。
  • 定义目标(goal)回复为一个word序列Y={y1,…,ym}。
  • 定义指针序列PTR={ptr1,…,ptrm},其中在这里插入图片描述
    这里uz∈U,而且n+l+1指向哨兵元素$。
    2.2 编码器
    编码器结构为上图(a)所示,对于K hop attention,定义embedding矩阵 C = {C1,…,CK+1},采用相邻矩阵权重共享的方案,,详细参见论文。作者通过一个零向量作为query来查询知识库,并在模型顶层生成最新的查询oK,该向量会作为解码端的初始输入h0。具体计算可以使用下面三个公式,第一个公式使用query查询知识(就是2.1中的序列U)得到每个知识的权重,然后第2个公式对知识加权求和,第三个公式更新query:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    2.3 解码器
    解码器结构为上图(b)所示,使用一个GRU(图示RNN)来按照时间片逐步解码。GRU每步产生的ht可以看做动态生成的查询,输入yt为上一个时间片解码出的单词,其中h0=oK,y0为定义的SOS_token,当解码出的单词y为结束单词EOS_token时,解码结束,类似NMT。
    具体来说,首先利用上一时间片的ht-1和yt-1来生成当前时间片的查询ht,然后使用ht作为query去查询编码端用到的知识库和对话历史(也就是2.1中的序列U),其实就是重复编码器的过程,只不过这次不是用零向量去查询,而是ht。这样可以得到每hop的o1,…,oK。之后解码分成两部分,一部分是通过o1来得到当前时间片应该生成的词(即在整个词表V中做softmax),公式如下:
    在这里插入图片描述
    另一部分,这是用pK来作为知识库的指针,这里也将其作为是生成一个新单词还是从知识库中copy一个单词的门控开关。当pK权重最大的那个元素是哨兵元素$的时候,这里使用Pvocab作为当前时间片的结果;如果不是哨兵元素,就从知识库(序列U)中copy一个元素作为最终结果。注意,这里如果指向的是一个知识库元素,也就是序列B中的元素,那么只copy (subject, relation, object)三元组中的object,即三元组(the Westin, Distance, 5 miles)中的5 miles。应该是因为主题词subject会在对话历史中出现,所以作者才这样约束。训练的时候会将上述两部分的loss求和一起训练。这样会导致一些问题:
  • 某个时间片生成的y有多个单词
  • ptr的计算方式也会复杂
  • 如果指向的是对话历史中的时间信息和用户信息,则如何处理指针
    这些问题的具体计算方式还要去阅读代码,这里就不介绍了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值