Jointly Optimizing State Operation Prediction and Value Generation for Dialogue State Tracking
概要
问题动机
现有的方法利用 BERT 编码器和基于拷贝的 RNN 解码器,其中编码器预测状态操作,并由解码器生成新的插槽值。然而,在这种堆叠的编码器 - 解码器结构中,操作预测目标 只
影响 BERT 编码器,而值生成目标 主要
影响 RNN 解码器。此外,在框架中,编码器是预先训练的,而解码器则没有预先训练。
在 SOM-DST(2019)上已经观察到了第二个问题,其所提出的解决方案是在训练过程中对编码器和解码器使用两种不同的优化器。该解决方案进一步分离了编码器和解码器,或 SOP 和 VG 过程,这使得进行全局优化变得更加困难。
另外,DST 任务与机器翻译等任务有些不同,它并非一个真正意义上的生成任务。例如,生成一个对话响应需要与对话历史相一致,或者翻译一个句子通常需要翻译编码器(输入)侧的每个单词。相比之下,在 DST 中生成的值只涉及模型输入的一小部分(在对话历史和以前的对话状态中),该输入通常由一个或几个 token 组成。在这种情况下,要求解码器考虑到所有的编码器输出可能会 模糊焦点
。
主要贡献
在本文中,提出了一个纯粹的基于 Transformer 的框架,其中一个单一的 BERT 同时作为编码器和解码器。这样,操作预测目标和值生成目标可以共同优化 DST 的 BERT。在解码步骤中,利用相应编码器层的自注意机制中编码器的隐藏状态,构建一个平面编码解码器架构,实现有效的参数更新。
- 通过重新利用相应解码器层的自注意机制中编码器的隐藏状态,提出了一种平面结构,使编码器中的参数更新更加有效。
- 为了焦点模糊问题,通过借鉴现有最先进的 DST 框架的想法进行以下改进:对于特定的(域、插槽)对,解码器只重用最相关输入的隐藏状态。
- 该方法 (Transformer-DST) 达到了最先进的性能,MultiWOZ2.0 和 Multiwoz2.1 的联合目标准确率分别为 54.64% 和 55.35%,使现有生成框架分别提高了 2.9% 和 2.3%。
- 该模型比现有的框架更快、更稳定的方式收敛到其最佳性能。这表明了操作预测和值生成的联合优化的效率和鲁棒性。
相关研究
当前的研究都使用编码器 - 解码器结构来进行 DST 任务。现有最先进的生成框架(如 SOM-DST、TRADE、TripPy、Simple-DST 等)将 DST 分解为两个子任务:操作预测 (SOP) 和值生成 (VG)。首先, 编码器
读取对话历史记录和以前的对话状态,并决定是否需要更新(域、插槽)对的值。然后,解码器
为(域、插槽)对生成一个插槽值。
模型
$T$ 回合的对话表示为:$(D_1,S_1),...,(D_T,S_T)$,其中 $D_t$ 表示第 $t$ 回合的用户话语和系统话语,$S_t$ 表示第 $t$ 回合的对话状态,且 $S_t = {(d_j,s_j,v_j)|1\le j \le J }$,如果没有给定 $(d_j,s_j)$ 其值就为 $NULL$。DST 的目标就是给定 ${(D_1,S1),..,(D{t-1},S_{t-1}),(D_t) }$ 来预测 $S_t$ .
上图给出了本文提出的框架的概述。该模型是用 BERT 初始化的多层 Transformer,既用作状态操作预测的编码器,也用作值生成的解码器。这两个过程之间的区别在于输入、自我注意 Mask 和目标函数,这在下文会被详细介绍。
State Operation Prediction
Encoder
编码器的输入为 $D{t-1};D{t};S{t-1}$,其中 $S{t-1} = [SLOT]\oplus d_j \oplus - \oplus s_j \oplus - \oplus v_j$ 且 $s_j,vj$ 可能由好几个 token 组成。并且,$[SLOT]$ 位的隐藏状态 ${X{slj}^L | 1 \le j \le J }$ 被用来作状态操作预测。并且我们希望 $[SLOT]$ 位置的隐藏状态能后聚合对应的 $(d,s,v)$ 的信息,如 $X{sl_j}^l$ 聚合了 $(d_j,s_j,v_j)$ 的信息。
输入 $X^0$ 为 token 嵌入,位置嵌入以及类型嵌入的和。应用类型嵌入来引入编码器侧和解码器侧之间的分离。多层 Transformer 通过 $X^i = Trans^i(X^{i-1}),i \in [1,L]$ 来更新隐藏状态。在 Transformer 块内,多头注意力机制为:
$$
C^l = Concat(head_1,...,head_h) \
head_j = softmax(\frac{Q_jK_j^T}{\sqrt{d_k}} + M^x) V_j
$$
$Q_j,K_j,V_j \in \R^{n\times d_k}$ : $X^{l-1} \in \R^{|x|\times d_h}$ 分别利用线性映射 $W_j^Q,W_j^K,W_j^V$ 转换而来。
$M^x \in \R^{|x|\times |x|}, M{ij}^x \in {0,-\infty}$: 自注意力的 Mask , 决定一个位置是否可以注意到其他位置。在状态操作预测过程中 $M{ij}^x = 0, \forall i,j$ .
编码器的一些隐藏状态将在解码器中被重用。编码器的输出记为 $X^L = [x_{cls}^L,x1^L,...,x{sl1}^L,...,x{sl_J}^L,...]$,将用于操作预测。
Objective
操作被预测为 4 类:$CARRYOVER,DELETE,DONTCARE,UPDATE$,根据编码器的输出 $x_{sl_j}^L | 1\le j \le J$ , 用一个 MLP 层来执行每一个槽的操作预测。只有在预测为 $UPDATE$ 时,解码器才会为(domain、slot)对生成一个新的槽值。
Slot Value Generation
Decoder
解码器应用不同类型的嵌入来表示其输入和从左到右的自我注意掩码来生成槽值,以避免信息泄漏。解码器 重用多头自注意机制中编码器的隐藏状态
,构建一个 flat 的编码器 - 解码器结构,使编码器中的参数更新更加高效:
$$
Q_j = Y^{l-1} W_j^Q \
\hat{K}_j = concat([\hat{X}^{l-1},Y^{l-1}]) W_j^K \
V_j = concat([\hat{X}^{l-1},Y^{l-1}]) W_j^V \
head_j = softmax(\frac{Q_j\hat{K}_j^T}{\sqrt{d_k}} + M^y) \hat{V}_j
$$
$\hat{X}$ : 被重用的隐藏状态
$Q_j \in \R^{|y|\times d_k}, \hat{K}_j,\hat{V}_j \in \R^{(|\hat{x}| + |y|) \times d_k}$
$M^y \in \R^{y\times (|\hat{x}| \times |y|)}$ : 自注意力 Mask, 且当 $j \le i$ 时 $M^y_{ij} = 0$
由于应用了双向注意,编码器的被重用的隐藏状态已经在一定程度上对整个输入进行了编码。我们将在实验中表明,仅重用当前的对话回合 $D_t$ 和第 $j$ 个 $[SLOT]$ 位置的隐藏状态就可以获得最好的性能。
Objective
槽值生成过程的目标为生成槽子与真实值相比的自回归损失,追踪的训练目标是状态操作预测损失和槽值生成损失的和。
实验
数据集
- MultiWOZ 2.0
- MultiWOZ 2.1
主要结果
2021-NAACL-Context Tracking Network: Graph-based Context Modeling for Implicit Discourse Relation Recognition
概要
这篇文章是关于隐式语篇上下文关系编码的,其将段落建模层一个图 (PAG),节点就是段落中的句子,每个句子通过不同类型的边缘从复杂的话语中追踪它们密切相关的上下文。然后,通过一种特殊设计的 跨粒度更新机制
从 PAG 中提取上下文表示,该机制可以有效地集成 句子级和 token 级
的上下文语义。
该方法或许会对具有长对话历史的 DST 中存在长距离遗忘的问题有一定帮助,值得关注。
模型
Paragraph Association Graph
对于输入段落 $P = {S_1,S2,...,S{n-1}, Sn }$ , 其中 $S{n-1}, S_n$ 为邻接的句子对,$S1,...,S{n-2}$ 为具有背景信息的上下文。模型的目标是判断出 $S_{n-1},S_n$ 之间的关系。首先为 $P$ 构建了一个段落关联图 (PAG),然后在 PAG 上使用MARKDOWN_HASHa9f45278674c1319f58b05408e67daafMARKDOWNHASH
来提取 $S{n−1}, S_n$ 的上下文表示。
本文提出的 CT-Net 其输入为一个 PAG,即段落关联图。图 $\mathcal{G} = (\mathcal{V}, \mathcal{E})$ 的结构如下:
PAG 包含句子节点(蓝色)和 token 节点(橙色)。每个 token 节点都与其对应的句子节点相连接。
其包含 3 种边,对应 3 种关系,分别为:
- 邻接边(黑色): 相邻的句子往往携带重要的上下文信息。因此,我们在话语中增加了邻居之间的邻接边
- 共引边(紫色): 具有共引用关联的句子倾向于涉及同一个对象,并且高度相关,所以我们在它们之间添加了一个共引用边
- 词汇边(绿色): 追踪到贯穿整个段落的相关单词。包含分类器层的句子,相同的单词或同义词(停止词除外)往往涉及相同的主题,因此,我们在它们之间添加了一个词汇链边。
Cross-Grained Updating Mechanism
CT-Net 通过交叉粒度更新机制从 PAG 中提取 $S_{n-1},S_n$ 的上下文表示,并执行 T 轮。在第 $t$ 轮时,第 $i$ 个句子节点的状态为 $gi^t$ , 其第 $j$ 个 token 节点的状态表示为 $h{i,j}^t$。token 节点的初始状态 $(t=0)$ 的状态为:
$$
h{i,j}^0 = x{i,j} = W[x{i,j}^{char};x{i,j}^{glove};x_{i,j}^{elmo}]
$$
状态从 $t-1$ 转到 $t$ 的过程分为 3 步:
-
Token-to-Sentence Updating:
利用 Sentence-state LSTM (SLSTM) 来更新句子节点的状态:
$$
gi^t = SLSTM{h\rightarrow g}(h{i,0}^{t-1},h{i,1}^{t-1},...,h_{i,|Si|}^{t-1},g{i}^{t-1},)
$$ -
Sentence-to-Sentence Updating:
利用 Multi-Relational GCN 来获取上下文句子表示:
$$
c_i^t = \sigma(W_ggi^t +\sum{r\in R}\sum_{k\in N_i^r} \frac{1}{|N_i^r|} W_r g_k^t)
$$$R$ : 边类型的集合
$N_i^r$: 与第 $i$ 个句子有关系 $r$ 的邻居节点集合
-
Sentence-to-Token Updating:
同样利用 SLSTM 来更新每一个 token 的状态:
$$
h{i,j}^t = SLSTM{g\rightarrow h}(x_{i,j},ci^{t-1},h{i,j-1}^{t-1},h_{i,j+1}^{t-1})
$$$x_{i,j}$: 为初始状态
在执行 $T$ 轮后,我们最终得到了 $S_{n-1}, Sn$ 的最终上下文表示 $c{n-1}^T, c_{n}^T$ , 它集成了句子级别和 token 级别的上下文语义信息。
Classification Layer
在得到 $c{n-1}^T, c{n}^T$ 后,利用 BiLSTM 通过在两个方向上链接追踪隐藏层状态来将 $Sn,S{n-1}$ 分别编码为 $l{n},l{n-1}$ , 二者为不考虑更广泛的上下文的局部表示。然后,将连接全局和局部特性如下:
$$
X{cls} = concat(l{n-1},ln,c{n-1}^T,cn^T)
$$
将 $X{cls}$ 馈入两层 MLP (a fully-connected layer with ReLU activation followed by a softmax output layer)进行分类。
Multi-Task Training
应用多任务学习来提高性能。主要任务是隐式语篇关系识别 (IDRR),辅助任务是显式语篇关系识别(EDRR) 和结缔预测(CP)。这三个任务共享相同的编码器,但使用三种不同的 MLP。目标函数如下:
实验
2020-ICML-TEMPORAL GRAPH NETWORKS FOR DEEP LEARNING ON DYNAMIC GTAPHS
概要
尽管图上的深度学习模型过多,但很少有人提出处理本质上动态的图(例如随着时间的推移演化的特征或连通性)。大多数对图的深度学习的方法都假设底层图是静态的。然而,大多数现实生活中的交互系统,如社交网络或生物交互组,都是动态的。本文提出了时间图网络(TGNs),一个通用的、有效的框架,用于深度学习以时间事件序列表示的动态图。
在本文中,首先提出了时间图网络 (TGNs) 的通用框架,并证明了 许多以前的方法都是 TGNs 的特定实例
。其次,提出了一种 新的训练策略
,允许模型在保持高效并行处理的同时从数据的序列性中学习。第三,对框架的不同组件进行了详细的 消融研究
,并分析了 速度和准确性之间的权衡
。最后,我们在转换和感应设置下的多个任务和数据集上展示了 最先进的性能,同时比以前的方法要快得多。
相关研究
静态图上的深度学习
静态图 $\mathcal{G} = (\mathcal{V}, \mathcal{E})$ 由节点集合 $\mathcal{V}$ 和边集合 $\mathcal{E} \subseteq \mathcal{V} \times \mathcal{V}$ , 他们具有的特征表示为 $\bf{v}i, e{ij} , i,j = 1,...,n$ . 一个典型的图神经网络 GNN 通过学习该形式的局部聚合规则来创建一个节点的嵌入 $\bf{z}_i$:
$$
zi = \sum{j\in \mathcal{N}i} h(m{ij},vi) \
m{ij} = msg(v_i,vj,e{ij})
$$
被解释为从 $i$ 的邻居 $j$ 传递的消息。这里,$\mathcal{N}_i={j:(i,j)∈\mathcal{E}}$ 表示节点 $i$ 的邻域,$msg$ 和 $h$ 是可学习的函数。
动态图
动态图主要有两种模型。离散时间动态图 (DTDG) 是每隔时间间隔拍摄的静态图快照序列。连续时间动态图 (CTDG) 更一般,可以表示为事件列表,其中可能包括边添加或删除、节点添加或删除以及节点或边缘特征转换。
本文提出的时间图被建模为一系列时间戳事件 $\mathcal{G} = {x(t_1),x(t_2),... }$, 表示在时间 $0 \le t_1 \le t_2 \le ...$ 时节点的添加或更改或一对节点之间的交互,一个时间 $x(t)$ 可以是两种类型:
-
node-wise event
表示为 $v_i(t)$ , 其中 $i$ 表示第 $i$ 个节点并且 $v$ 表示与该事件相关联的向量属性。如果 $i$ 还未可见,事件将创建节点 $i$(具有给定的特性),否则它将更新特性。
-
interaction event
节点 $i$ 与节点 $j$ 之间的交互事件用一个有向的时间边 $e_{ij}$ 表示(一对节点之间可能不止一条边,所以从技术上说,这是一个多重图)。
将 $\mathcal{V}(T) = {i: \exist vi(t) \in \mathcal{G}, t\in T }$ 和 $\mathcal{E}(T) = {(i,j) : \exist e{ij}(t) \in \mathcal{G}, t\in T }$ 分别表示节点和边的时间集,T 时刻节点 $i$ 的邻居集合表示为 $\mathcal{N}_i(T) = {j:(i,j)\in \mathcal{E}(T) }$,$\mathcal{N}_i^k(T)$ 表示节点 $i$ 的 k 跳邻居集合。图 $\mathcal{G}$ 在 $t$ 时刻的快照是具有 $n_t$ 个节点的图,表示为 $\mathcal{G} = (\mathcal{V}[0,t],\mathcal{E}[0,t])$。
模型 (Temporal Graph Networks)
动态图的神经模型可以视为 编码器 - 解码器
对,其中 编码器是从动态图映射到节点嵌入的函数,解码器将一个或多个节点嵌入作为输入,并进行特定任务的预测,例如节点分类或边缘预测
。本文的关键贡献是一种 新的时间图网络 (TGN) 编码器
,应用于连续时间动态图表示的时间戳事件序列,并为每个时间节点 $t$ 产生嵌入图节点 $Z(t) = (z1(t),...,z{n(t)}(t))$ .
Core Modules(核心模块)
Memory
模型在时间 $t$ 时的内存(状态)由模型迄今为止所看到的每个节点 $i$ 的向量 $s_i(t)$ 组成。节点的内存在事件之后更新(例如与另一个节点交互或节点级更改),其目的是以压缩格式表示节点的历史信息。
由于这个特定的模块,TGN 能够记忆图中每个节点的长期依赖关系(就像 RNN 一般)。当遇到一个新节点时,其内存被初始化为零向量,然后为模型涉及该节点的每个事件进行更新,即使在模型完成训练后也是如此。虽然也可以将全局(图形)内存添加到模型中来跟踪整个网络的演变,但目前没有这么做。
Message Function
对于每一个设计节点 $i$ 的事件,message 被计算后用来更新节点 $i$ 的记忆。如在 $t$ 时刻源节点 $i$ 和目标节点 $j$ 之间发生交互事件 $e_{ij}(t)$ 的情况下,可以计算出两个消息:
$$
m_i(t) = msg_s(s_i(t^-),sj(t^-),\Delta t,e{ij}(t)) \
m_j(t)= msg_d(s_j(t^-),si(t^-),\Delta t,e{ij}(t))
$$
类似地,如果是节点级事件 $v_i(t)$,则可以为该事件中涉及的节点计算一条消息:
$$
m_i(t) = msg_n(s_i(t^-),t,v_i(t))
$$
$s_i(t^-)$: 时刻 $t$ 之前的节点 $i$ 的状态表示
$msg_s,msg_d,msg_n$ : 可学习的消息函数,如 MLP
Message Aggregator
为了提高效率,采用批处理的手段,但是会导致在同一个 batch 中,多个事件包含相同的节点 $i$。由于每一个事件都会产生一个 message,所以我们需要聚合这些消息 $m_i(t_1),...,m_i(t_b), t_1,...,t_b \le t$ :
$$
\bar{m}_i(t) = agg(m_i(t_1),...,m_i(t_b))
$$
$agg$ : 聚合函数,可以用多种方式实现,例如 RNN、注意力机制等。本文中为了简单起见,我们采用了两种实现方式:
- most recent message,只保留给定节点的最新的消息
- mean message,一个给定节点的所有 message 的平均值
Memory Updater
如前所述,一个节点的内存状态会在涉及该节点本身的每个事件上进行更新,更新方式如下:
$$
s_i(t) = mem(\bar{m}_i(t),s_i(t^-))
$$
对于涉及两个节点 $i$ 和 $j$ 的交互事件,这两个节点的内存 都在事件发生后被更新
。对于节点级事件, 只更新相关节点的内存
。在这里,mem 是一个可学习的内存更新函数,例如一个 RNN,如 LSTM 或 GRU.
Embedding
考虑到节点的 memory 是一个随时间更新的向量,最直接的方法是直接使用它作为 节点 Embedding。然而,在实践中,这不是一个好的方法 由于 the staleness problem:如果只有在节点相互作用的时候才更新 memory,那么节点长时间不活动会导致 memory 会 staleness。
举个例子,假设一个用户离开 Twitter 好几个月。当用户返回时,他们的兴趣可能已经转移,所以他们过去的活动记忆不再相关。因此,我们需要一种更好的方法来计算嵌入。
一种解决方案是参考 节点的邻居。为了解决 staleness problem,Embedding 模块通过对节点的 spatiotemporal neighbours 进行 graph aggregation 来计算该节点的 temporal embedding。即使一个节点已经不活动一段时间,它的一些邻居可能已经活动,并且通过聚集他们的 memory,TGN 可以计算一个节点的 up-to-date embedding。在我们的例子中,即使用户离开 Twitter,他们的朋友仍然活跃,所以当用户返回时,朋友最近的活动可能 比 用户自己的历史活动更相关。
$$
zi(t) = emb(i,t) = \sum{j \in \mathcal{N}_i^k([0,t])} h(s_i(t),sj(t),e{ij},v_i(t),v_j(t))
$$
其中 $h$ 是一个可学习的函数,可以由多种方法实现:
$Identity(id) = emb(i,t) = s_i(t)$ : 直接用 memory 作为节点的 embedding
$Time-projection(time) = emb(i,t) = (1 + \Delta t w) \circ s_i(t)$: 其中 $w$ 是可学习参数,$\Delta t$ 是与上一次 interaction 的间隔时间,$\circ$ 表示向量对应位置元素相乘。
$Temporal-Graph-Attention(attn):$ 通过 L 层图注意力层计算节点 $i$ 与其 L 跳邻居的聚合嵌入。第 $l$ 层的输入是 $i$ 在当前时间 $t$ 的表示 $h_i^{(l-1)}(t)$, $i$ 的邻居表示 ${h_1^{(l-1)}(t),...,h_N^{(l-1)}(t) }$,时间戳 $t_1,...,tN$ , 特征表示 $e{i1}(t1),...,e{iN}(t_N)$:
其中 $\phi(\cdot)$ 表示通用时间编码,$||$ 为连接运算,$z_i(t) = emb(i,t) = h_i^{(L)}(t)$. 每一层都利用多头注意力机制。$q^{(l)}(t)$ 是一个 reference node(即目标节点或其 L 跳邻居中的一个), $K^{(l)}(t) , V^{(l)}(t)$ 为邻居节点。最后利用 MLP 将 the reference node representation 和 the aggregated information 组合在一起。不同与这一层的原始公式(在 TGAT 中首次提出),这一层中没有使用节点的时间特征,在本例中,每个节点的输入表示为 $h_j^{(0)}(t) = s_j(t) + v_j(t)$, 因此,它允许模型同时利用当前 memory $s_j(t)$ 和 the temporal node feature $v_j(t)$.
$Temporal-Graph-Sum(sum)$: 在图上进行更简单和更快的聚合:
其中 $\phi(\cdot)$ 为时间编码,$z_i(t) = emb(i,t) = h_i^{(L)}(t)$. 在实验中,对于 Temporal Graph Attention 和 Temporal Graph Sum modules,我们使用 Time2Vec 中提供的时间编码。
图嵌入模块通过聚合从节点的邻居内存中获得的信息来减轻持久性问题。当一个节点在一段时间不活动的情况下,可以通过其邻居节点来更新它的 embedding。时间图注意还可以根据特征和时间信息选择哪些邻居更重要。
Framework
TGN 对一批训练数据执行的计算。一方面,Embedding 由 embedding module 使用时序图和节点的 memory (1)生成。然后使用 Embedding 来预测批处理交互并计算损失(2)(3)。另一方面,这些 same interactions 被用于更新 memory(4)(5)。
memory-related modules (Message function, Message aggregator, and Memory updater) 的训练方式:
考虑到它们似乎不直接影响 loss,因此不计算梯度。为了让这些模块能够影响 loss,我们需要在预测 batch interactions 之前更新 memory。然而这将导致 leakage,因为 memory 中已经包含了我们想要预测的信息。针对这个问题的解决方案是 使用前面的 batches 的信息来更新 memory,然后预测 interactions。下图显示了 TGN 的操作流程,这是训练 the memory-related modules 所必需的:
Flow of operations of TGN necessary to train the memory-related modules. 引入了一个新的模块,the raw message store,用来存储计算 message 的必须信息,我们称之为 原始信息(raw messages),用于过去已被模型处理过的 interactions。这允许模型将 interaction 导致的 memory 更新延迟到以后的 batch。
- 首先,使用 在先前的 batches 中存储的 raw message 计算 message 更新 memory。
- 然后,使用刚刚更新的 memory 计算 embedding (灰色链接)(3)。通过这样做,与 memory 相关的模块的计算直接影响 loss (4,5),并且得到一个梯度。
- 最后,当前 batch 的 interactions 存储在 raw message 中,以供后序的 batch 使用(6)。
实验
在各种 dynamic graphs 的大量实验验证中,TGN 在未来边缘预测(future edge prediction)和动态节点分类(dynamic node classification)的任务上,无论在精度还是速度上都明显优于竞争的方法(competing methods)。其中一个动态图是 Wikipedia,其中用户和页面是节点,interaction 表示用户编辑页面。编辑文本的编码被用作交互特性。本例中的任务是预测用户在给定时间将编辑哪个页面。我们比较了不同的 TGN 变形 与基线方法:
这些消融研究表明了 TGN 不同模块的重要性。
- memory 很重要:它的缺失会导致性能的大幅下降
- embedding module 很重要(不是直接输出 memory 状态)。Graph attention-based embedding 表现更好
- 使用 memory 后,仅需要一个 graph attention layer 即可(使用一个大大减少了计算时间),由于 1 跳邻居的 memory 给了模型间接访问 2 跳邻居的信息。