
以往的 DST 方法通常都是输出一个对所有槽值的预测概率分布,使得模型无法预测 unseen 的槽值。这篇文章的作者以不同角度看待 DST 问题,将其建模为一个阅读理解任务,让模型回答“What is the state of the current dialog ?”这个问题。
阅读理解任务通常被表述为一个监督学习问题,对于给定的训练数据集,目标是学习一个预测器,它将一段 p 和相应的问题 q 作为输入,并给出答案 a 作为输出。
定义对话 D 的一个子对话 D_t 作为以用户话语结束的完整对话的前缀,其状态由组成插槽 s_j(t) 的值定义,即 S(t)={s_1(t),s_2(t),.s_j(t),...,s_M(t) } 定义。
可以把 D_t 当成一篇文章,对于每一个插槽 i 制定一个问题 q_i : 槽 i 的值是多少?这样子 DST 任务就变成了一个理解 D_t 并回答问题 q_i 的阅读理解任务了!

并将他们作为输入馈入一个 RNN 中:
L: 表示拼接序列的长度 d_i:RNN 对于每一个 token 的输出,包含上下文信息 p_i:用 Bert 模型生成的预训练词嵌入 RNN:这里使用的是单层双向 LSTM,故 d_i = (\overleftarrow{d_i};\overrightarrow{d_i})

回合对话的嵌入表示:

将前面定义的问题 q_i 定义为“插槽 i 的值是什么?”对于每个对话,都有 M 个对应于 M 个槽的类似问题,因此,我们将每个问题 q_i 表示为一个固定维度的向量 \bf{q}_i 来学习。

如上图在完整模型设置中,三个不同的模型组件被用来进行一系列的预测:首先,使用一个 slot carryover 模型来决定是否从最后一个回合中 carryover 一个槽值。如果 slot carryover 模型决定不延续,则执行一个 slot type 预测模型,从 {Yes, No, DontCare, Span} 集合预测答案类型。如果 slot type 模型预测结果为 Span,则 Slot Span 预测模型最终将预测插槽值作为对话中 tokens 的 span(start,end)

: C_j(t) = \begin{cases} 1, & \text {if s_j(t) = s_j(t-1)} \end{cases}P(C_i(t)) = sigmoid(e(t)\cdot W_i)
W_i : 对于不同槽都有一个权重矩阵,神经网络将联合预测所有 M 个槽的 slot carryover 结果

该模型是一个用来预测每一回合槽值类型的分类器。如果预测结果为 Span 表示可以在对话中找到槽值实体。如上图所示,具体计算如下:
,其分布计算如下:
采用 MultiWOZ 多域对话数据集,包含 7 个不同域共 37 个 slot,之中许多槽类型都是在不同域之间共享的。实验中通过考虑槽域、槽类型、槽名的链接来独立处理每个槽。




