本文概览:
本文又名《Distributed Representation: From Static Embedding to Contextualized Embedding》
独热编码是NLP领域最简单的一种单词表示法。One-hot Encoding就是一个单词用长度为 的向量表示,其中只有一个位置为 ,其余位置为 , 为语料中词库的大小。
One-hot Encoding有什么问题呢?假如我想用余弦相似度计算上图中“机器学习”与“深度学习”的相似度,或者计算“贪心科技”与“深度学习”的相似度,我们会发现相似度的值都是相同的。也就是说,单词通过独热编码的方式是不能表示单词间语义的相似度。 由于这是独热编码最大的问题,因此科学家们开始研究如何对独热编码做改进,改进成一个向量可以表示单词的语义。如果我们能用一个向量表示单词的语义,那么两个向量的相似度应该可以表示两个单词语义的相似度。下图是我们对独热编码的一个总结。
由于独热编码非常的稀疏、不能表示单词间语义的相似度等缺点,我们希望学习下图中右边所示的单词表示方法。这种方法是由稠密向量表示单词,且向量维度更低,我们把这种方法叫做词向量。
词向量需要通过词向量模型学习来得到。我们需要一批语料当作模型的输入,然后词向量模型可以选择SkipGram模型、Bert模型或者其它模型,最后就可以得到词的分布式表示向量。
学习词向量有一个非常重要的理论:分布式假设,即一个单词的出现,跟它的上下文有关,我们可以根据上下文来预测某个单词。举个例子,我们可以根据上文“贪心科技作为国内”和下文“的高端AI教育品牌”,猜测出横线处应该是“领先”这个词。后边两个横线,分别从它们的上下文中,可以猜出应填词为“推出”、“案例”。
比较经典的词向量模型是Word2Vec,主要包含两个模型:CBOW和SkipGram模型。CBOW是根据上下文来预测中心单词;SkipGram通过中心词来预测上下文的单词。
在SkipGram预测的时候,输出的是预测目标词的概率,也就是说我每一次预测都要基于全部的数据集进行计算,这无疑会带来很大的时间开销。因此,Word2Vec提出两种加快训练速度的方式,一种是Hierarchical softmax,另一种是Negative Sampling。
矩阵分解也是可以学习词向量的。假如我们有三个句子组成的语料库: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)。
局部的方法和全局的方法都有自己的优缺点。全局的方法可以从整个语料的角度更宏观的审视词的特点;局部的方法是基于局部语料库训练的,其特征提取是基于滑窗的,因此局部的方法可以进行在线学习。基于局部方法论和全局方法论的优缺点,科学家提出了Glove算法。
Glove算法很好地把MF这种全局的方法和SkipGram这种局部的方法整合在了一起。Glove的计算效率很高、效果也很好。
下图中例子里,“AI”在语料库中出现的次数较多,那上面提到的几个模型学出的准确率越高。模型对于出现次数较多的词学出的词向量更加自信,模型对于出现次数较少的词学习的词向量把握不太大。
我们希望找到一种方式来评估模型学到的词向量的自信度(Confidence)。我们可以想到把每个单词的词向量表示成一个分布,比如:
其中, 是模型学出的单词“AI”的词向量, 是词向量服从的分布。 表示了AI这个词向量, 表示了对结果的不确定性。
每个单词都用高斯分布表示,那怎么衡量两个单词之间的相似度呢?我们可以用KL散度、Wasserstein距离(也叫Earth-Mover(EM)距离,在GAN中非常重要)来度量两个分布之间的相似度。
上面提到的模型是在欧式空间中进行的词嵌入,但是也存在一些非欧式空间的一些场景,比如计算地球仪中两个点之间距离。尤其是在物理学和天文学中,有很多非欧式空间的场景,比如一些非欧式空间的数据有层级结构或树型结构。
Neural Network Language Model根据之前的单词预测最新的一个单词,这里没有中心词的概念,只通过之前两三个单词来预测后面的一个单词。
上面讲了一些静态的词向量,就是一个单词只能学出一个词向量。在很多的NLP工作里面,一个单词可以表示成很多种意思(即一词多义),如何处理一词多义、考虑单词在上下文中的意思,这个问题是近四年来NLP领域最火热的一个研究方向。就拿Bert模型来说,它是一个很明显的分水岭,想把它得到的上下文词嵌入运用到工业界里。 年起学者都在研究静态的词向量,大概从 年起大家慢慢的开始重点研究上下的词向量。
第一个例子中的第一个“apple”指苹果公司,第二个“apple”指水果苹果。假如我们用静态的词向量,那在整个语料中“apple”只能表示一个意思,不能表示单词在上下文中的一个区别。
第二个例子中的第一个“back”指后背,第二个“back”指倒车。第三个例子中的第一个“学习”是动词,第二个“学习”是名词。单词的词性和词义在上下文中不同,我们希望学到的词向量也是不一样的。
下图a)是一个经典的Seq2Seq模型,我们以机器翻译任务训练模型的Encoder和Decoder部分。我们可以通过这种方式学习出带有上下文的词向量。那么我们为什么可以通过这种方式学习到带有上下文的词向量呢?
从下图b)中我们可以知道,由于Encoder和Decoder都是BI-LSTM模型,模型本身含有语句上下文的信息。因此,用静态词向量输入Encoder编码器就可以得到含有上下文的词向量。我们把含有上下文的词向量和静态的词向量拼接在一起,就可以解决某些特定的任务。
CoVe使用了机器翻译任务的Loss训练模型,而ELMo训练目标就是语言模型,根据上下文预测下一个单词。通过语言模型从左到右训练的方式,我们也叫做Autoregressive Model。
要从ELMo得到一个单词的词向量,我们可以把静态词向量,拼接第一层隐层向量,再拼接第二层隐层向量,最后再拼接第三层隐层向量,就得到了这个单词的完整的含有上下文的单词向量。比如,单词“今天”的词向量为:
LSTM的缺点:
基于以上问题,所以我们用Transformer来作为模型处理序列数据的基础组件。
Transformer由两部分组成:Encoder、Decoder。Encoder部分有许多个Encoder Block组成。每个Encoder Block由五部分组成:
Transformer的核心是Self-Attention,而在Transformer的每个Encoder Block中都是由 个Self-Attention组成的Multi-Headed Attention。关于Self-Attention和Multi-Headed Attention的内容,可以看我之前的文章:《Self-Attention与Transformer》。
ELMo用LSTM作为基本组件,GPT用Transformer的Decoder作为基本组件。GPT用语言模型训练。GPT的优点是使用了Transformer结构,解决了LSTM的缺点问题。
GPT存在的问题:由于GPT是从左到右单向训练语言模型,没有考虑当前预测单词右边的信息,是一种单向的训练方式。
BERT使用Transformer的Encoder结构作为自己的组件。BERT训练的时候,随机把语料库中15%的单词做Mask操作。对于15%的单词做Mask操作分为三种情况:80%的单词直接用[Mask]替换、10%的单词直接替换成另一个新的单词、10%的单词保持不变,用这种方式训练的语言模型叫做MLM(Masked Language Model)。其实BERT的目标函数的核心思想来自于图像领域的DAE。
基于BERT有很多的改进,比较直接的改进是RoBERTa。这个模型针对BERT来讲没有太大的区别,更多的还是在训练的过程中做了一些改进,所以总结起来有四点改进:
MASS模型既使用了Transformer的Encoder部分,也使用了Transformer的Decoder部分。MASS的训练过程更像是Translation Machine的过程,它有点类似于上面提到的CoVe模型。MASS主要工作原理是:在Encoder的输入部分随机Mask掉一些单词,然后在Decoder部分预测输出被Mask掉的单词。
AR语言模型:指的是依据前面(或后面)出现的tokens来预测当前时刻的token,代表有 ELMo, GPT等。
forward:
backward:
AE语言模型:通过上下文信息来预测被mask的token,代表有 BERT , Word2Vec(CBOW) 。
二者有着它们各自的优缺点:
AR 语言模型:
AE 语言模型:
所以,AR方式所带来的自回归性学习了预测 token 之间的依赖,这是 BERT 所没有的;而 BERT的AE方式带来的对深层次双向信息的学习,却又是像ELMo还有GPT单向语言模型所没有的,不管是有没有替换 “[MASK]”。于是,自然就会想,如何将两者的优点统一起来? 这时就到了XLNet登场的时间。
XLNet模型为了获得上下文信息,对一个句子排列组合出所有可能的顺序,这样就有点类似于双向语言模型的感觉。
上面讲了许多词嵌入的模型,但是有许多模型参数巨大,不能在有限的机器上训练出来,在工业界落地那就更难了。因此,有一部分学者就在模型压缩方面做了一些工作,我认为在未来一段时间很多工作都会围绕模型压缩来做。模型压缩有以下几种方式:
ALBERT发现Transformer的第 、 、 层参数可视化后,学到的东西很类似,用一个参数矩阵来表示 、 、 层参数,做到多层参数共享,节省内存空间。
TinyBERT有两个模型如下图所示,左边的Teacher(BERT)有 层,右边的Student(TinyBERT)有 层,知识蒸馏就是把左边的模型迁移到右边的模型,且 。
本文是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函数优化
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
太赞了!Springer面向公众开放电子书籍,附65本数学、编程、机器学习、深度学习、数据挖掘、数据科学等书籍链接及打包下载
数学之美中盛赞的 Michael Collins 教授,他的NLP课程要不要收藏?
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。
阅读至此了,点个在看吧👇