作者:Qian Chen - University of Science and Technology of China
Zhen-Hua Ling - University of Science and Technology of China
Xiaodan Zhu - ECE, Queen’s University
任务:自然语言推理—判断前提和假设的关系,即对句子对(前提,假设)进行分类(三类:蕴含、矛盾、中立);
情感分类—判断一句话的情感,即对句子进行分类(二类或者五类-粒度更细);
作者描述—判断一句话的类别区间,比如年龄区间,即对句子进行分类(多分类)。
这三个任务有一个共同的特点:需要理解整个句子的意思,所以它们的共性就是如何去得到一个尽可能正确的句子表示,其质量越高,实验性能会越好。
使用广义池化来增强句嵌入
摘要:在各种各样的句子表示和嵌入模型中,池化是一个基本的组件。本文探索了广义池化方法去增强句嵌入。我们提出基于向量的多头注意力,它包括了广泛使用的最大池化、平均池化以及标量自注意力作为特殊情况。该模型受益于设计的惩罚项,以便减少多头注意力的冗余。在三个不同的任务上评估了该模型:自然语言推理、作者描述以及情感分类。实验结果表明:相比于强壮的基于句子编码的方法来说,提出的模型完成了极大的改进,在四个数据集上都产生了最优的性能。除了我们在论文中讨论的问题,该方法还可以在更多的问题上简单的实现。
模型
在本节中,描述了使用广义池化方法来增强句嵌入的模型。池化层建立在最先进的序列编码层。下面,我们首先讨论序列编码器,当使用所提出的广义池化进行增强时,它可以在4个数据集上的3个不同任务上实现最先进的性能
3.1 序列编码---句子表示
一个句子中有T个单词,即,每个单词
都来自词表V。每个单词均是连接预训练的词嵌入和从字符学习到的嵌入。嵌入组合模型把一个单词的所有字符都喂进带有最大池化的卷积神经网络中(Kim,2014)。在第4节中讨论详细讨论。
被表示为一个词嵌入序列,即
,其中
是词向量的维度,是从字符组合中得到的嵌入与预训练的词嵌入的连接。
为了表示句子中的单词以及上下文,句子被喂进堆栈双向LSTM中。形式如下:
句子在顶层L的隐藏状态表示为:,下面为了表示简洁,通常会忽略掉上标
。
3.2 广义池化
3.2.1 基于向量的多头注意力---作用:增强句子表示
为了将变长的句子转换为一个固定大小的向量表示,提出一个广义池化方法。通过对LSTM的T个隐藏状态进行加权求和来实现它,这里的权重是向量而不是标量,它控制着所有隐藏向量的每个元素:
其中、
、
、
、
和
分别是顶层的隐藏向量和加权矩阵。其中
是注意力网络的维度,
是LSTM的维度。Softmax确保
中的每个元素都是非负的,并且和为1。然后根据由
提供的加权向量对LSTM的隐藏状态
求和来得到输入句子的向量表示
。
然而,向量表示经常集中于句子的每个特定组件,比如相关词或短语的集合。我们将池化方法扩展为多头的方法:
其中代表来自
的第i个头的第t个token的注意力向量,
是元素按位相乘,因此,最后的表示是一个连接向量,即
,这里
捕获了句子的不同方面。比如,一些头向量可能表示句子的谓词,而其它头向量可能表示句子的参数,相比于单头注意力,这可以增强句子表示。
3.2.2 惩罚项---减少多头注意力的冗余,提升其多样性
为了减少多头注意力的冗余,我们为基于向量的多头注意力设计了惩罚项以此来鼓励不同头注意力加权求和的多样性。我们提出了三种类型的惩罚项。
参数矩阵的惩罚项:(两个参数差距越小,惩罚越大;当差距超过阈值,不再奖励。)
直观上来说,我们鼓励不同的头有不同的参数。我们最大化两个参数矩阵的斐波那契范数的差异,主要是为了鼓励不同头的多样性。当差异超过阈值时,没有进一步的奖励。与在神经网络上加一个L2正则项相似,惩罚项P将会以
倍加权到原始的损失上。超参数
和
需要在验证集上调整。我们在
上以相似的方法也加了约束,但是并没有观察到进一步的改进。
注意力矩阵的惩罚项:
在(Lin 2017)中,使用去鼓励标量注意力矩阵的多样性,而我们这里使用上面的形式去鼓励向量注意力矩阵的多样性。直观上,在阈值
下,鼓励任何两个不同
的差异性。
多头句嵌入的惩罚项:
尝试去最大化两个不同头句嵌入的范数。
3.3顶层分类器
池化的输出被喂入一个顶层的分类器中去解决不同的问题。本文中,在四个数据集三个不同的任务上评估了我们的句嵌入模
型:自然语言推理(NLI)、作者描述以及情感分类。评估覆盖了两类型的问题:作者描述和情感分类将各自的句子分成不同的类别;两个自然语言推理任务则是分类句子对。
对于NLI任务,为了增强句子对的关系,连接两个句子的嵌入以及差异和点乘(Mou 2016)作为多层感知机分类器的输入:
MLP中包括两个带着Relu的隐层和softmax输出层,整个模型通过最小化交叉熵损失来训练。注意:对于两个各自句子的分类任务,使用相同的MLP,但是不需要连接句子,而是直接将句嵌入喂入MLP中。