炼数成金 门户 商业智能 自然语言处理 查看内容

深入浅出词嵌入技术

2020-6-22 09:44| 发布者: 炼数成金_小数| 查看: 17646| 评论: 0|原作者: Microstrong|来自: Microstrong

摘要: 独热编码是NLP领域最简单的一种单词表示法。One-hot Encoding就是一个单词用长度为的向量表示,其中只有一个位置为,其余位置为,为语料中词库的大小。One-hot Encoding有什么问题呢?假如我想用余弦相似度计算上图 ...
本文概览:

本文又名《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

因为矩阵分解中的共现矩阵中的统计信息是来自于所有的语料库,因此矩阵分解得到的词向量是全局的方法(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”在语料库中出现的次数较多,那上面提到的几个模型学出的准确率越高。模型对于出现次数较多的词学出的词向量更加自信,模型对于出现次数较少的词学习的词向量把握不太大。


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部分。我们可以通过这种方式学习出带有上下文的词向量。那么我们为什么可以通过这种方式学习到带有上下文的词向量呢?

从下图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等。

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》。


5.1 ALBERT(Sparse Matrix Factorization)


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

5.2 TinyBERT(Knowledge Distillation)

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/

声明:文章收集于网络,版权归原作者所有,为传播信息而发,如有侵权,请联系小编删除,谢谢!

欢迎加入本站公开兴趣群
商业智能与数据分析群
兴趣范围包括:各种让数据产生价值的办法,实际应用案例分享与讨论,分析工具,ETL工具,数据仓库,数据挖掘工具,报表系统等全方位知识
QQ群:81035754

鲜花

握手

雷人

路过

鸡蛋

最新评论

热门频道

  • 大数据
  • 商业智能
  • 量化投资
  • 科学探索
  • 创业

 

GMT+8, 2020-10-24 06:27 , Processed in 0.187448 second(s), 23 queries .