倪钰婷,张德平
(南京航空航天大学 计算机科学与技术学院,江苏 南京 211106)
任务型对话系统是自然语言处理领域的研究热点。基于特定场景,任务型对话系统需要与用户进行多轮交互,理解用户意图并完成用户目标。当前,任务型对话系统在多个业务场景得到广泛应用,如阿里小蜜、京东小智等电商平台的智能客服。任务型对话系统作为一种重要的人机交互手段,具有广阔的应用前景。
任务型对话系统主要分为管道方法(Pipeline Method)和端到端方法(End-to-End Method)。管道方法将任务型对话系统划分为四个模块,分别是自然语言理解(Natural Language Understanding, NLU)、对话状态跟踪(Dialogue State Tracking, DST)、对话策略(Dialogue Policy, DP)和自然语言生成(Natural Language Generation, NLG)。该方法具有较高的可解释性,但各个模块间容易产生误差积累。端到端方法则由单一模型构成,直接由用户输入得到系统输出。该方法结构简单,但依赖大量的训练数据,可解释性差。因此,工业界普遍采用管道方法构建任务型对话系统[1]。
近年来,市场上推出的各种任务型对话系统以单领域为主,而学术界研究热点则集中于多领域任务型对话系统,跨领域的复杂对话场景给对话状态跟踪带来了极大挑战。随着深度学习的发展,目前许多研究工作使用深度神经网络模型对话状态跟踪。相较于传统的基于人工规则的对话状态跟踪模型,该类研究方法在预测精度上得到较大提升,但仍面临严峻的挑战[2]。首先,编码阶段,现有模型对所有的对话历史进行编码,导致编码负担过重。其次,多领域场景下,现有方法大多未考虑领域与领域、槽位与槽位之间的关联,导致难以获取跨领域的关联信息。最后,解码阶段,现有模型仅关注对话上下文与槽位的全局语义,而忽视了局部语义,导致状态预测精度下降。
基于上述问题,本文提出一种融合槽位关联和语义关联的对话状态跟踪模型DST-S2C(Dialogue State Tracking with Slot Connection and Semantic Connection)。本文主要贡献归纳如下:
(1) 提出了层级图注意力网络(Hierarchical Graph Attention Networks, HGAT),将槽位构建成多关系图,计算槽位间的关系级和结点级注意力得分,提升了对话状态跟踪的预测精度。
(2) 提出了融入局部语义信息的槽门机制,将对话历史与槽位间的词级语义相似度向量作为槽门机制的增强特征,提高了槽门机制的预测精度。
(3) 实验表明,该模型在MultiWOZ2.0[3]和MultiWOZ2.1[4]数据集上均有较优的表现。
目前,基于深度学习构建对话状态跟踪模型有两种方式: 检索式与生成式。检索式方法将对话状态跟踪视为分类任务,其基本思想是: 预定义一个包含所有候选槽值对的本体,在每轮对话中对每个槽位进行分类预测。生成式方法不基于预定义的领域本体,直接以序列生成的形式预测槽值。
基于生成式方法的对话状态跟踪的泛化能力更强,Wu等人[9]在指针生成网络(Pointer Network)[10]的基础上,提出了TRADE模型。该模型使用双向门控循环单元(Gated Recurrent Unit, GRU)[11]编码对话历史,并在解码过程中引入软拷贝机制(Soft Copy Mechanism)[12]直接生成每个槽位对应的值。为提高多领域、大数据量场景下的计算速度,Ren等人[13]提出了COMER模型。该模型利用BERT对前轮对话状态、前轮系统输出和当前轮用户输入进行编码,然后采用分层解码结构生成槽值。此后,Kim等人[14]提出SOM模型,该模型将对话状态视为固定大小的内存,并提出一种选择性覆盖机制来提高对话状态跟踪的效率。SOM将对话状态跟踪分解为两个子任务: 状态操作预测和槽值生成。状态操作预测以编码器的输出作为四分类器的输入,而槽值生成只作用于状态操作预测为“UPDATE”的槽位。
对话状态跟踪任务的具体描述如下:t时刻的系统回复为Rt,用户语句为Ut,则t时刻的对话上下文为Dt={R1,U1,…,Rt,Ut}。对话状态跟踪的目标是根据Dt获取t时刻的对话状态。对话状态主要负责记录所有槽值对信息,其表示形式为Bt={S1:V1,S2:V2,…,SN:VN},其中,S表示槽位,V表示槽值,N表示槽位总数。
对话进行中的每一轮次,对话状态跟踪都会根据当前对话语句进行状态更新。假设一个完整对话共T轮,则对话状态B={B1,B2,…,BT}。这T个对话状态越近似真实对话状态,则表明对话状态跟踪模型的性能越好。
DST-S2C的模型结构如图1所示,该模型由四个模块组成,分别是对话历史编码器、多关系图编码器、槽门机制和槽值解码器。
图1 DST-S2C的模型结构图
2.2.1 对话历史编码器
对话历史编码器负责将自然语言形式的对话历史编码成数值型特征,对话历史指的是当前对话之前的对话信息。一个完整的对话可以表示成一个对话轮次集合X={(R0,U0),(R1,U1),…,(RT,UT)},(Rt,Ut)表示t时刻的对话语句,Rt表示系统回复,Ut表示用户语句,对话语句则以单词序列的形式表示。
对话历史由当前对话语句和前一轮对话状态组成。t时刻的对话历史表示为Xt=[CLS]⊕Rt⊕[SEP]⊕Ut⊕[SEP]⊕Bt-1。其中,Rt表示系统回复,Ut表示用户语句,Bt-1表示前一轮对话状态,⊕表示拼接操作。[CLS]和[SEP]是特殊标记,[CLS]标签代表整个对话历史的句子级表示,[SEP]标签代表对话历史不同组成部分的分隔符。
本文利用预训练语言模型BERT作为对话历史编码器,对话历史Xt由一个词序列组成,该词序列的词嵌入作为BERT模型的一部分输入,此外,还需要增加对话历史的分段嵌入和位置嵌入。分段嵌入表示对话历史中不同组成部分的编码,本文将Rt部分的分段嵌入设为0,Ut部分的分段嵌入设为1,Bt-1部分的分段嵌入设为2。位置嵌入表示对话历史中每个词的位置信息,以每个词在序列中的自然顺序来表示。
(1)
其中,Wpool为前馈神经网络的参数。
2.2.2 多关系图编码器
槽位关联信息由多关系图编码器引入,该过程主要包含多关系图构建以及图编码两部分。多关系图依赖本体构建,本体包含了对话领域中需要的所有槽位以及候选槽值信息。基于本体,将多关系图定义为G=(N,E)。其中,N={
本文提出四种槽位关系,即边连接类型,并根据这四种槽位关系为多关系图构建四个邻接矩阵,其中,共享值连接和隐式连接通常依赖于领域专家设置。共享值连接代表两个槽位的槽值域相交,隐式连接代表两个槽位的槽值存在一定的正比或反比关系。具体描述如下:
需要注意的是,结点与其自身具备领域连接关系和槽名连接关系。图2是上述四种关系类型的示例图。
图2 四种关系类型示例图
本文利用图注意力网络(Graph Attention Networks, GAT)[15]融合槽位关联信息,提出一种层级图注意力网络HGAT。HGAT由L个编码器块堆叠,每个编码器块分为注意力子层和前馈神经网络(Feed Forward Network, FFN)子层,注意力子层由关系级(relation-level)注意力机制和结点级(node-level)注意力机制组成。关系级注意力机制计算结点与关系之间的注意力分数,结点级注意力机制计算结点与结点之间的注意力分数。
图3是注意力子层的结构示意图,该图清晰展现了注意力子层中结点向量的更新过程。
图3 注意力子层的结构示意图
关系级注意力机制负责计算结点与关系之间的相关性,旨在让结点对相关性更强的关系类型给予更高的注意力。关系级注意力机制在标准注意力机制上进行了改进,不考虑原有表达式中的V,仅计算Q与K之间的注意力分数,不将注意力分数与V进行加权。Q代表所有结点向量,初始结点向量由对话历史编码器获得,维度为d。K代表所有关系向量,将所有关系记为R={r1,r2,r3,r4}。本文利用torch框架中的Embedding函数获取关系向量,关系向量的维度与结点向量一致。
结点i与关系j的关系级注意力得分计算如式(2)、式(3)所示。
(2)
(3)
结点级注意力机制负责计算结点与结点之间的相关性,与标准注意力机制一样,结点级注意力机制由Q、K和V作为输入,这三个变量都表示为所有结点向量,向量维度为d,E表示多关系图中的所有边。
结点i与结点j的结点级注意力得分计算如式(4)~式(6)所示。
本文的FFN子层与Transformer[16]结构相似,由两个全连接层和ReLu激活函数组成,如式(7)所示。
FFN(x)=Wf2ReLu(Wf1x+b1)+b2
(7)
其中,Wf1、Wf2、b1和b2都是可训练参数。
2.2.3 槽门机制
DST-S2C模型在槽门机制模块中引入语义关联。槽门机制利用槽位向量对每个槽位的状态操作进行预测。槽位的状态操作集合表示为{none, dontcare, carryover, generate, copy},状态操作可以理解为该槽位的槽值预测方式。“none”表示该槽位不需要预测槽值,“dontcare”表示该槽位可任意取值,“carryover”表示该槽位的值与前一轮对话状态中的槽值保持一致,“generate”表示该槽位的值可以从对话历史中获取,“copy”表示该槽位的值无法直接从对话历史中获取,需要从前一轮对话状态的其他槽位中以值拷贝的方式获取。
本文对槽门机制的输入做了改进,除了利用槽位向量外,额外引入对话历史与槽位的词级语义相似度向量作为局部语义特征。最后,将该向量与槽位向量拼接后作为槽门机制的输入。
(8)
Ht中每个词向量都按式(8)计算其与槽位i的语义相似度,并将结果合并到一个向量中,记为simi∈Rlen,len表示对话历史的序列长度。
接下来,槽位i的状态操作分布概率计算如式(9)所示。
(9)
最后,t时刻槽位i的状态操作预测结果如式(10)所示。
(10)
2.2.4 槽值解码器
槽值解码器负责预测槽值,由生成式解码器和拷贝式解码器两个子模块构成。生成式解码器对槽位状态操作为“generate”的槽位进行预测,拷贝式解码器对槽位状态操作为“copy”的槽位进行预测。
(13)
接下来需要对隐向量作进一步处理,首先利用词嵌入矩阵Evoc∈Rdvoc×hd将隐向量映射到词典空间中,得到隐向量在词典空间中的概率分布如式(14)所示。
(14)
其中,dvoc表示词典大小,hd表示隐向量维度。
接着,将隐向量映射到对话历史Ht的词空间中,得到隐向量在对话历史中的概率分布如式(15)所示。
(15)
与TRADE[9]类似,本文利用软拷贝机制[12]生成一个标量α,α决定第k步解码输出直接从词典中生成或者直接从对话历史中获取。
(16)
(17)
最终,第k步解码输出分布计算如式(18)所示。
(18)
上述解码过程直到生成代表解码结束的特殊标记[EOS]才停止解码。
拷贝式解码器对槽位状态操作为“copy”的槽位进行预测,首先预测出与目标槽位i关联性最大的槽位,将其视为源槽位,然后直接从前一轮对话状态中复制源槽位的值。
其中,j∈{1,2,…,N}{i}。
然后,将概率最高的槽位作为目标槽位i的源槽位。最后,槽位i的槽值直接通过拷贝源槽位的槽值进行获取。
本文模型训练的目标函数主要由三部分组成,分别是槽门机制的槽位状态预测损失Lgate、生成式解码器的槽值预测损失Lgen以及拷贝式解码器的源槽位预测损失Lcopy。上述损失函数均采用交叉熵函数,具体计算如式(21)~式(23)所示。
模型训练的目标函数为三个损失函数之和如式(24)所示。
Ltotal=Lgate+Lgen+Lcopy
(24)
结合上文所述,DST-S2C模型的训练过程伪代码如算法1所示。
算法1 训练过程输入: 预处理后的训练集(Rt,Ut,Bt-1,ygate,ygen,ycopy)输出: 模型预测结果(y^gate,y^gen,y^copy)1:for epoch in Epoch do2: Lgate,Lgen,Lcopy,Ltotal=03: for batch in Batch do4: Ht,H[CLS]t,H[SLOT]t=对话编码器(Rt,Ut,Bt-1)5: SLt=多关系图编码器(H[SLOT]t)6: y^gate,Lgate=槽门机制(Ht;SLt)7: if label(y^gate)=generate8: y^gen,Lgen=生成式解码器(Ht;H[CLS]t;SLt)9: Ltotal+=Lgen10: iflabel(y^gate)=copy11: y^copy,Lcopy=拷贝式解码器(H[CLS]t,SLt)12: Ltotal+=Lcopy13: Ltotal.backward(),误差反向传播更新参数14: end15: 在验证集上进行验证16: end
本文实验使用两个基准数据集: MultiWOZ 2.0和MultiWOZ 2.1。MultiWOZ 2.0是一个大规模的多领域对话语料,每个对话都有相应的对话状态和对话动作标注。MultiWOZ 2.0中共有10 438个对话,其中包含3 406个单领域对话和7 032个多领域对话;共有115 434个对话轮次,单领域对话平均轮数为8.93,多领域对话平均轮数为 15.39。
MultiWOZ 2.1是MultiWOZ 2.0的修正版本,该数据集对MultiWOZ 2.0 中存在的对话状态标注错误和对话语句错误进行了修正。MultiWOZ 2.1中包含Train、Attraction、Restaurant、Taxi、Hotel、Hospital、Police共7个领域,其中,Hospital和Police两个领域在数据集中缺少对应的对话状态标注,因此仅选取前5个领域的数据进行实验。最终,经过数据预处理后,实验数据包含 5个领域、30个槽位以及超过4 500个槽值。具体统计信息如表1所示。
表1 MultiWOZ 2.1数据集统计信息
实验主要通过联合准确率(Joint-accuracy)和槽位准确率(Slot-accuracy)两个指标来评价模型效果。
联合准确率表示在所有对话轮中,所有槽位均正确的对话轮所占的比例,该指标用于评价模型在轮级别的对话状态预测能力,如式(25)所示。
(25)
其中,turnall为测试集中对话轮总数,turncorrect为所有槽位均正确的对话轮数。
槽位准确率表示在每一轮对话中,槽位的准确率,用于评价模型在槽级别的对话状态预测能力,如式(26)所示。
(26)
其中,slotall为测试集需要判断的槽位总数,slotcorrect为这些槽位中预测正确的槽位个数。
为验证本文提出的DST-S2C模型的有效性,实验部分将与若干被验证有效的模型进行对比,本文选择两类方法作为基线方法: 未引入图结构的方法(w/o Graph)和引入图结构的方法(w Graph)。两类基线方法的区别在于,w Graph以一种清晰明确的图结构对槽位关系进行建模,而w/o Graph只依赖槽位的语义信息。
TRADE[9]包含槽门机制和用于状态生成的指针生成器。
COMER[13]将对话状态跟踪看作序列生成任务,采用层级解码方式生成对话状态。
SOM[14]利用BERT对前轮对话状态及对话历史进行编码,并采用RNN解码器为需要更新的槽位预测槽值。
DST-HTG[17]将槽位按领域名和槽名拆分,以领域名和槽名作为结点构建图,利用GAT对槽位关系进行建模。
SST[18]将槽位按词拆分,以拆分后的词作为结点构建图,利用GAT对槽位关系进行建模。
CSFN-DST[19]将槽位按领域名和槽名拆分,以槽位、领域名和槽名作为结点构建图,利用多头注意力获取槽位之间的关系。
GCDST[20]以槽位作为结点构建图,利用图卷积网络(Graph Convolutional Network, GCN)[21]对槽位关系进行建模。
本实验使用BERT-base-uncased模型进行对话编码,并利用GRU作为槽值解码器,解码过程使用贪心搜索策略。实验的Epoch数为30,训练集和验证集的批次大小均为32。本实验一共运行5次,最终的实验结果取5次实验的平均。DST-S2C模型的具体参数设置如表2所示。
表2 参数设置
3.5.1 实验结果
各模型在MultiWOZ 2.0和MultiWOZ 2.1上的实验结果如表3所示。基线方法的结果来源于原始文献,其中,星号标注的数据源自复现实验,复现实验的参数设置与本文方法保持一致。
表3 各模型在MultiWOZ 2.0和MultiWOZ 2.1上的联合准确率与槽位准确率
由表3可以看出,DST-S2C与两类基线方法相比均取得了明显性能的提升。与w/o Graph相比,如COMER和SOM,DST-S2C在MultiWOZ 2.0数据集上的联合准确率提升了4.67%和1.74%;在MultiWOZ 2.1数据集上的联合准确率提升了6.73%和3.34%。提升明显的主要原因在于,DST-S2C中的多关系图将槽位关联信息融入到状态跟踪过程中,具备处理槽位指代问题的能力,而w/o Graph方法未考虑槽位关联信息。与w Graph相比,如SST和CSFN-DST,DST-S2C 在MultiWOZ 2.0数据集上的联合准确率提升了2.29%和1.89%;在MultiWOZ 2.1数据集上的联合准确率提升了1.12%和3.47%。DST-S2C与w Graph方法均利用图结构建模槽位关系,不同之处在于DST-S2C将槽位构建成多关系图,而w Graph将槽位构建成单关系图。因此,相较于其他引入图结构的方法,DST-S2C的优势可能源于多关系图编码器中的层级图注意力,该机制不仅关注槽位与槽位的关系,还关注了槽位关系的多样性。
3.5.2 实验分析
为验证本文提出的对话历史编码方式的有效性,本文在实验部分对对话历史编码器模块进行消融实验,实验结果如表4所示。
表4 DST-S2C的对话历史编码器在MultiWOZ 2.1上的消融实验结果
由表4可以发现,增加对话历史编码信息后,模型的联合准确率并未得到提升,而省略部分信息则导致模型性能下降。该结果表明,仅对当前轮对话信息和前轮对话状态进行编码的方式是有效的,与前轮对话状态相比,当前轮对话信息对状态跟踪的影响更大。
为探索多关系图中槽位关系建模对状态跟踪的影响,本文在实验部分进一步分析了DST-S2C在特定领域和特定槽位的表现。将测试集按照不同领域划分为若干子数据集,每个子数据集中的对话仅包含特定领域的槽位。表5是DST-S2C、CSFN-DST和SOM在特定领域的联合准确率。
表5 MultiWOZ 2.1中特定领域的联合准确率
表5的结果表明,DST-S2C在所有领域中的表现均优于其他模型,尤其是在“Restaurant”和“Hotel”领域。多领域对话场景中,不同领域间的槽位并不是完全相互独立的。如
为评估DST-S2C在特定槽位的表现,本文统计了DST-S2C和SST在不同槽位的槽值预测误差率。图4是排在前五和后五的槽位误差率。
结果表明,DST-S2C在特定槽位的准确率均高于SST,尤其是在跨领域槽位上。如槽位
槽门机制负责预测每个槽位的状态操作,而状态操作的准确性会直接影响槽值预测的精度。因此,为验证局部语义信息对槽门机制的影响,本文增加对槽门机制的评估实验。图5是槽门机制引入局部语义信息前后,在不同状态操作上的预测精度对比结果。
由图5可以看出,引入局部语义信息后,槽门机制中不同状态操作的预测精度都得到一定提升。“generate”和“copy”这两个状态操作的分类效果提升最为明显,这也解释了DST-S2C在联合准确度上的提升表现。此外,槽门机制对“none”的预测精度达到99%,而对“dontcare”的预测精度仅为50.4%。该现象最主要的原因在于数据的不平衡性,训练数据中标签为“dontcare”的数据占比较少,而大部分数据的标签为“none”,这导致不同状态操作预测的表现差异过大。
最后,为评估DST-S2C不同组件的作用,本文对DST-S2C进行消融实验,实验结果如表6所示。
表6 DST-S2C在 MultiWOZ 2.1上的消融实验结果
移除多关系图编码器的变体,其联合准确率下降了1.96%。移除词级语义相似度向量的变体,其联合准确率下降了0.65%。由此表明,槽位关联信息和局部语义信息对提升对话状态跟踪的表现确有帮助。相比于局部语义信息,槽位关联信息所起的作用则更加重要。
本文首先探讨了当前对话状态跟踪任务中存在的主要问题。基于这些问题,提出一种融合槽位关联和语义关联的对话状态跟踪模型DST-S2C。该模型引入多关系图对槽位进行关系建模,利用层级图注意力网络对槽位向量进行更新。同时,在槽门机制中增加了词级语义相似度向量,获取槽位与对话的局部语义。在基准数据集MultiWOZ2.1上的结果表明,DST-S2C在联合准确率和槽位准确率上都超越了基线方法。消融实验则进一步验证了DST-S2C中多关系图编码器和词级语义相似度向量的有效性。最后,实验过程中遇到的名称类槽位难以跟踪以及槽门机制中类别不平衡的问题,将成为后续工作的研究内容。