0%

EmpTransfo: A Multi-head Transformer Architecture for Creating Empathetic Dialog Systems

论文地址,作者为 Zandie et al.,发表于 2020 年。

摘要以及引言

理解情绪并且对此作出回复是对话系统最大的挑战之一。本轮提出 EmpTransfo,一个多头 Transformer 架构,用于创建一个移情对话系统。EmpTransfo 利用用于语言生成的一流预训练模型(例如 OpenAI-GPT),不过可以使用不同的大小。我们展示了利用历史的情绪以及其他的元数据(metadata)可以提高生成对话的质量。我们使用一个具有挑战性的语言语料库进行的实验结果表明,我们提出的方法在 Hit@1 以及 PPL(Perplexity)上优于其他模型。

人类拥有独特的能力,能够使用细微的情绪通过自然语言交流。大多数现存的对话系统关注语言生成以及提高生成语言的质量。尽管它们也很重要,但是移情的能力是进行高质量对话必不可少的一环。

近来,NLP 取得了巨大的成功,但是结合类似情绪(emotion)以及上下文知识仍旧是一个挑战。

尽管用于大多数传统对话系统的语料库通常是大规模的,但是它们缺乏特殊性,不包含情绪,主题,人格等原数据。基于通用语料库训练出来的系统导致对话助手无法理解情绪,缺乏人格并且趋向于产生通用的回复,例如“我不知道”。因此有必要创建一个带有更多上下文信息的数据集。例如 DAILYDIALOG 包含情绪,主题,动作。

Related Work

方法

预训练模型 nb。本文使用 GPT。

Empathetic Dialog Generation

假设在两个代理之间的对话中,每一个代理的每一轮对话都被称为“语句”(utterance)。因此一场对话由一系列的语句组成。一般化为,有 \(n\)语句 \(U = \{u_1, u_2, \cdots, u_n\}\),并且对于任何一句语句 \(i\)\(N_i\)符号(token),即 \(U_i = \{t_1, t_2, \cdots, t_{N_i}\}\)。对于每一条语句,也有一个情绪与之对应 \(E = \{e_1, e_2, \cdots, e_n\}\)任务定义

在我们的数据集中,一个样本是 \(u_1, u_2, \cdots, u_{T-1}, u_{next}\),其中 \(u_{next}\) 可以代表下一条真实语句,也可以是来自一组 distractor \(U'_T\) 中的一个 distractor。一个 distractor 是来自数据集中的一条随机的语句。同理,如果序列对应的情绪为 \(\{e_1, e_2, \cdots, e_{T-1}, e_{next}\}\),那么 \(e_{next}\) 就是下一条语句正确的情绪 \(e_T\) 或者来自一组 distractor \(E'_T\) 中的一个 distractor。一个 distractor 是来自所有情绪集合中的一个随机情绪。实验中数据集的结构

我们的模型将序列输入进 Transformer。然后将输出喂入三个前馈神经网络头(three feed-forwad linear heads),负责生成下一个情绪,下一条句子,下一个符号。我们使用 12 层的架构,但是它可以被扩展,或者减小大小。接下来,我们定义这三个不同的头以及它们对应 loss 函数。模型计算步骤

Language modeling head

语言建模的任务是,给定一个符号序列作为上下文,去预测下一个符号是什么。如果一个符号序列的下一条正确语句是 \(U_T = \{t_1, t_2, \cdots, t_N\}\),下一个符号的条件概率为: \[P(t_i | t_1, \cdots, t_{i-1}) = softmax(h * W_1) \] \(h\) 是 Transformer 上一个隐藏层的输出,\(W_1\) 是符号嵌入矩阵,是可学习的。loss 函数定义为: \[\mathcal{L}(U_T) = - \sum^N_{i=1} logP(t_i | t_1, \cdots, t_{i-1}) \] 需要注意的是,语言模型的 loss 不在下一条句子的 distractor \(U'_T\) 上训练。

Next utterance prediction head

跟随 BERT(Devlin et al., 2018)的做法,在 next utterance prediction 中,我们尝试训练一个模型以实现在对话中预测下一条语句的功能。模型将学习区分正确语句和来自 distractor 中的语句。更具体来说,我们创建了一个分类器来计算下一条语句的概率: \[P_u(a|u_1, u_2, \cdots, u_{T-1}) = softmax(h_1 * W_2) \] \(a\) 被定义为: \[ a = \begin{cases} 1 & \text{$u_{next} = u_T$} \\ 0 & \text{$u_{next} \in U'_T$} \end{cases} \] \(h_1\) 是来自 Transformer decoder 最后一个符号的隐藏状态,\(W_2\) 是权重矩阵,是可学习的。然后 loss 函数被定义为: \[\mathcal{L}_2(U_{1:T}) = -logP_u(a|u_1, u_2, \cdots, u_{T-1}) \] 博主注预测下一条语句是否正确的公式似乎有错误。因为它的输入仅仅是对话上下文,没有包含 distractor,这如何区分?所以这个公式我觉得应该是 \(P_u(a|u_1, u_2, \cdots, u_T) = softmax(h_1 W_2)\)

Next emotion prediction head

与 Next utterance prediction 类似,模型训练出来后用于区分正确的下一个情绪。

本实验分别设计了带有和不带有 Next emotion prediction head 作为对比。

Loss

最后的 loss 是上述 3 个任务的 loss 的加和 \(\mathcal{L}_{total} = c_1 \mathcal{L_1} + c_2 \mathcal{L_2} + c_3 \mathcal{L_3}\)\(c_1, c_2, c_3\) 在实验时调整。

Input Representation

我们使用 DIALYDIALOG 数据集,它的每一句话都有情绪和动作所标注,同时整一场对话由一个主题所标注。表 ?(论文中的数字标错了,其实是表 1)展示了一个对话样本。由 4 句话组成,其中红色并且标注了 d 的语句时 distractor。