ReCoSa:在多轮对话生成任务中通过自注意力机制检测相关上下文
题目:ReCoSa: Detecting the Relevant Contexts with Self-Attention for Multi-turn Dialogue Generation
来源:ACL 2019
原文链接:https://arxiv.org/abs/1907.05339
论文代码:https://github.com/zhanghainan/ReCoSa
转载请注明出处:apex&momoco
Abstract
传统多轮对话生成任务中,为了获得能够指导回复生成的一些相关性较大的前轮对话信息,往往会采用类似余弦相似度(cosine similarity)或是传统的attention机制的方法,但是这种做法却又会导致相关假设不足(insufficient relevance assumption)或是位置偏差问题(position bias problem),故为了解决上述问题,作者在本文提出了一个新模型:ReCoSa,其主要包括了三步:
- 首先,通过一个字级别的编码器来获得每轮对话的上下文的初始表示。
- 然后,用同时更新的上下文表示和响应的masked表示
- 最后,计算每个上下文表示和响应表示之间的注意力权重(attention weights),并在进一步的解码响应的过程中使用。
本文对ReCoSa的实验主要基于两个数据集: 和
Introduction
在自然语言处理的许多应用中,多轮对话生成任务都是其核心问题之一,如:智能客服,个人助理或聊天机器人等。
比较普遍的方法,主要如这样的模型一样,首先通过一组分层的对前轮的所有上下文进行编码,编成向量组后整合成一个向量做为前轮所有上下文的表示,响应则会通过这个整合的向量解码而来。编码器和解码器所有参数则通过最大化预测值和训练集之间的平均似然值进行学习更新。
然而,在这个任务中,响应的生成显然不应该如同上述方式一样不加区分地参考所有的上下文,这样会给模型和响应的生成引入许多无关的噪声,因此分析并选择对多轮对话生成最有用最相关的上下文,如图所示,标红的即为最相关的句子。
为了解决这个问题,也有许多方法被提出,但他们都或多或少存在问题:
- —— :
这个方法通过计算上下文和问句(post)之间的相似度以获得哪一个上下文内容会最相关,作者认为这种方法,基于一种不合理不充分的假设:假设了上下文和问句之间的相关性等价于上下文和响应之间的相关性。作者认为这种假设在许多例子中很容易被推翻,如上述的例子2。
- —— :
通过对模型加入传统的attention机制(可能是soft-attention这种最古老的?),希望能够获得最相关的上下文,然而作者指出,最相关的上下文有可能在多轮对话的响应很远。由于比较偏爱选择位置较近的上下文,因此这种方法在多轮对话任务中表现必然不佳。
综上所述,作者提出了,其核心思想就是运用最新的机制来寻找和当前响应最相关的上下文,选择Self-attention主要因为其对于获得长距离依赖关系具有比较好的表现。
通过对在 和这两个数据集上进行测试发现在生成的多样性和合理性都超过了传统的,同时,作者还对attention进行了单独分析,结果表明,该模型检测到的相关上下文与人类标记的一致性较好,这说明该模型检测到的相关上下文是合理的。
Relevant Context Self-Attention Model
如图所示,模型包括了三部分:上下文表示编码器,响应表示编码器,上下文-响应attention解码器。
其中每部分都用了多头自注意机制,分别获得上下文表示,响应表示和上下文响应attention权重。
上下文表示编码器
词级别编码器
给定上下文序列 ,其中中的每一句文字序列可定义为。
注意:文中所提到的问句指的是最后一个上下文文字序列。
将一段上下文序列输入一个标准编码器以获得一个固定维度的向量:
,,
, ,
,,
其中,分别是输入,记忆和输出门(),是的词向量表示,通过结合和可以计算出时间步时的隐状态。表示时间步时的细胞状态(细胞状态),表示了函数。,,以及都是参数,最后,用作为最终句子的表示,就可以获得上下文句子序列的表示。
一个公认的问题就是,自注意力机制()本身无法区分不同的位置
在给上下文语句编码时,同时编入每个词的位置信息也是十分重要的,而在众多运用位置信息的方法中,选择最简单的方法,即:直接拼接句子向量和位置向量作为一组:令 为位置向量,拼接后,得到最终的上下文句子序列表示为:
上下文自注意力机制
自注意力机制是一种通过序列本身计算序列的注意力机制,其主要好处就是能够很好地捕捉长距离的依赖信息。
文章中采用了多头注意力机制,首先给定了个向量的矩阵,的矩阵 以及的矩阵。
实际中一组,,可以通过对上下文序列的词级表示进行不同的线性映射。
运用放缩点积注意力机制计算注意力得分:
其中是网络中隐层的单元数。
通过个并行的头对向量进行多通道不同部分聚焦关注:
对于第个头,首先定义对于,,而言,有已学习的线性映射
然后通过放缩点积注意力机制计算和之间的相关性得分以获得一个混合的表示:
最后把所有并行的头产生的混合表示进行拼接,再通过一个线性映射将这些表示进一步混合:
其中,
对计算而来的上下文表示传入一个前馈神经网络即可得到上下文的注意力表示。
响应表示编码器
给定了响应作为输入,通过另一个多头自注意力机制把词向量以及其对应位置向量编码为响应表示。对于每个时间步的词,这个注意力机制传入一个响应向量矩阵通过不同的线性映射获得,,,而响应的隐藏表示则如同上下文的表示一样得到。
然后,对训练时的响应真值做一个mask处理,对于时间步的词,把进行mask,只可见。
上下文-响应attention解码器
模型中第三个多头注意力机制部分,通过接受上下文注意力表示作为和以及接受响应隐藏表示作为,输出记作,同样也把这个输出传入一个前馈神经网络获得隐层表示。
最后通过一个层来获得响应生成过程中每个位置词的生成概率。
具体过程,给定输入的上下文序列以及其相关联的响应序列的对数似然:
而模型基于隐层表示预测每个词则通过一个最大选择的softmax层:
其中为学习参数。
故训练目标就是获得让上述预测值与训练集中的真值的对数似然值最大的模型条件参数。
是训练过程中的优化手段。
Experiment
Dataset
The Chinese Customer service dataset(JDC)
该数据集包含了515686条会话上下文响应对组成,随机抽取并将其且切分为500000条的训练集,7843条的验证集,7843条的测试集。
The English Ubuntu Dialogue corpus(ubuntu)
从Ubuntu question-answering论坛中抽取而来。原始的训练集包括了从2004年到2012年4月27日的7百万个会话。验证集包括了从2012年4月27日到2012年8月7日的会话内容。测试集则包括了从2012年8月7日到2012年12月1日的会话内容,使用正体字进行标记、词干和词性化,删除长度小于5或大于50的句子。最后,我们分别获得了3980000对、10000对和10000对用于训练、验证和测试。
Results
attention analysis results
human evaluation on JDC and Ubuntu
Case study
Conclusion
本文作者通过提出应用自注意力机制来改善多轮对话任务中,大多数模型对前轮上下文的参考程度或许不加参考或许参考不够准确的问题。而被提出的确实能够有不错的表现,在未来工作中,作者常识给引入一些主题信息以帮助其能更准确找到关联的上下文。