45

深入浅出词嵌入技术

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MjM5ODkzMzMwMQ%3D%3D&%3Bmid=2650414593&%3Bidx=2&%3Bsn=3b29d21dda5029d96f3aa46c1d2d1340
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

7z2URfZ.jpg!web

本文概览:

6FJvqeE.jpg!web

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

qmuaYnE.png!web

1. Classical Representation: One-hot Encoding

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

iYbArm7.png!web

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

ymY32mQ.png!web

2. From One-hot to Distributed Representation

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

V3EvInu.png!web

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

uAVbErY.png!web

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

AbAvMbi.png!web

3. Static Word Embedding

3.1 Word2Vec

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

EniUvye.png!web

3.2 SkipGram in Detail

Mvy673V.png!web

qiI3UfV.png!web

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

VJfqMrV.png!web

fEZf6jy.png!web

EVzmeqz.png!web

beEzIfJ.png!web

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”附近且统计数目大约相等,因此它们意思相近。

2iyYbyV.png!web

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

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

  • 共现矩阵不足:面临稀疏性问题、向量维数随着词典大小线性增长。

  • 解决办法:SVD、PCA降维,但是计算量大。

3.5 Glove

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

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

QZBvInn.png!web

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”在语料库中出现的次数较多,那上面提到的几个模型学出的准确率越高。模型对于出现次数较多的词学出的词向量更加自信,模型对于出现次数较少的词学习的词向量把握不太大。

JBrui2z.png!web

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

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

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

3.8 Pointcare Embedding

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

6jEfee.png!web

3.9 Neural Network Language Model

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

6rueQj6.png!web

4. Contextualized(Dynamic) Word Embedding

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

4.1 Contextualized Word Embedding简述

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

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

qUNFRfE.png!web

4.2 LSTM-based Model

4.2.1 CoVe

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

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

QFjqauQ.png!web

4.2.2 ELMo

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

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

M3YNZn.png!web

4.3 Transformer-based Model

4.3.1 From LSTM-based Model to Transformer-based Model

LSTM的缺点:

  • 梯度消失、梯度爆炸问题,导致模型不能很好的捕获长期依赖问题。

  • LSTM是序列模型,不能并行处理数据。

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

ZJbiEnb.png!web

(1)Transformer

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

  • Self-Attention

  • Layer Norm

  • Skip Connection

  • Forward Network

  • Positional Encoding

3QnM7rm.png!web

(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是从左到右单向训练语言模型,没有考虑当前预测单词右边的信息,是一种单向的训练方式。

EBzIvmq.png!web

4.3.3 BERT

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

uQNBzum.png!web

4.3.4 RoBERTa

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

  • 训练的时间更长,训练的Batch更大,训练的数据更多。

  • NSP任务被移除,因为很多研究者表明NSP任务在BERT中起到的作用不大,ALBERT中也指出NSP任务在BERT中作用不大。

  • RoBERTa训练在更长的序列中。

  • 在BERT里面,Mask Token是在数据预处理过程中进行的,所以不管数据循环训练多少次,Mask Token是不变的。在训练RoBERTa时,针对每个训练数据是重新随机的选取Mask Token。

jeI3IrI.png!web

4.3.5 MASS

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

6f2Ebmz.png!web

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模型并没有考虑预测单词之间的关系。

32MrMrr.png!web

(2)Two Objectives: Autoregressive vs Autoencoding

  • AR:Autoregressive Language Modeling

  • AE:Autoencoding Language Modeling

2e2mUni.png!web

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

yqEvmqI.png!web

5. Model Compression

jmEb2aQ.png!web

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

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

yuQRjef.png!web

5.1 ALBERT(Sparse Matrix Factorization)

7bMFBzJ.png!web

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

qqeyqme.png!web

5.2 TinyBERT(Knowledge Distillation)

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

muM3yyF.png!web

6. Summary

6FrAfqE.png!web

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/

推荐阅读

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

太赞了!Springer面向公众开放电子书籍,附65本数学、编程、机器学习、深度学习、数据挖掘、数据科学等书籍链接及打包下载

数学之美中盛赞的 Michael Collins 教授,他的NLP课程要不要收藏?

自动作诗机&藏头诗生成器:五言、七言、绝句、律诗全了

这门斯坦福大学自然语言处理经典入门课,我放到B站了

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。

mYbYbmy.jpg!web

阅读至此了,点个在看吧 :point_down:


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK