https://zhuanlan.zhihu.com/p/73723782
请复制粘贴到markdown 查看器查看!
Do Neural Dialog Systems Use the Conversation History Effectively? An Empirical Study
ACL2019
Chinnadhurai Sankar, Sandeep Subramanian, Christopher Pal, Sarath Chandar, [Yoshua Bengio]
https://arxiv.org/abs/1906.01603
abstract
神经网络生成模型在构建对话 agent 方面越来越流行,这种方法可以灵活的适应多个 domain,且需要很少的领域专家干预。这些系统一个被大家经常指出的问题就是他们很少有效的去使用获得的对话历史。这篇文章中,作者使用一种方法去理解模型是怎样利用对话历史的,这个方法是先是人工给文本引进 unnatural 改变或者是扰动,再去观察模型对这些改变的敏感度。作者在 4 个对论对话数据集上进行 10 种不同扰动的实验,发现通常使用的基于 RNN 和 transformer 的 seq2seq 模型对于大多数扰动都是不敏感的。再者,作者开源了代码,认为这将会是一个检验对话系统的有用工具。
introduction
人们猜测是因为不能很好的利用对话历史,所以模型经常没有办法产生对话主题相关的句子,比方说回应一些诸如 “谢谢”,“好的” 这些无关紧要的话。实验的一个核心的前提(思想)是说,如果这个模型对认为造成的文本内容的改变(扰动)不敏感,那就是说它没有非常大程度的利用这段内容。作者发现:
- recurrent and transformer-based seq2seq models 对于实验中的大多数种类的扰动都不敏感
- 甚至在 randomly shuffling or reversing words within every utterance in the conversation history 这种极大的变化的情况下,二者都不是特别敏感
- recurrent model 对于对话历史中每个 utterance 的先后顺序很敏感,这意味着他可以比 transformer 更好的模拟对话动态。
experiment setup
作者将给定对话历史生成恰当回复的问题演变为一个 conditional language modeling problem. 要学习一种条件概率分布 $P_\theta (y|x)$ ,其中 $y$ 是给定对话历史 $x$ 应该出现的合理的回复。对话历史由一系列 utterance $\bold{x_1}, \bold{x_2}, ... \bold{x_n}$ 表示,其中每个 $\bold{x_i}$ 由一系列单词 $x_{i_1}, x_{i_2}, ...x_{i_k} $ 组成,回复 $y$ (utterance)同理由 $y_{i_1}, y_{i_2}, ...y_{i_k}$ 组成。至此,完整的条件概率表示为:
$$
P_{\theta}(y|x) = \prod^n_{i = 1} P_{\theta}(y_i|y_{<i},\bold{x_1}, \bold{x_2}, ... \bold{x_n})
$$
工作的关键是研究当我们人工的干扰对话历史 $\bold{x_1}, \bold{x_2}, ... \bold{x_n}$ 时,学到的概率分布会有怎么样的行为。作者通过观察在这些变化下 per-token 的 perplexity (困惑度) 增加了多少来测量这姓行为。如果增加量很小,那么我们就可以总结出 $\bold{x_1}, \bold{x_2}, ... \bold{x_n}$ 的顺序对于模型不是很重要。所有的模型训练的时候都不加入扰动,敏感度只在测试的时候被测试。
1. datasets
四个多轮对话数据集
- bAbI dialog : 任务导向多轮数据集,五个预定饭店的任务,复杂度依次增加。实验使用任务5,因为这个是最难的,它包括 1000 个对话,每个对话平均有 13 个 user utterance。
- Persona Chat : 开放域对话数据集,两个人被随机安排两个角色进行对话产生。10.9$k$ 个对话,平均每个对话 14.8 轮。
- Dailydialog : 收集每天日常的对话,涉及多个主题。13$k$ dialogs / 7.9 turns
- MutualFriends : 多轮 goal-oriented,两个agents 必须去发现他们的朋友中谁是二者共有的。11$k$ / 11.41 utterances。
2. types of perturbations
每种扰动都独立的执行
- utterance-level perturbations : 1) $ \mathcal{Shuf}$ : 随机打乱对话历史中的 utterances。2) $\mathcal{Rev}$ : 每个 utterance 保持不变,但对话历史对话顺序颠倒。3) $\mathcal{Drop}$ : 完全丢掉某个 utterance。4) $\mathcal{Truncate}$ 缩减对话历史,只留下最近的 k 个utterances。
- word-level perturbations : 1) $\mathcal{word-shuffle}$ 2) $\mathcal{reverse}$ 3) $\mathcal{word-drop}$ : 丢掉 30% 的 words 4) $\mathcal{noun-drop}$ : 丢掉所有的名词。5) $\mathcal{verb-drop}$
3. models
所有的数据加载,模型实现,和评估的过程都在 ParlAI 架构实现的。模型的所有超参数也都是和那个平台一样。
- recurrent models : seq2seq_LSTM
- transformer : 300 维 embeddings and hidden states
实验中的模型可能不是试验中所用的数据集上表现最优的模型,作者仍然相信这些模型至少可以像一个baseline 一样具有普适性普遍的使用。在这篇文章中,作者训练10轮就停止为了去保存最好的模型(?)。
results & discussion
表 2 第二列展示了在测试集上不同模型的困惑度,后边几列是不同的扰动造成的困惑度的 increase;图一展示了仅仅摘取最近 k 句话作为对话历史时模型困惑度的改变。
作者有如下发现:
- 在大多数情况下模型在困惑度上只有很小的改变,甚至当改变非常明显时也变化不大,这意味着模型使用的信息只是提供给他们的信息中很少一部分。
- transformer 对词序的变化不敏感,这意味着他们能学习词袋表示
- 注意力机制的使用使得模型使用更多的来自于对话早期的信息(当只使用一句话时困惑度增加的非常剧烈)
- 尽管 transformer 模型收敛更快且有着更低的困惑度,但是他们似乎不能捕捉到对话历史中的动态变化且对扰动不是很敏感,相对于recurrent 模型来说。
conclusion
本文研究生成神经对话系统在其所依赖的对话历史中综合引入扰动时的行为。我们发现,即使对对话历史进行剧烈的、非自然的修改,recurrent and transformer-based seq2seq models 也没有显著的变化。我们还发现了 recurrent and transformer-based seq2seq models 在利用对话历史的方式上的细微区别。通过开源代码,我们相信这种通过引入扰动来研究模型行为的例子将成为一个有用的诊断工具。