共计 7974 个字符,预计需要花费 20 分钟才能阅读完成。
2019-ACL-SUMBT: Slot-Utterance Matching for Universal and Scalable Belief Tracking
概要
问题动机
在面向目标的对话框系统中,信念跟踪器会估计每个对话回合时的插槽值的概率分布。以前的神经网络方法已经建模了领域和槽依赖的信念跟踪器,并 在添加新的槽值方面存在困难,导致缺乏领域本体配置的灵活性
。
主要贡献
在本文中,作者提出了一种通用的、可扩展的信念跟踪器的新方法,称为 槽 - 话语匹配信念跟踪器(SUMBT)
。该模型通过基于上下文语义向量的注意机制来学习话语中域槽类型与出现的槽值之间的关系。此外,该模型以一种非参数的方式预测插槽值标签。
该模型灵感来源于机器阅读理解。将 域 - 槽 对看成一个问题从用户以及系统话语中来找出相对应的槽值。
模型
Contextual Semantic Encoders
上下文语义编码器,包括语句编码与域槽对编码以及槽值编码,后二者共享参数:
- 语句编码:
-
域 - 槽对编码:
-
槽值编码:
Slot-Utterance Matching
为了从话语中检索到与域 - 插槽类型对应的相关信息,该模型使用了一种注意机制。将域槽类型 $q^s$的编码向量作为查询,模型将其与每个单词位置的上下文语义向量 $u$ 进行匹配,然后计算注意力分数。
在此,本文使用了多头注意机制作为注意机制。多头部注意映射具有不同线性 $h$ 映射的查询矩阵 Q、Key 矩阵 K 和 Value 矩阵 V,然后对这些矩阵进行缩放点积注意。插槽 $s$ 和 $t$ 话语之间的上下文向量 $h^s_t$ 为:
其中,$Q = Q^s, K=V=U_t$
Belief Tracker
随着对话的进行,每个回合的信念状态由上的对话历史和当前对话回合决定。对话流可以由 RNN,如 LSTM 和 GRU,或 Transformer 解码器(即从左到右的单向 Transformer)建模:
最后,经过 LayerNorm 得到最终表示:
训练度量
在一定的距离度量下,训练输出与目标槽值语义向量之间的距离。插槽值 $v_t$ 的概率分布计算为:
损失函数为:
通过将所有域槽类型一起训练,模型可以学习槽类型和槽值之间的一般关系,这有助于提高性能。
实验
数据集
- WOZ 2.0
- MultiWOZ
主要结果
2020-ACL-Improving Limited Labeled Dialogue State Tracking with Self-Supervision
概要
动机
现有的对话状态跟踪 (DST) 模型 需要大量的标记数据
。然而,收集高质量的标签是 代价高昂
的,特别是当域的数量增加时。特别地,在现实应用中,本体是很难完备的,因此要面对很多 unseen 的情况,尽管拷贝机制对其有所改善,但是并不完美。
贡献
本文从很少有人讨论的角度使用复制增强无本体模型来处理 DST 问题,假设数据集中只有少数对话有注释状态标签。
提出了两种自监督学习 (SSL) 解决方案:
- 保持潜在的一致性 :鼓励 DST 模型对于一组稍微扰动的输入有
相似的潜在分布
(例如,注意力权值和隐藏状态)。该假设称为一致性假设
,使内在结构的分布足够光滑。 - 建模会话行为:训练一个 DST 模型来生成用户话语和系统响应,希望这个辅助生成任务能够捕获内在的对话结构信息,并有利于 DST 性能。
该训练只需要对话记录,不需要任何进一步的注释。
问题定义
定义 $X_{1:T} = \set{(U_1,R_1),...,(U_T,R_T)}$ 为 $T$ 轮对话历史。$B = \set{B_1,...,B_T}$ 为其对应的对话状态。其中 $B_t$ 为一个 $(domain, slot, value)$ 元组的集合,其元素由第一轮累积到第 $t$ 轮。
一个无本体的 DST 模型(这里用的是 TRADE)定义如下:
其中,上下文编码器编码 $1-t$ 回合的对话 $X_{1:t}$,状态生成器为每一个域槽对 ${(D_i,Sj) }$ 解码槽值 $V{ij}$。在解码每一个槽值 $V_{ij}$ 时,拷贝 - 注意
机制被用于增强槽值生成过程。此外,还需要一个槽门分类器来指示模型当前 域 - 槽
对是否被提及,为其模型添加额外的监督,而忽略未提及的对的预测。
具体计算如下:
其损失函数为:
$|ij|$: MultiWOZ 数据集中的 30 个域槽对
模型(自监督方法)
Latent Consistency
简单来说,就是将 $N_{drop}$ 个随机覆盖(轻微扰动)后的输入通过模型后的的输出与原始输入数据的输出尽量保持一致(一致性假设)。其计算过程如下:
-
求平均:
-
锐化槽门输出分布:
-
最小化目标损失函数:
Conversational Behaviour Modeling
作者假设在类似的对话状态下,系统也会做出类似的回应。这样,就可以潜在地模拟对话状态和对话行为之间的相关性。
利用两个 GRU 解码器,$GRU_1$ 建模用户行为,$GRU_2$ 建模系统行为以根据从 DST 模型中学习到的表示法来生成话语。
- $GRU1$: 根据 $X{1:t}$ 和 当前预测的对话状态 $B_t$ 来生成接下来的系统回应
- $GRU2$: 根据 $X{1:t-1}$ 和 当前预测的对话状态 $B_t$ 来生成用户话语
自觉上,我们期望 $GRU1$ 能够捕捉到 $R{t+1}$ 与 $B_t$ 之间的关系;$GRU_2$ 能够学习 $U_t$ 和 $B_t$ 之间的关系。
GRU 初始隐藏状态为:
目标损失函数:
最终目标函数
在训练过程中,使用标记数据同时优化了监督信号和自监督信号。整体损失函数为:
除了标记数据,我们也可以采样未标记数据,作为一个正则化进行自我监督。该策略可以被看作是一种半监督的方法,利用未标记的数据来学习一个平稳的预测。对于未标记的数据,只使用自监督信号来更新模型:
实验
数据集
MultiWOZ(布齐亚诺夫斯基等人,2018)是现有最大的人机对话语料库之一,跨越 7 个领域,包含约 8400 个多回合对话,每个对话平均 13.7 回合。本文根据不同的标记数据比例来评估模型。
主要结果
2021-ACL-Slot Self-Attentive Dialogue State Tracking
概要
动机
先前的方法都将槽分离对待,没有考虑槽之间的关系。导致槽值共引问题无法解决。
贡献
在本文中,提出了一种可以自动学习 槽相关性
的槽自注意机制。具体地说,首先在对话中获得特定于槽的特征。然后在这些特征上应用一个叠加的 槽自注意
来学习插槽之间的相关性。
本文在两个多领域的面向任务的对话数据集上进行了全面的实验,包括 MultiWOZ2.0 和 MultiWOZ2.1。实验结果表明,该方法在两个数据集上都取得了 最先进的性能 ,验证了 考虑插槽相关性的必要性和有效性。
问题定义
符号表示
T 回合对话上下文表示为 $\mathcal{X} = {(R_1,U1),...,(R{t-1},U_{t-1}),(R_t,Ut),(R{t+1},U_{t+1}),...,(R_T,U_T) }$ , 假设有 $J$ 个预定义槽 $\mathcal{S} = {S_1,S_2,...,S_J}$ 其中 $S_j$ 表示第 $j$ 个槽。第 $t$ 回合的对话状态为 $\mathcal{B}_t = {(S_j, V_j^t) | 1 \le j \le J }$ 其中 $V_j^t \in \mathcal{V}_j$ 表示槽 $S_j$ 对应的槽值,$\mathcal{V}_j$ 表示槽 $S_j$ 的所有值的集合。将所有槽与其对应的槽值集合元组集合起来就构成了一个本体(Ontology):
$$
\mathbb{O} = {(S_1,\mathcal{V}_1),...,(S_J,\mathcal{V}_J) }
$$
基于对话上下文 $\mathcal{X}$ 以及本体 $\mathbb{O}$ , DST 的任务就是学习一个状态追踪器 $\scr{F}: \mathcal{X} \times \mathbb{O} \rightarrow \mathcal{B}$ 来捕捉用户在对话过程中的意图。
另外,本文使用 域 - 槽
对来指代槽信息,如一个完整的槽表示应该是 $\mathcal{restaurant-pricerange}$
数据分析
为了直观地描述槽间关系,本文对 MultiWOZ2,1 数据集进行了分析。利用信息论中的 标准化互信息
来计算两个槽之间的相关性。选取了两个槽的 top5 相关的槽如下图:
可以观察到,槽“restaurant-area”和“taxi-destination”确实与其他一些槽 高度相关
。相关的插槽 不仅在同一域内,而且还跨不同的域
。例如,槽“taxi-destination”与槽“restaurant-food”高度相关,尽管它们的名字没有明显的联系。这一观察巩固了本文的动机,即 考虑槽之间的关系
的必要性。
模型
STAR 的整体架构如上图,它由一个基于 BERT 的 上下文编码器模块
、一个 槽注意模块
、一个 堆叠的插槽自注意模块
和一个 槽值匹配模块
组成。
Context Encoder
对话上下文编码
设第 $t$ 回合的度化话语为 $D_t = R_t \oplus U_t$, 对话历史被定义为 $M_t = D_1 \oplus D2 \oplus \cdots D{t-1}$。第 $t$ 回合的对话上下文被定义为:
$$
X_t = [CLS] \oplus M_t \oplus [SEP] \oplus D_t \oplus [SEP]
$$
由于 BERT 的最大输入长度限制为 512,如果 $𝑋_𝑡$ 太长,我们必须截断它。直接的方法是截断较早期的对话历史,保留 $𝑀_𝑡$ 中的最近的对话历史。但是,此操作可能会丢弃一些关键信息。为了减少信息丢失,我们也使用以前的MARKDOWN_HASH332a5fcce16023542417bb15a81b5665MARKDOWNHASH
$B{t-1}$ 作为输入,预计它将保留所有相关槽的历史信息。所以对话上下文信息最终表示为:
$$
X_t = [CLS] \oplus Mt \oplus B{t-1} \oplus [SEP] \oplus D_t \oplus [SEP]
$$
最终输出为:
$$
Ht = BERT{finetunr}(X_t) \
= [h_1^t,h2^t,...,h{|X_t|}^t] \in \R^{d\times |X_t|}
$$
槽 - 值 编码
我们需要生成插槽和值生成聚合向量表示。为了实现这一目标,我们使用与特殊标记 [𝐶𝐿𝑆] 对应的向量表示来表示整个输入序列的聚合表示,对于任何一个槽 $S_j \in \mathcal{S}$ 或槽值 $V_j^t \in \mathcal{V}_j$ , 计算其聚合表示:
Slot-Token Attention
在每个回合 $𝑡$ 从相同的对话上下文 $𝑋_𝑡$ 由于有多个槽被预测,提取每一个槽的信息变得非常必要。该模型采用了多头注意力机制来检索与每个槽 $𝑆_j$ 对应的相关信息。
多头注意力
假设有一个 Query 矩阵 $Q = [q_1,q2,...,q{|Q|}] \in \R^{d_{model} \times |Q|}$,一个 Key 矩阵 $K = [k_1,k2,...,k{|K|}] \in \R^{d_{model}\times |K|}$ 以及一个 Value 矩阵 $Z = [z_1,z2,...,z{|K|}] \in \R^{d^{'}_{model}\times |K|}$ 且 Q 与 K 具有相同的维度。对于每一个 query 向量 $q_i$,通过一个 N 头注意,注意力向量 $a_i$ 计算如下:
$ai \in \R^{d^{'}{model}}$
$WQ^n \in \R^{(d{model}/N)\times d_{model}}$
$WK^n \in \R^{(d{model}/N) \times d_{model}}$
$WZ^n \in \R^{(d^{'}{model}/N)\times d^{'}_{model}}$
$WO \in \R^{d^{'}{model} \in d^{'}_{model}}$
将所有注意力向量放在一起构成一个注意力矩阵 $A = [a_1,a2,...,a{|Q|}] \in \R^{d^{'}_{model} \times |Q|}$,整个过程可以描述为:
$$
A = MultiHead(Q,K,Z)
$$
Slot-Token Attention
槽的聚合表示 $h_{[CLS]}^{S_j}$ 被当做 querry 向量,对话上下文表示 $H_t$ 被当做 key 和 value 向量。最后 token 级别的槽 $S_j$ 与上下文 $Xt$ 的相关性计算如下:
$$
r{Sj}^t = MultiHead(h{[CLS]}^{S_j}, H_t, Ht) \in \R^{d}
$$
考虑到 $r{S_j}^t$ 只包含了槽 $Sj$ 的值的信息,再将其与 $h{[CLS]}^{S_j}$ 连接后保留其名称信息。最后将该合成向量通过一个前馈神经网络:
$W_1^r \in \R^{d\times 2d}$
$W_2^r \in \R^{d\times d}$
$b^r_1,b^r2,b^t{S_j} \in \R^{d}$
Slot Self-Attention
单单计算 Slot-Token 注意力 并没有考虑到槽之间的关系 ,因此,一旦向量 $𝒄^𝑡_{𝑆_𝑗}$ 没有正确捕获插槽 $𝑆_𝑗$ 的相关信息,模型就没有机会推断出插槽 $𝑆_𝑗$ 的正确值。为了考虑到该问题,引入 槽自注意力机制
。
槽自注意力也是多头注意力。具体地说,该模块由 $𝐿$ 相同的层组成,每一层都有两个子层。第一个子层是插槽的自我注意层。第二个子层是一个前馈网络(FFN),具有两个完全连接的层,在两者之间有一个 ReLU 激活。每个子层在其主要功能之前使用 normalization,之后是残差连接。
令 $F^1_t = Ct = [c{S1}^t,...,c{S_J}^t] \in \R^{d\times J}$ , 对于 第 $l$ 个自注意力层:
再经过第二个子层:
其中 $FFN(y) = W_2 \cdot ReLU(W_1y + b_1) + b_2, (W_1, W_2) \in \R^{d\times d}$
最后一层的输出为 $Ft^{L+1} = [f{S1}^t,...,f{SJ}^t]$,其中 $F{S_j}^t \in \R^{d}$ 为 $F_t^{L+1}$ 的第 $j$ 列,也为槽 $S_j$的表示。最终,再经过 normalizetion 层,得到最终表示:
其中 $\gamma^t_{S_j} \in \R^d$
Slot Value Matching
为了预测每个槽 $𝑆𝑗(1≤𝑗≤𝐽)$,首先计算 $𝜸^t{𝑆_𝑗}$与每个值 $𝑉_𝑗^{'}∈V_𝑗$的语义向量表示之间的距离,其中 V𝑗表示槽𝑆𝑗的值空间。然后选择具有 最小距离
的值作为插槽 $𝑆_𝑗$的预测结果。我们采用 $L_2$ 范数作为距离度量。
在训练阶段,计算在第𝑡回合处槽 $𝑆_𝑗$ 的真实值 $𝑉_𝑗^𝑡$ 的概率为:
我们的模型被训练去最大化所有槽的联合概率,即 $Π^𝐽_{𝑗=1} 𝑝(𝑉_𝑗^𝑡|𝑋_𝑡,𝑆_𝑗)$。为此,每个回合 𝑡 的损失函数定义为负对数似然的和:
实验
数据集
- MultiWOZ 2.0
- MultiWOZ 2.1
主要结果
Slot Attention with Value Normalization for Multi-Domain Dialogue State Tracking
概要
动机
域本体(ontology)的 不完备性
和某些值的不可用性
是对话状态跟踪 (DST) 中不可避免的两个问题。现有的方法通常分为 两个极端
:选择不含本体的模型,或者将本体嵌入到模型中,从而导致过度依赖。在本文中,提出了一种新的架构来巧妙地利用本体,它由 槽注意 (SA)
和值标准化 (VN)
组成,被称为SAVN
。SA 共享插槽和话语之间的知识,只需要一个简单的结构来预测支持跨度。VN 是专门为使用本体而设计的,本体可以将支持的跨度转换为值。
贡献
简单、高效的插槽处理和灵活地使用本体是 SAVN 的主要优点。本工作的贡献总结如下:
- SA 共享槽和话语之间的知识,并能够共同优化所有槽的确定。与 DS-DST 中基于跨的方法相比,SA 在确定插槽时提高了效率。
- 考虑到本体中可能的槽值在实际场景中可能很多,VN 被设计为一个简单、灵活、有效的模型来使用本体,使用 V100GPU 只需要 8 分钟的训练。VN 可以选择直接从 SA 输出支持跨度,或者在本体中选择一个值。
- 用不完整的本体来完全评估 VN。结果表明,只要本体的完整性超过 30%,VN 就能获得积极的性能。正如我们所期望的那样,本体越完整,VN 就越能依赖它。
问题定义
定义 $X = {(u_1,r_1),...,(u_n,r_n) }$ 为对话历史。$C = [a_1,a_2,...,a_k]$ 为固定的 k 个候选槽值。$S = [s_1,s_2,...,s_j]$ 为 槽 - 值 对列表。
模型
模型如上图所示,包括 槽注意
和值规格化
。SA
从每个(域、插槽)对的话语中输出支持 sPan(SP)。VN 选择 直接输出支持跨度
或者 将支持跨度转换为本体中的值
。
Slot Attention
插槽注意 (SA) 接受两个输入,其中一个是 以前对话的文本
,另一个是(域、插槽)对的列表
。与 DS-DST 模型相似,也使用 BERT 作为 话语编码器
。不同之处在于,本文 分离了插槽和话语
,并在它们之间 分享知识
。然后,直接使用二者的内积来预测文本 跨度
,并使用一个注意模块与插槽和话语进行交互来进行 分类
。得益于这种结构,该模型可以并行确定槽,共同优化确定, 只需要为每个回合编码一次话语
,而 DS-DST 需要编码 count(slots) 时间。此外,为了使 SA 能够输出一些特殊的单词,在话语前添加了一些固定的候选值,如“yes”,“no”。
由于 BERT 的输入序列长度有限,将对话历史输入部分进行一定限制:
追踪输入为 $I = C \oplus X_t^m$:
$H_t^u \in \R^{p\times h}$
$H_t^s \in \R^{q\times h}$
$p$: 输入序列 I 的长度
$q$: 域 - 槽对的个数
$h$: BERT 的隐藏层维度
Slot Gate Classification
分类插槽的模块类似于 Transformer。采用“Scaled Dot-Product Attention”来获得一个 话语感知的槽表示
$A_u^s$:
$A_u^s \in \R^{q \times h}$
然后,为了更好地集成插槽和话语的状态,添加了 $A^s_u$和 $H_t^s$,得到 $H_c$ 作为分类特征进行分类:
$G_t$: 第 t 回合所有域槽对的槽门
Span-Based Value Prediction
对于每个域槽对,基于跨度的方法通过预测话语中开始和结束位置的跨来获得这个值。为了提高插槽的确定效率,我们简化了基于跨度的预测的结构。我们可以通过以下方法获得跨度预测:
$P_t^s,P_t^e$: 开始分布,结束分布
Optimization
第 t 回合的联合损失如下:
最终损失函数为:
Value Normalization
值规范化是一个利用本体的模块,也可以与其他 DST 模型相结合。考虑到本体中存在许多可能的值和训练数据很少,本文为 VN 设计了一个简单而有效的 VN 模型,它也可以受益于预训练的 BERT 模型。
VN 设计了一层变压器块,我们称之为 $VN^1$。通过类比,我们可以得到 $VN^4$和 $VN^{12}$(即使用 BERT 模型作为编码器)。该模型将从 BERT 的相应层加载参数。
令 [CLS] 位的输出表示为 $T_0$ , 利用 $T_0^s \in \R^{h}$ 作为跨度的编码后表示。$T_0^o \in \R^{n\times h}$ 表示 $n$ 个槽值的表示矩阵:
然后我们可以得到最大匹配值。此外,由于本体可能不完整,我们使用余弦相似性作为值门:
最终输出为:
$V^m$: 最匹配的值
$SP$: 跨度预测的值
$\theta$: 超参数
最后,VN 的损失函数为:
r=1 表示最终输出为 本体定义的值
实验
数据集
- MultiWOZ 2.0
- MultiWOZ 2.1