来源: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数据集,该数据集统计数据如下:
实验结果如下:
来源:CSDN
作者:hellozgy
链接:https://blog.csdn.net/u012852385/article/details/104327777