对话状态追踪 (Dialogue State Tracking, DST) 是任务型对话系统 (Task-Oriented Dialogue System, TOD) 的核心模块.
DST 的目标是 提取用户目标 (User Goal) 和 意图,并将其编码为 对话状态 (Dialogue State). 所谓 Dialogue State, 是一组 意图 - 槽位 - 槽位值 组合.
在单领域对话系统 (Single-Domain TOD) 中,Dialogue State 可以表示为
<Intent, Slot, Value>
组成的集合;
在多领域对话系统 (Multi-Domain TOD) 中,需要将 Domain 加入对话状态中,即对话状态为<Domain, Intent, Slot, Value>
四元组组成的集合.
为了表述上的方便,可以认为对话状态由<Domain-Intent, Slot, Value>
三元组组成.
下面是一个对话状态的示例:
[
("restaurant-inform", "price", "cheap"),
("restaurant-inform", "people", "8"),
("attraction-inform", "type", "architecture"),
...
]
一些传统的 DST 方法,将 DST 建模为 (多标签) 分类问题 (Multi-Label Classification Problem). 分类问题需要提前枚举所有的类别标签,因此需要提前建立较为完备的槽位值本体库 (Ontology).
ontology, “本体;本体论”
- [UN, philosophy] Ontology is the branch of philosophy that deals with the nature of existence. “本体论”
- [UN, logic] the set of entities presupposed by a theory
ontology 由 onto- + -logy 构成,
其中词根 onto- 来源于希腊词汇 on (所有格 ontos), 含义是 “a being, individual; being, existence”.
后缀 -logy 是 “学说” 的意思.
使用分类问题建模 DST 的主要问题如下:
- 常常无法得到完备的本体库
- 本体库过于庞大
同时在对话系统中,特别是多领域对话系统中,槽位的具体值可能并非来自本轮对话,甚至来自于其它 Domain 的某个其它类型的槽位。这就涉及到 多轮映射 (Multi-Turn Mapping) 及 领域迁移 (Domain Transfering) 问题.
比如,Hotel 领域中的酒店位置信息 (假设 Hotel 域有 addr 类型槽位) 很可能在后续的 Taxi 领域对话中成为 Departure 的槽位值.
总结上述 DST 相关问题如下:
- 如何在本体库不完备情况下实现 DST?
- 如何解决 DST 中的 多轮映射 和 领域迁移问题?
由 香港科技大学 提出的 TRADE (TRAnsferable Dialogue StatE Generator) 方法较好地解决了上述问题.
# TRADE: Transferable Dialogue State Generator
TRADE 由 香港科技大学 的 Chien-Sheng Wu et al. 于 2019 年提出,论文 Transferable multi-domain state generator for task-oriented dialogue systems.
为了解决 本体库不完备 下的 DST 问题,TRADE 将 DST 使用了 State Generator 的方法,将 DST 建模为序列生成问题 (而非传统的分类问题), 无须构建本体库,即可完成 槽位值生成.
为了解决 多轮映射问题,TRADE 使用了最近的 L 轮对话作为输入.
为了解决 领域迁移 问题,TRADE 使用 Copy Mechanism 技术,该技术对 Zero-shot DST 和 Few-shot DST 也有较为明显的效果.
从模型构成上,TRADE 主要由三个部分组成:
- Utterance Encoder
- Slot Gate
- Slot Generator
整体上,使用了经典的 Encoder-Decoder 架构来实现序列生成模型。其中 Utterance Encoder 用来编码对话文本信息;Slot Generator 作为 Decoder, 负责槽位值生成. Slot Gate 是一个三分类器,用于判断是否需要使用生成的值填充该槽位.
# Utterance Encoder
TRADE 的 Utterance Encoder 没有特殊的设计,使用常规的 LSTM 或 GRU 即可.
为了解决 多轮映射 问题,TRADE 将最近的 l 轮对话内容拼接在一起编码,数学表示如下:
其中 分别表示拼接后的文本长度,Embedding Size 和 Hidden Size.
# Slot Generator
Slot Generator 是 TRADE 的解码器,也使用了 RNN 来生成对应的槽位值序列.
TRADE 对每一个槽位 Domain-Slot
都需要执行一遍解码过程。我们以 来代表一个 Domain-Slot 槽位,来看一看 TRADE 的槽位值生成过程.
对于解码器,我们已知的输入信息有:
- 编码器输出序列编码 及 隐状态 . (这里省去了表示轮次的下标 )
- 当前正在处理的槽位
- 槽位词表 及 对应的 嵌入矩阵
- 所有 Token 对应的总词表 及 嵌入矩阵
- 仅限训练时:槽位值目标序列
提示
- 槽位词表在构建时,可以将 d 和 s 分别作为 Token 加入词表中 相对于将
d-s
整体作为 Token 可以减小词表体积,同时方便 d 和 s 的多样组合;- 在具体嵌入时,可以将 d 和 s 的嵌入向量叠加
对于槽位 , 其槽位值生成过程如下
获得 的嵌入向量
GRU 初始状态设置为编码器的输出状态
解码 Token
使用 Token 对应的嵌入向量 作为 GRU 的输入。特别地,当 时,
使用 GRU 解码,得到隐状态
其中 ,
- 解码器隐状态 与 编码器序列编码 计算 Attention
其中 是 上下文编码, 是每个序列编码向量 对应的权重
将 映射到 上下文向量 空间.
(这里可以使用 FC + Softmax, 也可以使用其它方式。比如 ConvLab2 就使用了torch.scatter_add()
方式,将 Utterance 中每个单词对应的 Attention 权重 叠加,作为对应词汇的概率,这样只有输入序列中出现的词才会的概率大于 0)解码器隐状态 与 嵌入矩阵 计算 Attention, 得到 Pointer 向量
- 计算权重因子
- 加权 和 , 得到 的概率分布
- 解码
槽位 的槽位值
# Slot Gate
Slot Gate 是一个三分类器,目标类别有:
ptr
none
dontcare
Slot Gate 只需要在解码槽位 的槽位值的第一个 Token 时判断即可.
Slot Gate 使用最基础的 FC + Softmax 网络即可。输入 的上下文编码向量 , Slot Gate 的工作流程为:
# Zero-shot / Few-shot DST
先回忆一下 TRADE 解码器的输入数据:
- 编码器输出序列编码 及 隐状态
- 当前正在处理的槽位
- 槽位词表 及 对应的 嵌入矩阵
- 所有 Token 对应的总词表 及 嵌入矩阵
- 仅限训练时:槽位值目标序列:
在 Zero-shot 场景下,目标 Domain 和 / 或 Slot 在训练数据未曾出现过,因此无法获得 对应的嵌入向量。这种情况下的 DST 是非常困难的.
在 Few-shot 场景下,可以认为槽位词表 是完备的,只不过对于新的 Domain 和 Slot, 其嵌入向量是欠学习的.
Few-shot 场景常用的学习方法是 持续学习 (Continual Learning).
论文采用了两种持续学习方法来 Fine-tune 模型:
- EWC (Elastic Weight Consolidation): Overcoming catastrophic forgetting in neural networks, Kirkpatrick et al, 2017
- GEM (Gradient Episodic Memory): Episodic memory for continual model learning, Nagy et al, 2017
关于持续学习,我们将在后续的博客中再进行介绍.
# ConvLab2 实现
在 ConvLab2 中,TRADE 的模型代码在 convlab2/dst/trade/multiwoz/models/TRADE.py 中实现.
# TRADE 论文中的相关技术简介
# Copy Mechanism
Copy Mechanism 分为三大类:
- Index-based Copy
- Pointer networks, Vinyals et al, 2015
- Hard-gated Copy
- Pointing the Unknown Words, Gulcehre et al, 2016
- Mem2Seq: Effectively Incorporating Knowledge Bases into End-to-End Task-Oriented Dialog Systems, Madotto et al, 2018
- Global-to-local memory pointer networks for task-oriented dialogue, Wu et al, 2019
- Soft-gated Copy
# Continual Learning
- EWC: Overcoming catastrophic forgetting in neural networks, Kirkpatrick et al, 2017
- GEM: Episodic memory for continual model learning, Nagy et al, 2017