张明华,吴云芳,李伟康,张仰森
(1. 北京大学 计算语言学教育部重点实验室,北京 100871;2. 北京信息科技大学 计算机学院,北京 100192)
自动学习文本(词、短语、句子以及段落)的语义表征是自然语言处理(natural language processing, NLP)中的一项基础性研究工作。目前已经存在非常高效的模型[1]利用大量无标注语料来学习词表征(word embedding),这些词表征为NLP的各种下游任务提供了有效的特征支持。近年来,越来越多的研究者开始关注更大文本单元的语义表征,其目标在于把文本序列中包含的语法和语义信息编码成一个固定长度的向量,然后将这些学习到的表征知识迁移到其他的NLP任务中。
其中一个被广泛研究的方向是使用基于RNNs的编码器—解码器架构[2-5],在给定输入文本序列的前提下,以重构输入序列或预测上下文序列为训练目标来学习文本的语义表征。另外一些研究者[6-7]提出借助标注数据来学习一个通用的语义编码器,比如斯坦福的自然语言推理数据集(Stanford natural language inference, SNLI)[8]。然而这些现存的方法均有其固有的限制。首先,由于序列化的建模方式——RNNs网络在面对长文本单元(段落)的时候,显得极为耗时,尤其是在需要大规模训练数据来学习文本语义表征的场景下,训练开销变得更加难以接受。例如,为了获取有意义的向量表征,Kiros等[2]花费了两周时间来训练skip-thought vector。其次,对于SNLI这种大规模的高质量标注数据,在其他语言中基本上是不存在的,如本文所处理的中文文本。
本文研究致力于以无监督的方式来自动学习文本语义表征,我们提出了一种门控联合池化自编码器(gated mean-max AAE)。具体地,对于输入的文本序列,编码器网络首先执行多头自注意力操作以获取输入的隐向量;然后联合使用平均池化和最大池化产出mean-max语义表征。在重构过程中,解码器先利用多头自注意力操作关注文本序列之前时间步的词,接着运用门控机制来动态关注mean-max表征。因此,在重构的每一步,解码器不仅依赖之前时间步的信息,而且会充分地利用输入文本的整体语义信息。另一方面,由于联合池化操作的使用,解码器可以得到不同语义表征空间的指导,以满足不同文本单元的重构需求。
针对不同的语言,我们分别在公开的英文数据集[9]和大规模的中文Gigaword语料(LDC2005T14)上训练文本编码器。为了验证向量表征捕捉文本序列语义信息的能力,我们从mean-max表征出发来重构中英文的长文本段落。实验结果显示,在英文数据集上,我们的模型超越了基于注意力的层次化LSTM(long-short term memory)网络。在中文数据集上,本文模型的实验效果也远超传统RNNs模型。同时,我们模型的并行建模方式提高了训练效率,在相同数据量的情况下,相比于RNNs模型71h的训练时间,我们的模型仅用了32h。为了促进相关研究,我们将公开已经训练好的文本编码器,对于输入的文本序列,输出定长的分布式向量表示。
本文的主要贡献在于:
(1) 将多头自注意力机制引入自编码器,用于学习通用性的文本语义表征。由于采用并行的建模方式,在面临大规模无标注数据时,极大地缩减了训练时间,可以更高效地获取有意义的向量表征。
(2) 同时运用平均池化和最大池化操作来获取文本序列的联合语义表征,然后通过门控机制,让两个不同的表征空间共同动态地指导解码过程。
(3) 首次以无监督的方式训练高质量的中文通用性文本编码器,并公开发布,以促进中文信息处理的相关研究。
近年来,随着深度学习技术在自然语言处理领域的迅猛发展,越来越多的研究者开始关注文本序列的语义表征,并且提出了各种各样的模型来尝试解决这个问题。相关研究可以概括为两个方向。
由于互联网中海量生语料的存在,直接从大规模未标注数据中学习语义表征已经成为一个热门的研究方向。Le等[10]提出了paragraph2vec模型,通过在对数线性神经语言模型中[11]引入全局的段落向量来学习文本的分布式表征。在skip-thoughts模型[2]中,提出使用一个RNN网络来编码输入的句子,使用另外两个RNN网络分别预测文档中的上一个句子和下一个句子,但是模型训练较为耗时。Ba等[3]通过在skip-thoughts模型中引入层正则化操作(layer normalization)提高了模型的训练速度,在迁移任务上也取得了更好的效果,但是文中的模型仍然花费了一个月的训练时间。Hill等[4]提出了序列降噪自编码器(sequential denoising autoencoder, SDAE),从含有噪声的输入序列中重构原始的句子。另外文献[4]也实现了一些简单的词袋模型,比如word2vec-SkipGram和word2vec-CBOW。Arora等[12]提出了一个简单高效的平滑逆频方法(smooth inverse frequency, SIF),通过词向量的加权平均来计算句子的向量表征。Gan等[5]使用卷积神经网络(convolutional neural network, CNN)编码器和LSTM解码器来重构输入句子和预测上下文序列,同时探索了利用层次化的模型来预测文档中连续的多个下文句子。
相比而言,高质量的人工标注数据就显得较为稀缺,但是研究者对各种监督方法依然进行了有效的探索。Hill等[4]尝试了三种不同的标注资源,包括使用神经语言模型将词语的字典定义映射到相应的词向量,将图像字幕映射到图像向量,以及用双语平行语料训练神经机器翻译模型,来学习通用的语义编码器。Conneau等[6]认为自然语言推理任务涉及丰富的句子间语义关系,因此他们提出使用SNLI数据集来学习句子表征,并且通过对比7种不同的模型架构,发现基于最大池化操作的双向LSTM网络取得了最好的实验效果。Cer等[7]提出利用多任务学习机制来训练句子编码器,他们使用的任务包括skip-thought模型[2]中的预测上下句任务、自然语言推理任务(SNLI)、以及对话回复任务[13],另外还探索了结合句子级别的语义和词级别的信息用于迁移任务。
注意力机制最早由Bahdanu等[14]提出并成功地用于神经网络机器翻译中,其主要思想可以描述为: 给定一系列的键值对(K,V)和查询向量q,首先在q和K的每一个键之间计算归一化的权重,然后对相应的值向量V进行加权求和,以生成动态的注意力向量,使得和当前查询向量相关性更高的键值对能够贡献更多的语义信息。而在自注意力操作中,查询向量和键值对均来自相同的输入序列。本文使用的自注意力运用多头机制[15],并行多次调用注意力操作,然后将每个注意力操作的结果串接起来。具体而言,对于q和(K,V),通过式(1)~式(5)
计算注意力向量a:
其中:
(5)
多头自注意力机制允许模型动态地关注不同键值对的信息,可以适应不同查询的信息需求。而且由于每个head计算维度的减小以及多头的并行操作,所以其总的计算开销和普通的单头注意力操作相当。
我们的模型采用编码器—解码器结构,如图1所示。输入序列x首先通过左边的编码器网络(encoder)转换为隐向量序列,然后通过中间衔接部分的平均池化和最大池化操作得到输入的语义表征,最后右边的解码器网络(decoder)利用语义表征来重构输入序列。
图1 门控mean-max自编码器网络结构
在建模过程中,本文统一将输入的文本视为词序列,不区分句子或段落。此处使用S={w1,w2,…,wN}来表示模型的输入词序列,其中N代表输入序列中词的数量。同时在每个输入序列的末尾添加序列结束符“<∕S>”。序列S中的每一个词wt首先均被转换为k维的词向量et=We[wt],其中We∈dw×V是词向量矩阵,V是模型词表的大小,wt表示S中的第t个词在词表中的索引,We[v]则表示矩阵We的第v列。
另外,为了建模输入序列的序信息,我们对输入的每一个词都增加位置编码[15],如式(6)、式(7)所示。
其中,t表示输入序列的第t个词位,i是位置编码的第i维。位置编码中的偶数维对应一个正弦值,奇数维则对应一个余弦值。由此,可以得到编码器的输入为xt=et+pt。
编码器网络包含一个多头自注意力层(multi-head self-attention layer)和一个全连接层(fully connected layer),负责将输入的词序列转换为隐向量序列。有别于文献[15]的建模过程,我们移除了多头自注意力层的残差连接(residual connection),仅保留全连接层的残差连接,这样我们的模型可以自由地扩展隐层的维度,以使隐向量包含更多的语义信息。
由于采用多头自注意力机制作为网络的基本构建块,我们的模型可以非常有效地进行并行操作。对于任意长度的输入序列,模型可以同时输出所有的隐向量,相比于LSTM模块的序列处理方式,这将极大地减小计算复杂度。
而在本文中,我们提出同时运用平均池化和最大池化操作。对于给定的向量序列,最大池化计算各维度的最大值,以试图捕获序列中最显著的属性而过滤掉其他含有较少信息量的局部值。而平均池化不筛选显著的局部值,也不关注序列中那些特殊的特征值,而是捕捉更普适性的信息。很显然,这两种池化策略可以互为补充。通过并联两种池化操作的结果,得到输入序列的mean-max表征,如式(12)~式(14)所示。
通过联合使用两种不同的池化策略,可以从不同的角度来处理隐向量序列,以捕捉更多样性的语义特征,这使mean-max表征可以为重构过程提供更多的信息,在面对长文本序列的时候展现出强大的鲁棒性。
正如编码器网络那样,解码器也运用多头自注意力机制来重构输入序列。如图1所示,编码器和解码器通过mean-max门控层进行连接,这将使解码器在重构过程中动态地利用mean-max信息。
本文采用了两个大规模的中英文数据集(中文Gigaword和英文hotel reviews)来分别学习两种语言的文本语义表征,并通过重构长文本段落来验证其捕获语义信息的能力。
我们从中文Gigaword语料的新华日报部分构建了中文文本段落数据集。所有数据采用斯坦福的CoreNLP工具包[16]进行分词预处理。词表大小为33 090,其他低频词均用“
在Hotel reviews数据集[9]中,每条评论包含的单词数量在50到250之间。文献[9]公开的词表中包含语料中前25 000个高频的单词。所有数据的未登录词比率均小于2%,评论的平均单词数量为124.8。训练集和测试集分别包含340 000条和40 000条评论。
本文提出的模型主要包含三个组件: 编码器和解码器网络构建块、动态门控机制以及mean-max联合池化策略。我们分别实现了相应的基准模型进行对比分析。
首先,编码器和解码器网络均采用多头自注意力机制来构建。为了验证多头自注意力机制的作用,实现了基于LSTM的模型: 编码器采用双向LSTM网络计算隐向量,然后运用联合池化策略获取输入的语义表征,并且串接前向LSTM和后向LSTM的末尾隐向量用于初始化解码器LSTM的状态,每一步解码过程均使用门控操作来关注全局的语义表征。下文中我们将以gated mean-max RAE来表示。
另外,在gated mean-max RAE的基础上删除门控机制,得到了更简单的基准模型RAE,以探究在没有语义表征动态指导的情况下解码器的重构效果。
最后,为了证明联合池化策略的优势,在只运用平均池化或者最大池化操作的情况下,分别实现了Gated mean AAE和Gated max AAE,两个模型的其他部分和本文模型保持一致。
本文使用Adam算法[17]优化模型目标。词向量使用Xavier方法[18]进行随机初始化,并和模型参数一起更新。解码过程采用贪心算法(greedy),最大长度不超过输入文本的1.5倍。中英文实验所采用的超参数如表1所示。
表1 实验的超参数设置
所有模型均使用Tensorflow实现,并在英伟达GeForce GTX 1080 GPU上运行。
实验结果如表2所示,采用了两个标准的评价指标: BLEU和ROUGE。
在中英文数据集上,本文提出的门控和联合池化策略均取得了最优的效果。在hotel reviews数据上,与Attention Hierarchical模型相比,Gated mean-max AAE模型显著地提升了实验效果,将BLEU值从28.5提高到了63.0。另外,Attention Hierarchical模型的编码器和解码器均由4层的LSTM网络组成,而本文模型只采用了一层的自注意力和全连接网络。因此,Gated mean-max AAE实现更加简单,运行也更加高效。
表2 中英文段落重构实验
注: 其中,“Standard”, “Hierarchical”以及“Attention Hierarchical”均为文献[9]中的模型。
门控机制使语义表征可以动态地指导解码器的重构过程,对比Gated mean-max RAE和RAE可知,其显著地增强了模型性能,在两个数据集上,BLEU值分别提升25.6和27.7。而且相比于单一的池化操作,联合池化让文本表征携带更丰富的语义信息,在面临中英文的长文本序列时,也展现了极佳的效果。经分析,编码器和解码器的网络结构对实验效果没有显著的影响,但是自注意力机制可以加速模型训练。另外,Gated mean-max RAE除了使用门控操作和联合表征,还借助了双向LSTM编码器的末尾隐向量来初始化解码器的状态,而本文并未使用末尾隐状态的信息。
多头自注意力机制使用并行的建模方式,对于输入的文本,可以在常数的时间内连接序列中所有位置,而循环神经网络需要的计算开销随输入的长度成线性增长。因此,本文模型极大减小了计算复杂度,同时更容易建立文本中的长距离依赖。在中文编码器的训练过程中,Gated mean-max AAE在一块CPU上训练了32h,然而Gated mean-max RAE使用了71h,并且占了两块CPU。
动态门控机制让解码器即使在面临长文本的时候,依然可以充分地利用输入序列的全局语义表征。为了说明本文模型对长文本处理的优势,图2给出测试集的BLEU值随文本长度变化的曲线。随着文本长度的增加,传统RNNs模型的性能快速下降,联合表征和门控机制的引入使模型依旧具有不错的表现。表3中,我们从中文测试集中随机抽出了两个长文本段落的重构实例。
图2 中文测试集上BLEU值随输入文本长度变化的曲线
Ground Truth随着《红军长征》卷等一批纪念长征胜利60周年的图书的出版发行,解放军历史资料丛书目前已出版了10卷、80多册、6 000多万字,为全军指战员提供了
表4中展示了5个基于句子相似性的检索实例。所有句子均使用中文Gigaword语料上训练好的汉语文本编码器进行编码。采用句子语义编码的余弦相似度作为检索的衡量指标。分析检索结果可知,编码器从大规模的无标注数据中能够较为精确地捕捉文本的语义信息。
表4 中文句子检索
注: 其中每个例子中第一行是查询输入,第二行是从近400万的《新华日报》语料中检索出的最相似句子。
本文中,我们提出了门控联合池化自编码器,以从大规模无标注语料中学习不同语言的语义表征。为了提高表征学习效率以及捕捉长距离依赖,使用多头自注意力机制来构建编码器和解码器网络。在编码阶段,平均池化和最大池化操作的联合运用使文本表征可以捕捉更丰富的语义信息。随后,解码器执行门控操作来动态关注编码的全局语义表征。即使处理长文本序列,语义表征依然可以持续有效地指导重构过程。通过语义表征重构中英文的长文本实验中,本文模型的实验效果远优于传统的RNNs模型。同时,由于采用并行化的建模方式,模型极大地缩减了文本表征学习的时间。在后续的研究中,我们将尝试自动从互联网海量数据中构建监督语料,用于学习不同语言的语义表征。