深入浅出词嵌入技术

本文概览:

本文又名《Distributed Representation: From Static Embedding to Contextualized Embedding》

1. Classical Representation: One-hot Encoding

独热编码是 NLP 领域最简单的一种单词表示法。One-hot Encoding 就是一个单词用长度为的向量表示,其中只有一个位置为,其余位置为,为语料中词库的大小。

One-hot Encoding 有什么问题呢?假如我想用余弦相似度计算上图中“机器学习”与“深度学习”的相似度,或者计算“贪心科技”与“深度学习”的相似度,我们会发现相似度的值都是相同的。也就是说,单词通过独热编码的方式是不能表示单词间语义的相似度。 由于这是独热编码最大的问题,因此科学家们开始研究如何对独热编码做改进,改进成一个向量可以表示单词的语义。如果我们能用一个向量表示单词的语义,那么两个向量的相似度应该可以表示两个单词语义的相似度。下图是我们对独热编码的一个总结。

2. From One-hot to Distributed Representation

由于独热编码非常的稀疏、不能表示单词间语义的相似度等缺点,我们希望学习下图中右边所示的单词表示方法。这种方法是由稠密向量表示单词,且向量维度更低,我们把这种方法叫做词向量。

词向量需要通过词向量模型学习来得到。我们需要一批语料当作模型的输入,然后词向量模型可以选择 SkipGram 模型、Bert 模型或者其它模型,最后就可以得到词的分布式表示向量。

学习词向量有一个非常重要的理论:分布式假设,即一个单词的出现,跟它的上下文有关,我们可以根据上下文来预测某个单词。举个例子,我们可以根据上文“贪心科技作为国内”和下文“的高端 AI 教育品牌”,猜测出横线处应该是“领先”这个词。后边两个横线,分别从它们的上下文中,可以猜出应填词为“推出”、“案例”。

3. Static Word Embedding

3.1 Word2Vec

比较经典的词向量模型是 Word2Vec,主要包含两个模型:CBOW 和 SkipGram 模型。CBOW 是根据上下文来预测中心单词;SkipGram 通过中心词来预测上下文的单词。

3.2 SkipGram in Detail

在 SkipGram 预测的时候,输出的是预测目标词的概率,也就是说我每一次预测都要基于全部的数据集进行计算,这无疑会带来很大的时间开销。因此,Word2Vec 提出两种加快训练速度的方式,一种是 Hierarchical softmax,另一种是 Negative Sampling。

3.3 CBOW 与 SkipGram 的比较

  • 数据比较少的时候,SkipGram 效果比较好。 因为通过 SkipGram 的训练方式,我们能从较少的数据集中构造出更多的训练样本,CBOW 是对中心词构造一条样本,SkipGram 是对中心词可以构造多条训练样本。
  • 出现次数较少的单词在语料库中较多的时候,SkipGram 效果比较好。 因为 CBOW 的映射层起到 Smoothing 的作用,模型会预测更经常出现的单词。

3.4 Word Embedding by Matrix Factorization

矩阵分解也是可以学习词向量的。假如我们有三个句子组成的语料库:I enjoy flying. I like NLP. I like deep learning. 我们可以统计出单词的共现矩阵(Co-occurrence Matrix),将共现矩阵行(列)作为词向量。例如:假设统计窗口大小为,“I like”出现在第,句话中,一共出现次,所以“I like”=。对称的窗口指的是,“like I”也是次。将共现矩阵行(列)作为词向量表示后,可以知道“like”、“enjoy”都是在“I”附近且统计数目大约相等,因此它们意思相近。

共现矩阵 X 的维度为: ,我们可以通过 SVD 的方法将大矩阵 X 分解,因为矩阵 X 比较稀疏,从矩阵论的角度来看,希望学到更低秩的表示方法。因此可以将矩阵分解为三个小矩阵、 、,可以用矩阵的每一行表示单词的词向量。

因为矩阵分解中的共现矩阵中的统计信息是来自于所有的语料库,因此矩阵分解得到的词向量是全局的方法(Global Method)。由于 CBOW、SkipGram 模型每次考虑的是中心词和它周围的单词,因此 CBOW、SkipGram 模型得到的词向量是局部的方法(Local Method)。

  • 共现矩阵不足:面临稀疏性问题、向量维数随着词典大小线性增长。
  • 解决办法:SVD、PCA 降维,但是计算量大。

3.5 Glove

局部的方法和全局的方法都有自己的优缺点。全局的方法可以从整个语料的角度更宏观的审视词的特点;局部的方法是基于局部语料库训练的,其特征提取是基于滑窗的,因此局部的方法可以进行在线学习。基于局部方法论和全局方法论的优缺点,科学家提出了 Glove 算法。

Glove 算法很好地把 MF 这种全局的方法和 SkipGram 这种局部的方法整合在了一起。Glove 的计算效率很高、效果也很好。

3.6 Glove 和 Word2Vec、 LSA 对比有什么区别?(Word2Vec vs Glove vs LSA)

(1)Glove vs LSA

  • LSA(Latent Semantic Analysis)可以基于 co-occurance matrix 构建词向量,实质上是基于全局语料采用 SVD 进行矩阵分解,然而 SVD 计算复杂度高;
  • Glove 可看作是对 LSA 一种优化的高效矩阵分解算法,采用 Adagrad 对最小平方损失进行优化;

(2)Word2Vec vs Glove

  • Word2Vec 是局部语料库训练的,其特征提取是基于滑窗的;而 Glove 的滑窗是为了构建 co-occurance matrix,是基于全局语料的,可见 Glove 需要事先统计共现概率;因此,Word2Vec 可以进行在线学习,Glove 则需要统计固定语料信息。
  • Word2Vec 是无监督学习,同样由于不需要人工标注;Glove 通常被认为是无监督学习,但实际上 Glove 还是有 label 的,即共现次数。
  • Word2Vec 损失函数实质上是带权重的交叉熵,权重固定;Glove 的损失函数是最小平方损失函数,权重可以做映射变换。
  • 总体来看,Glove 可以被看作是更换了目标函数和权重函数的全局 Word2Vec。

3.7 Gaussian Embedding

下图中例子里,“AI”在语料库中出现的次数较多,那上面提到的几个模型学出的准确率越高。模型对于出现次数较多的词学出的词向量更加自信,模型对于出现次数较少的词学习的词向量把握不太大。

我们希望找到一种方式来评估模型学到的词向量的自信度(Confidence)。我们可以想到把每个单词的词向量表示成一个分布,比如:

其中, 是模型学出的单词“AI”的词向量, 是词向量服从的分布。 表示了 AI 这个词向量, 表示了对结果的不确定性。

每个单词都用高斯分布表示,那怎么衡量两个单词之间的相似度呢?我们可以用 KL 散度、Wasserstein 距离(也叫 Earth-Mover(EM)距离,在 GAN 中非常重要)来度量两个分布之间的相似度。

3.8 Pointcare Embedding

上面提到的模型是在欧式空间中进行的词嵌入,但是也存在一些非欧式空间的一些场景,比如计算地球仪中两个点之间距离。尤其是在物理学和天文学中,有很多非欧式空间的场景,比如一些非欧式空间的数据有层级结构或树型结构。

3.9 Neural Network Language Model

Neural Network Language Model 根据之前的单词预测最新的一个单词,这里没有中心词的概念,只通过之前两三个单词来预测后面的一个单词。

4. Contextualized(Dynamic) Word Embedding

上面讲了一些静态的词向量,就是一个单词只能学出一个词向量。在很多的 NLP 工作里面,一个单词可以表示成很多种意思(即一词多义),如何处理一词多义、考虑单词在上下文中的意思,这个问题是近四年来 NLP 领域最火热的一个研究方向。就拿 Bert 模型来说,它是一个很明显的分水岭,想把它得到的上下文词嵌入运用到工业界里。年起学者都在研究静态的词向量,大概从年起大家慢慢的开始重点研究上下的词向量。

4.1 Contextualized Word Embedding 简述

第一个例子中的第一个“apple”指苹果公司,第二个“apple”指水果苹果。假如我们用静态的词向量,那在整个语料中“apple”只能表示一个意思,不能表示单词在上下文中的一个区别。

第二个例子中的第一个“back”指后背,第二个“back”指倒车。第三个例子中的第一个“学习”是动词,第二个“学习”是名词。单词的词性和词义在上下文中不同,我们希望学到的词向量也是不一样的。

4.2 LSTM-based Model

4.2.1 CoVe

下图 a)是一个经典的 Seq2Seq 模型,我们以机器翻译任务训练模型的 Encoder 和 Decoder 部分。我们可以通过这种方式学习出带有上下文的词向量。那么我们为什么可以通过这种方式学习到带有上下文的词向量呢?


  • 本文地址:深入浅出词嵌入技术
  • 本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出

从下图 b)中我们可以知道,由于 Encoder 和 Decoder 都是 BI-LSTM 模型,模型本身含有语句上下文的信息。因此,用静态词向量输入 Encoder 编码器就可以得到含有上下文的词向量。我们把含有上下文的词向量和静态的词向量拼接在一起,就可以解决某些特定的任务。

4.2.2 ELMo

CoVe 使用了机器翻译任务的 Loss 训练模型,而 ELMo 训练目标就是语言模型,根据上下文预测下一个单词。通过语言模型从左到右训练的方式,我们也叫做 Autoregressive Model。

要从 ELMo 得到一个单词的词向量,我们可以把静态词向量,拼接第一层隐层向量,再拼接第二层隐层向量,最后再拼接第三层隐层向量,就得到了这个单词的完整的含有上下文的单词向量。比如,单词“今天”的词向量为:

4.3 Transformer-based Model

4.3.1 From LSTM-based Model to Transformer-based Model

LSTM 的缺点:

  • 梯度消失、梯度爆炸问题,导致模型不能很好的捕获长期依赖问题。
  • LSTM 是序列模型,不能并行处理数据。

基于以上问题,所以我们用 Transformer 来作为模型处理序列数据的基础组件。

(1)Transformer

Transformer 由两部分组成:Encoder、Decoder。Encoder 部分有许多个 Encoder Block 组成。每个 Encoder Block 由五部分组成:

  • Self-Attention
  • Layer Norm
  • Skip Connection
  • Forward Network
  • Positional Encoding

(2)Self-Attention

Transformer 的核心是 Self-Attention,而在 Transformer 的每个 Encoder Block 中都是由个 Self-Attention 组成的 Multi-Headed Attention。关于 Self-Attention 和 Multi-Headed Attention 的内容,可以看我之前的文章:《Self-Attention 与 Transformer》

4.3.2 GPT

ELMo 用 LSTM 作为基本组件,GPT 用 Transformer 的 Decoder 作为基本组件。GPT 用语言模型训练。GPT 的优点是使用了 Transformer 结构,解决了 LSTM 的缺点问题。

GPT 存在的问题:由于 GPT 是从左到右单向训练语言模型,没有考虑当前预测单词右边的信息,是一种单向的训练方式。

4.3.3 BERT

BERT 使用 Transformer 的 Encoder 结构作为自己的组件。BERT 训练的时候,随机把语料库中 15% 的单词做 Mask 操作。对于 15% 的单词做 Mask 操作分为三种情况:80% 的单词直接用[Mask]替换、10% 的单词直接替换成另一个新的单词、10% 的单词保持不变,用这种方式训练的语言模型叫做 MLM(Masked Language Model)。其实 BERT 的目标函数的核心思想来自于图像领域的 DAE。

4.3.4 RoBERTa

基于 BERT 有很多的改进,比较直接的改进是 RoBERTa。这个模型针对 BERT 来讲没有太大的区别,更多的还是在训练的过程中做了一些改进,所以总结起来有四点改进:

  • 训练的时间更长,训练的 Batch 更大,训练的数据更多。
  • NSP 任务被移除,因为很多研究者表明 NSP 任务在 BERT 中起到的作用不大,ALBERT 中也指出 NSP 任务在 BERT 中作用不大。
  • RoBERTa 训练在更长的序列中。
  • 在 BERT 里面,Mask Token 是在数据预处理过程中进行的,所以不管数据循环训练多少次,Mask Token 是不变的。在训练 RoBERTa 时,针对每个训练数据是重新随机的选取 Mask Token。

4.3.5 MASS

MASS 模型既使用了 Transformer 的 Encoder 部分,也使用了 Transformer 的 Decoder 部分。MASS 的训练过程更像是 Translation Machine 的过程,它有点类似于上面提到的 CoVe 模型。MASS 主要工作原理是:在 Encoder 的输入部分随机 Mask 掉一些单词,然后在 Decoder 部分预测输出被 Mask 掉的单词。

4.3.6 XLNet

(1)What are the problems of BERT?

  • Training and Testing discrepancy。BERT 模型在训练的时候,训练数据是随机 Mask 掉一些单词,但是在测试或预测的时候输入的数据是没有 Mask 操作,这会导致训练数据和测试数据不一致的问题。
  • Independent assumption of predicted tokens。比如,BERT 模型需要预测句子“今天是[MASK]讲[MASK]”中被 Mask 的单词。BERT 首先根据上下文“今天、是、讲”来预测出“周日”,再根据上下文“今天、是、讲”预测出“CV”,但是“周日”和“CV”是有一定关系的,BERT 模型并没有考虑预测单词之间的关系。

(2)Two Objectives: Autoregressive vs Autoencoding

  • AR:Autoregressive Language Modeling
  • AE:Autoencoding Language Modeling

AR 语言模型:指的是依据前面(或后面)出现的 tokens 来预测当前时刻的 token,代表有 ELMo, GPT 等。

forward:

backward:

AE 语言模型:通过上下文信息来预测被 mask 的 token,代表有 BERT , Word2Vec(CBOW) 。

二者有着它们各自的优缺点:

AR 语言模型:

  • 缺点: 它只能利用单向语义而不能同时利用上下文信息。ELMo 通过双向都做 AR 模型,然后进行拼接,但从结果来看,效果并不是太好。
  • 优点: 对生成模型友好,天然符合生成式任务的生成过程。这也是为什么 GPT 能够编故事的原因。

AE 语言模型:

  • 缺点: 由于训练中采用了 [MASK] 标记,导致预训练与微调阶段不一致的问题。BERT 独立性假设问题,即没有对被遮掩(Mask)的 token 之间的关系进行学习。此外对于生成式问题, AE 模型也显得捉襟见肘。
  • 优点: 能够很好的编码上下文语义信息(即考虑句子的双向信息), 在自然语言理解相关的下游任务上表现突出。

所以,AR 方式所带来的自回归性学习了预测 token 之间的依赖,这是 BERT 所没有的;而 BERT 的 AE 方式带来的对深层次双向信息的学习,却又是像 ELMo 还有 GPT 单向语言模型所没有的,不管是有没有替换 “[MASK]”。于是,自然就会想,如何将两者的优点统一起来? 这时就到了 XLNet 登场的时间。

(3)XLNet 原理

XLNet 模型为了获得上下文信息,对一个句子排列组合出所有可能的顺序,这样就有点类似于双向语言模型的感觉。

5. Model Compression

上面讲了许多词嵌入的模型,但是有许多模型参数巨大,不能在有限的机器上训练出来,在工业界落地那就更难了。因此,有一部分学者就在模型压缩方面做了一些工作,我认为在未来一段时间很多工作都会围绕模型压缩来做。模型压缩有以下几种方式:

  • Sparse Priors。这个压缩方法是从贝叶斯想法过来的。如果你之前了解过在逻辑回归上使用正则来得到稀疏参数,跟 L1 正则相对应的是 Laplace Priors,就是我把先验放到参数上面,使得模型在训练过程中自动的学到一些稀疏参数。比较经典的论文是《Bayesian Compression for Deep Learning》。
  • Sparse Matrix Factorization。如下图所示,假如模型里有两层、,这两层之间的参数矩阵是,维度很高且非常稀疏,维度为。我们可以用矩阵分解的方法分解为两个低纬度矩阵,基于这种方法论的一个模型是 ALBERT。
  • Knowledge Distillation。有两个 Model:Student Model 和 Teacher Model。Student Model 层数更少、参数更少、模型更小,输入、输出和 Teacher Model 一样,用来模拟 Teacher Model。

5.1 ALBERT(Sparse Matrix Factorization)

ALBERT 发现 Transformer 的第、、层参数可视化后,学到的东西很类似,用一个参数矩阵来表示、、层参数,做到多层参数共享,节省内存空间。

5.2 TinyBERT(Knowledge Distillation)

TinyBERT 有两个模型如下图所示,左边的 Teacher(BERT)有层,右边的 Student(TinyBERT)有层,知识蒸馏就是把左边的模型迁移到右边的模型,且。

6. Summary

7. Reference

本文是 Microstrong 在观看李文哲在 B 站上讲解的直播课程《Distributed Representation: From Static Embedding to Contextualized Embedding》的笔记。视频地址:https://www.bilibili.com/video/BV1EK411p7Nd?p=1

【1】【NLP 系列直播 2】From Static Embedding to Contextualized Embedding,贪心学院,地址:https://www.bilibili.com/video/BV1EK411p7Nd?p=1
【2】李文哲老师直播课深入浅出词嵌入技术,地址:https://www.bilibili.com/video/BV1tt4y1C7Cm?from=search&seid=17022969140118519703
【3】nlp 中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert - JayLou 娄杰的文章 - 知乎 https://zhuanlan.zhihu.com/p/56382372
【4】XLNet 详解 - Microstrong 的文章 - 知乎 https://zhuanlan.zhihu.com/p/110204573
【5】The Illustrated Transformer,地址:https://jalammar.github.io/illustrated-transformer/


本文地址:https://www.6aiq.com/article/1594176378794
本文版权归作者和AIQ共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出