论文地址,作者为 Wu, Chien-Sheng et al.,发表于 2019 年。
引言
传统的状态跟踪假设本体已经定义好,所有的 slot-value 均已知,这可以将 DST 简化为分类任务。但是这种方法有两种缺陷:1)完整的本体很难提前获得。工业界,数据库通常由 API 支撑,由他人维护,很难枚举所有 slot-value;2)即使完整的本体存在,slot-value 的数量也会极其庞大。例如酒店名称和列车出发时间包含大量可能的值。因此许多先前的工作都基于神经分类模型,其在现实场景下并不适用。
最近 Budzianowski et al. (2018) 介绍了多领域对话数据集 MultiWOZ,由于它的混合领域对话,其在 DST 中引入了新的挑战。1)如图一所示,用户先订了酒店,再询问了风景名胜,最后订了一辆出租车。此例中,DST 模型需要探测 (domain, slot, value) 三元组,这在本体中包含了大量的组合,即 30 对 (domian, slot) 以及总计 4500 个可能的值。2)另一挑战是,需要进行多轮映射。单轮映射指的是从单轮对话中推断出 (domain, slot, value) 的场景,但是多轮映射指的是从多轮对话中推断,这些对话发生在多个领域。例如图 1 中,atrraction 领域的 (area, centre) pair 中的 area 信息是在 restaurant 领域中被预测出的,且这是在前几轮被提到的内容。
为了解决这些问题,我们强调 DST 模型应该跨领域共享跟踪知识。不同领域中有许多 slot 可以共享它们的值。例如,area slot 可以存在于 restaurant, attraction, and taxi 中。此外 restaurant 领域的 name slot 可以与 taxi 领域的 departure slot 共享槽值。另外,为了使 DST 在未知领域跟踪 slot,跨领域转移知识势在必行。我们期望 DST 模型可以通过学习跟踪其他领域中的 slot 来学习跟踪 zero-shot 领域中某些相同的 slot。
TRADE Model
与预测预定义本体项的概率不同,我们的模型直接生成 slot-values。类似于 Johnson et al. (2017) 的多领域机器翻译,我们共享所有的模型参数,state generator 以一个句首符号开始生成。
utterance encoder 将语句编码为固定的向量。为了探测任意一个 (domain, slot) 是否被提到的问题,context-enhanced slot gate 与 state generator 一起使用。
- state generator 为所有 (domain, slot) 解码,以预测对应值。
- context-enhanced slot gate 通过一个三元分类器预测对话是否真的触发了每一对。(博主注:假设模型认为语句中没有提到 slot,就不执行 state generator)
Utterance Encoder
注意 utterance encoder 可以是任何现存的编码模型,我们用 Bi-GRU(Chung et al., 2014) 去编码历史对话。输入记为 history \(X_t = [U_{t-l}, R_{t-l}, \cdots, U_t, R_t] \in \mathbb{R}^{|X_t| \times d_{emb}}\),就是说拼接了所有历史对话。\(l\) 是所选对话轮数,\(d_{emb}\) 是 embedding size。编码后的对话历史表示为 \(H_t = [h^{enc}_1, \cdots, h^{enc}_{|X|_t}] \in \mathbb{R}^{|X_t| \times d_{hdd}}\),其中 \(d_{hdd}\) 是 hidden size。由于之前提到的多轮映射问题,模型应该推断出一段轮数内的状态。因此我们使用长度为 \(l\) 的最近的对话历史,而不仅仅是当前对话。
State Generator
为了从语句中提取 slot,需要使用 copy mechanism,其有以下几种类型,我们选择 soft-gated copy 机制。
- index-based copy:这不适合 DST,因为在语句中并不总能找到 slot value 的确切单词。
- hard-gated copy:这通常需要对门函数进行额外的监督
- soft-gated copy:将词汇表上的分布和对话历史上的分布合并为一个输出分布。
使用 GRU 作为 decoder ,并独立预测 \(J\) 个 (domain, slot) 的 value。我们仅简单地使用域槽对的 embedding 之和作为输入。
- 对于第 \(j\) 个 (domain, slot) 的第 \(k\) 个解码步(博主注:一个值可能包含多个单词,所以需要多步解码,参考了文章),decoder 将词向量 \(w_{jk}\) 作为输入并返回隐藏状态 \(h^{dec}_{jk}\)。
- state generator 首先使用可训练的权重向量 \(E \in \mathbb{R}^{|V| \times d_{hdd}}\)(博主注:这个 \(E\) 应该就是权重,随机初始化即可。不要被 \(E\) 这个表示所欺骗,以为它是词嵌入)将 \(h^{dec}_{jk}\) 映射为词表空间的概率 \(P^{vocab}_{jk}\),|V| 代表词表大小。同时,\(h^{dec}_{jk}\) 还被用于计算 \(H_t\) 的历史 attention \(P^{history}_{jk}\)。
- \(P^{vocab}_{jk} = Softmax(E \cdot (h^{dec}_{jk})^T) \in \mathbb{R}^{|V|} \tag{1}\)
- \(P^{history}_{jk} = Softmax(H_t \cdot (h^{dec}_{jk})^T) \in \mathbb{R}^{|X_t|} \tag{1}\)
- 最后的输出分布 \(P^{final}_{jk}\) 是两个分布加权和:
- \(P^{final}_{jk} = p^{gen}_{jk} \times P^{vocab}_{jk} + (1 - p^{gen}_{jk}) \times P^{history}_{jk} \in \mathbb{R}^{|V|} \tag{2}\)
- 标量 \(p^{gen}_{jk}\) 是可训练的,以融合两个分布:
- \(p^{gen}_{jk} = Sigmoid(W_1 \cdot [h^{dec}_{jk}; w_{jk}; c_{jk}]) \in \mathbb{R}^1 \quad c_{jk} = P^{history}_{jk} \cdot H_t \in \mathbb{R}^{d_{hdd}} \tag{3}\)
- 其中 \(W_1\) 是可训练的矩阵,\(c_{jk}\) 是上下文向量。注意由于公式 2,我们的模型能够生成单词,即使其没有定义在词表中。
Slot Gate
与单领域的 DST 不同(WOZ 有 4 个 slot,DSTC2 8 个),多领域 DST 问题有大量的 (domain, slot),因此在 t 轮时预测 domin 和 slot 的能力变得更具有挑战性。
context-enhanced slot gate G 是一个简单的三元分类器,将从 encoder 隐藏状态 \(H_t\) 中获取的上下文向量用映射为概率分布 \(\{ptr, none, dontcare\}\) 类别。对于每一个 (domain ,slot),如果预测的结果是 none 或者 dontcare,就无视它们,并将 slot 填充值“not-mentioned”或者“does not care”。否则就采取 state generator 的输出作为其值。
给出线性层的参数 \(W_g \in \mathbb{R}^{3 \times d_{hdd}}\),第 \(j\) 个 (domain, slot) 的 slot gate 公式被定义为:
\[G_j = Softmax(W_g \cdot (c_{j0})^T) \in \mathbb{R}^3 \tag{4} \]
\(c_{jo}\) 是上下文向量,由公式 3 使用 decoder 的第一个隐藏状态计算出。
Optimization
交叉熵,略。
Unseen Domain DST
Experiments
Results
数据集一共有两个评分标准:
- joint goal accuracy:将预测出的对话状态和每轮对话 t 的真实值 \(B_t\) 进行比较,当且仅当所有预测出的 value 与真实值 \(B_t\)中的 value 完全匹配时才认为正确
- slot accuracy:将每一个 (domain, slot, value) 三元组分别与其对应真实值的标签进行比较