- 创新工场讲AI课:从知识到实践
- 创新工场DeeCamp组委会
- 3034字
- 2025-02-18 01:35:38
3.2.2 表示学习
本节我们介绍表示学习。在NLP领域里,表示学习主要解决的问题是,将大型稀疏向量转换为保留语义关系的低维向量。通俗来说,它可以把所有的数据变成向量(vector),也有很多研究者把向量叫作嵌入(embedding)。所以,对于表示学习来说,“嵌入”和“向量”是可以互换的概念。
如果把词嵌入一个好的词向量中,即使是在一个低维空间里,我们也可以将语义相似的词聚集在一起,把语义不同的词分开。词向量在这个空间里的位置(距离和方向)可以度量它的语义。例如,在图3.2.1[1]中,真实的词向量可视化显示了捕获的语义关系,如Country(国家)与Capital(首都)之间的几何关系。
关于表示学习,目前多数研究者主要是在研究稠密向量(Dense Vector)表示,今后,可能会有人研究稀疏向量(Sparse Vector)表示。但目前看来,对稠密向量表示的研究已经取得了一系列丰硕的成果。所以,在目前的研究阶段,嵌入和稠密向量是两个非常重要的概念。嵌入得到的向量有一个重要的特性,就是具有可迁移性,我们可以在不同的机器学习任务中使用这些向量。
1.无监督表示学习
学习嵌入的方法有很多种,包括无监督学习(Unsupervised Learning )、监督学习(Supervised Learning)和半监督学习(Semi-Supervised Learning)。我们这里主要介绍无监督表示学习。传统的无监督表示学习方法有Word2Vec(Word to Vector,词到向量)方法和自编码器(Autoencoder)方法。Word2Vec方法根据上下文之间的出现关系训练词向量,有Skip-Gram(跳字)模型和CBOW(Continuous Bag-Of-Word,连续词袋)模型两种训练模式。其中,Skip-Gram模型根据目标单词预测上下文,而CBOW模型则根据上下文预测目标单词,最后再使用模型中的部分参数作为词向量。之后,学术界又发展出基于上下文的嵌入(Context Word Embedding)模型,其代表模型有CoVe(Context Vectors,上下文矢量)模型和ELMo(Embeddings from Language Model,语言嵌入模型)。近期,在学术界较为流行的方法是预训练模型,以GPT(Generative Pre-Training,生成式预训练)模型和BERT(Bi-directional Encoder Representations from Transformer,来自Transformer模型的双向编码器表示)模型为代表,它们都是由Transformer模型衍生出来的。GPT模型其实是把Transformer模型里的编码部分去掉,只利用解码器来训练大语言模型,这属于无监督学习,而BERT模型是可以利用双向相关信息的无监督表示学习。

图3.2.1
在早期,自编码器是一种学习向量表示的方法,其核心思想是,在处理数据时希望从数据x映射到x'的过程,中间通过一个低维隐含层z作为向量表示。也就是说,把x变成嵌入的向量z(即表示学习中的向量),这个过程我们称之为编码(Encode),然后再转回x',即解码(Decode)。我们的目标是,这个低维表示向量z可以通过解码得到一个非常接近x的x'。这就是自编码器、噪声自编码器(Noising Autoencoder)等表示学习方法的思想。这个方法要求z的维度比x低,比如,x原来是10000维的,如果使用这个方法,就需要将x设定为100维,因此,这个低维表示就形成了所谓的瓶颈。在这种情况下,我们做不到完全精确表示,因为10000维的向量不可能用100维的向量完美表示,所以用 x' 预测x会有精度损失,而我们当然希望精度损失越少越好。从另外一个角度看,这是一个利用非线性重建来推广传统线性PCA(Principal Components Analysis,主成分分析)的非线性降维方法。
在自编码器被提出之后,研究人员纷纷开始进行相关优化改进。一个较有代表性的改进工作是VAE (Variational Auto-Encoder,变分自编码器)。VAE是自编码器的升级版本,其结构和自编码器类似,也由编码器和解码器构成。首先,在自编码器中,我们需要输入一张图片,并对图片进行编码,以此得到包含原图片信息的隐向量。然后,通过解码隐向量,得到与原图片对应的图片。但是这种方法不便于生成任意图片,因为我们没有办法自己构造隐向量,而是需要在对一张输入图片编码后,才能得到隐向量。但是,VAE可以解决这个问题。VAE通过对编码器添加约束,强迫它产生服从单位高斯分布的潜在变量,在生成图片的时候只需要从高斯分布中采样得到一个潜在变量,然后将其送入解码器进行解码,就能得到有意义的输出。VAE有很好的数学模型。它的潜在向量(Latent Vector)服从一个概率模型(Probability Model)分布,而观测到的数据是一个基于潜在向量的混合模型(Mixture Model)。从数学的角度来说,VAE可以直接写成编码器、解码器的形式,但中间要加上噪声。在加了噪声以后,这一行为就等价于构造一个混合概率模型。
Word2Vec的预测问题是用词重建它附近的词,这样可以更有效地避免只学习自己到自己的恒等映射,学习这种映射是没有价值的。也就是说,我们要用一部分观测量预测其他的观测量,这种方式也被称为多视角预测(Multi-View Prediction)。在学术界,以前也有对多视角预测的研究,即把数据拆成两个视角,用其中一个视角预测另外一个视角,因此模型不是自己预测自己,而是用一部分的自己预测另外一部分的自己,这样得到的表示结果非常好。自从Word2Vec出现以后,多视角预测就成为NLP任务中词嵌入(Word Embedding)的一个基石,因为它可以处理下游任务,比如情感分析、命名实体识别和机器翻译等一系列问题。
接下来,我们介绍与上下文有关的词嵌入,这是近几年一个比较重要的研究领域,以前已取得了巨大的成功。在NLP领域里,一个比较重要的工作是OpenAI的GPT语言模型,该模型用到了Transformer模型的结构。虽然它在模型的结构方面没有创新,但有两点是非常值得一提的:第一,这个语言模型可以生成更好的文本,这是因为在使用了Attention机制之后,该模型可以更有效地利用全局信息;第二,除了语言模型,生成的词嵌入也更加高效,同时,GPT模型生成的词嵌入也可以用在其他任务上。
在NLP领域里,最有影响力的预训练模型是BERT模型,它实际上就是基于无监督训练的Transformer模型。BERT模型与GPT模型的不同之处在于,它可以利用双向信息,而GPT模型只用了目标位置之前的信息。BERT模型同样使用了Transformer模型的结构和Self-Attention机制,所以能够得到更好的表示。但是它也存在一个问题,就是它使用所谓的掩码语言模型(Masked Language Model,有点像词嵌入中的Word2Vec),也就是用一些词去预测周围被遮掩的词,而不是用这些词预测自己。这样的话,在模型训练和部署时,其表现是不一致的。现在也有很多人在研究这个问题的解决方法。
总结来看,自然语言表示学习目前的发展趋势是从LSTM网络到Transformer模型。基于Transformer模型的架构,用无监督预训练来获取上下文信息可以有不同的方式,既包括单向的GPT模型,也包括双向的BERT模型。
BERT模型的使用使得一般的NLP问题更加简单,因为它把原来的句子换成了它所包含的词对应的向量,而这些表示都是可以预先训练出来的。BERT模型通过无监督学习得到一个可以关注上下文信息的向量表示,然后再去做下游任务,这样就大大简化了NLP的流程,这是一个普适的办法。BERT模型之所以有如此巨大的影响,是因为在一系列NLP任务中,它取得了非常大的突破,之后的领先系统全都是基于BERT模型的,或者是加上了一些其他方法的结果。
2.针对小样本的表示学习
接下来,我们介绍针对小样本学习的表示学习。以小样本分类(Few-Shot Classification)为例,如果我们已经有了一个训练好的50类分类器,接下来,要添加两个新的分类,如果这两个新分类只有很少的训练样本,我们应该怎么办?表示学习是解决这个问题的一个思路。我们可以让这两个新分类在50类分类器学习到的表示里面学习,这样就可以让学习变得更加简单。比如,一个工作是利用向量方法构建原型网络(Prototypical Network),其思路是,每个类别都存在一个原型表达,该表达是这类数据在向量空间里的均值。这样,分类问题就变成了找向量空间中的最近邻问题。它与匹配网络的不同之处在于,我们的类别只用属于这一类样本的向量中心来表示。比如,我们找了5个点,这5个点在向量上做一个平均,就变成了中心。在原型网络中,新来的样本与哪一个中心离得近,就把它归到对应的类别里。
综上所述,对于表示学习,非常重要的一点是在可迁移和可变场景中,我们需要有一个非常好的表示,它在不同的场景中是不变的,这能大大提高模型的训练能力。