《Semantically Conditioned Dialog Response Generation via Hierarchical Disentangled Self-Attention》

江枫思渺然 提交于 2020-02-17 05:40:20

来源:ACL 2019
代码:https://github.com/wenhuchen/HDSA-Dialog

一、摘要

基于pipeline的任务型对话系统可以拆解成以下四个部分,其中NLU为意图槽位理解,DST为对话历史并能根据当前用户query更新状态,Policy learning为根据用户需求判断下一步action(也就是论文中提到的dialog act),NLG为对话生成。本论文目标是提高后两步的性能。
在这里插入图片描述
示例如下:
在这里插入图片描述
创新点:将dialog act表示成图结构,并使用了独立多头self-attention(Disentangled Self-Attention,DSA)。

二、Dialog Act表示

定义:dialog act是一个语言序列的语义状态,包括action、意图、槽位名、槽位值。
论文将dialog act表示成(domain, action, slot)三元组,比如hotel-inform-location、hotel-inform-name等。表示dialog act的结构有两种方式,分别为树结构和图结构。假设domain数n1,action数n2,slot数n3。
在这里插入图片描述

  • 树结构
    如上图左为树结构。表示一个dialog act需要三部分:第1部分列举所有domain,那么产生一个n1纬的one-hot向量;第2部分列举所有domain-action的组合,那么产生一个n1n2纬的one-hot向量;最后列举所有(domain, action, slot)三元组,那么产生一个n1n2n3纬的向量;最后拼接成一个n1+n1n2+n1n2N3纬的向量表示dialog act。
    缺点: 一是复杂度高,为O(domain)*O(action)*O(slot);其次是阻碍了跨domain下的信息流动,比如同是recommend,但是hotel和hospital两个domain下的recommend是不同的,但是实际应该是有语义相似的。因此作者提出了图结构。
  • 图结构
    如上图右,作者将树结构中同层同节点合并就成了图结构。然后用domain、action、slot三部分的ont-hot向量拼接表示dialog act,这样向量纬度是H=n1+n2+n3。此外,作者合并了同一个response下不同的dialog act,这样就可能产生domain、action、slot三部分不是one-hot,而同时有多个值的情况。比如原先两个dialog act是[[1,0,0],[1,0]],[[1,0,0],[0,1]],合并后为[[1,0,0],[1,1]]。
    优点: 一是复杂度低,为O(domain)+O(action)+O(slot);二是可以解决跨domain的信息流动。比如hotel-inform-name可能并不在训练数据出现,那树结构在预测阶段也不能识别,但是对于图结构hotel、inform、name可能分开出现在多个dialog act中,这样预测阶段还是可能识别的。

三、模型

整体模型结构如下,主要分为两个模块,即图中Dialog-Act Predictor和Disentangled Self-Attention。前者用于预测dialog act,也就是response的骨架,后者用于生成具体的response。两者分开训练,前者微调自bert,训练好后再训练后者。
在这里插入图片描述

3.1 Dialog-Act Predictor

首先将用户和system的表征拼接起来,使用bert编码后得到token级别的u1 …um,以及整体表示u’。使用u’,融合知识库向量vkb和belief state(也就是dialog state,可以理解成一系列slot-value对,参考这里)向量vbf映射成一个H纬向量作为dialog act,做H个2分类问题,预测阶段离散成01向量,每一纬表示dialog act图结构的一个节点是否激活。

3.2 Disentangled Self-Attention

独立self-attention( Disentangled Self-Attention, DSA)与transformer中标准self-attention不同点在于,前者只会选择性的激活部分头,然后被激活的头代表的向量相加,后者是将所有头代表的向量concat起来。作者论文里使用了层次化独立self-attention(HDSA),每层分别对应dialog act图的每个层,这里采用三层,分别对应domain-action-slot。每层的开关由Dialog-Act Predictor模块预测的向量H控制。比如上面模型图中,dialog act在domain层向量为[1,0,0],因此激活hotel代表的头;action层向量为[0,1,0],激活inform;slot为[0,1,1,0],激活location和name两个头。
整体该模块根据u1…um和H向量来生成response。
缺点: 由于dialog act每个节点都对应self-attetnion的一个head,因此如果domain-action-slot比较多的任务(比如开发领域),那么将导致参数爆炸增长,难以训练。

四、实验

作者使用MultiWOZ数据集,该数据集统计数据如下:
在这里插入图片描述
实验结果如下:
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!