天天看点

Word Embedding资料整理

最近要分享一次Word Embedding,虽然对这个东西早就知道,但是一直没有一个详细的梳理,趁着这次机会好好梳理一下这方面的东西。在网上看到正好有人写了相关的文章,就拿来学习了一番,再加上一些作者不屑于写的知识。

  • word Embedding技术背景
  • word2vec
  • word Embedding现今的发展
  • 进化从未停止

一,word Embedding技术背景

    万物皆可Embedding

Word Embedding可以用低维向量对物体进行编码还能保留其本身属性,另一个方面它也可以把高维稀疏的向量映射到低维向量中。 如果我们将词嵌入到同一个空间下之后,就可以对相关的词进行操作了。理论上数据准确所有的词都能做Embedding,准不准就看模型和方法了。

    神经网络语言模型(NNLM)

提到Word Embedding就要说一下NNLM,语言模型,该模型的作用就是给与一段话通过模型能够判断这句话是通顺一句话的概率。核心函数P的思想是根据句子里面前面的一系列前导单词预测后面出现哪个单词概率的大小。    

Word Embedding资料整理

语言模型

  NNLM的框架是:

Word Embedding资料整理

NNLM

 这个框架的任务就是训练处一个准确率高的语言模型,训练完成之后,输入一句话,模型会输出这句话通顺的程度,越通顺分数越高。模型在训练时:

1,单词one-hot编码W

2,W乘以Q得到向量C(w)

3,单词C(w)拼接,接隐层,用softmax预测后面应该接哪个单词(后面再接一个矩阵将数据维度映射到词表长度);

4,使用梯度下降优化更新参数,使损失函数到达极值点

C(w)就是单词的Embedding值。矩阵Q有V行,V为词典大小,每一行代表对应单词的Word Embedding,m表示每个单词的含义。Q是需要学习的网络参数,也是我们最终要得到的word embedding。

NNLM最终的效果怎么样?不知道,没人关注,此后人们将目光就放在其副产品矩阵Q。所以说word embedding其实是NNLM无心插柳的一个副产品。

二,Word2Vec

Word Embedding是方法论,Word2vec是工具。它是2018年之前生产word Embedding名器。

word2vec原理: word2vec的目标是将词转化成具有语义信息的向量表达方式。

word2vec的训练方式有两种CBOW和skip-gram;

CBOW是用两边的词来预估中间的词,而skip-gram是用中间的词来预估两边的词。以CBOW为例来讲解:

产品名:word2vec

生产日期:2013

厂家:谷歌

用途:产生词向量

word2vec是一个仅有3层的浅层神经网络,它的输入和输出层维度都是N,隐层维度为h。最终学到的词向量实际上是该网络的

输入层-隐层的权重(维度为N*h,其中N是词汇表大小 ,h是词向量维度)。

输入:固定长度的滑动窗口获取[V1,V2,..,Vc-1,Vc+1…Vw],输出层:Vc的概率

Word Embedding资料整理
Word Embedding资料整理

word2vec根据训练方法分成两种:CBOW、Skip-gram。

Word Embedding资料整理

CBOW:用上下文去预测单词

Skip-Gram:用单词预测上下文

两种方法效果没有明显的差别,此次讲一下CBOW的推导过程。

    CBOW的推导

假设条件:

维度:输入、输出 v;Embedding矩阵We:[v*h];output矩阵Wo:[h*v]

数据语料中只有两句话:I love bei jing. I love zhong guo.

那么v就是6,h可以设定的固定的值也可以训练得到。

那么如下图所示:

Word Embedding资料整理
Word Embedding资料整理

 ([1,v]*[v,h]=[1,h])

Word Embedding资料整理

    ([1,h])

Z`=??∗?=Wo∗Z   ([1,h]*[h,v]=[1,v])

Word Embedding资料整理

交叉熵作损失函数: 

Word Embedding资料整理

(右侧括号里面表示数据表维度的变化)

首先对于输入数据线作one-hot,如左侧所示,one-hot之后数据的维度变成(1*v);

1,输入数据乘以Embedding矩阵Q,得到Zi 

2,将Z的数据求均值;因为Zi都是向量因此求完均值之后还是一个(1,h)的向量

3,将Z与矩阵Wo相乘得到输出层的输入数据,向量的维度从(1,h)变成词维度的向量(1,v)

4,在输出层对Z`做softmax数据。softmax的函数如上所示,其实就是做了一个非线性变化以及归一化。

5,得到输出数据之后就看预测的结果对不对了,此时最小化交叉熵损失函数就是干这个事的,公式还是见上图,y表示标记值,是一个维度为v的one-hot的向量,a表示预测结果是一个维度为v的向量。因为是y是one-hot的因此从公式可以看出输出结果是y对应非0位置的处-log(ai)。结果越小越准确。

因为最后输出层是需要softmax的,这样每次都是对全量的数据做softmax计算,计算量是很大的,因此,会对其进行优化。

1,层softmax

通过哈夫曼的结构来优化。

2,负采样

负采样:每次只更新正样本和若干负样本

负样本的选择是根据词语在表中出现的概率来决定的,出现的频次越高被选择的频率越高。选择的公式如下:

Word Embedding资料整理

wi表示词频。

3,对高频词进行采样

Word2Vec通过“抽样”模式来解决这种高频词问题。它的基本思想如下:对于我们在训练原始文本中遇到的每一个单词,它们都有一定概率被我们从文本中删掉,而这个被删除的概率与单词的频率有关。

参考:https://www.cnblogs.com/cymx66688/p/11185824.html

word2vec存在的问题:

多义词的存在

如’bank’常用的含义有银行和河岸,在word2vec中是分不开的。在一个参数空间中同一个单词只有一个编码,在训练之后是不会改变的。Word2vec得到的Word Embedding是静态的

三,word Embedding现今的发展

    ELMO

ELMO“Embedding from Language Models”的简称,由论文“Deep contextualized word representation”提出的。

ELMO是对Word Embedding静态的一种优化,其核心思想是:先用语言模型学好单词的Word Embedding,在实际使用的时候由于单词已经具备上下文了,此时可以根据上下文单词的语义去调整单词的Word Embedding表示,经过调整后的单词会更具有上下文的具体含义,可以解决多义词问题,比如上文中出现’money‘那么’bank‘表示的银行的意思会更贴切。

ELMO本身是根据当前上下文对Word Embedding动态调整的思路。网络结构主要是一个双向RNN,语言模型作为训练任务。

ELMO采用典型的两阶段过程,第一个阶段利用语言模型进行预训练,第二个阶段用从预训练网络中提取对应单词的网络各层的word Embedding作为新特征补充到下游任务中。

预训练阶段:

其预训练网络结构采用双层双向LSTM,其语言模型的训练任务是根据单词W的上线正确预测单词W,W之前的单词称为Context-before,W之后的单词称为Context-after。如图所示,

Word Embedding资料整理

左端是前向双层LSTM,输入是从左到右w的上文,右侧是反向双层LSTM,输入是从右到左逆序句子。在训练好模型之后对于一个新句子Snew每个单词有三个Embedding,底层是单词的,中间的句法信息多一些,上面对应语义信息多一些。

在实际应用的时候,三个Embedding都会用到:

Word Embedding资料整理

以QA问题为例,先将句子X作为预训练好的ELMO网络的输入,这样句子X中每个单词在ELMO网络中都能获得三个对应的Embedding,之后给予这三个Embedding中每个Embedding一个权重a,这个权重可以学习得来,根据各自权重累加求和,将三个Embedding整合成一个。然后将整合后的这个Embedding作为X句在这个任务的那个网络结构中对应单词的输入,供下游使用。对于回答句子Y也是这么处理的。这种ELMO提供给下游每个单词的特征形式,这类方法称为"Feature-based Pre-Training"。

不仅学会了单词的Embedding,还学会一个双层双向LSTM机构。在使用过程中word Embedding会根据上下文的信息改变其值因此,其可以区分多义词。

如上下文中出现’money’那么bank表示‘银行’的意思会更多。

    创新和不足

创新:1,提出两阶段过程;第一阶段利用语言模型预训练;第二阶段做下游任务的时候与语言模型交互

       2,Word embedding时加入文本本身的特征,是的Embedding的时候会考虑上下文

不足:使用RNN作为特征提取器,而没有使用特征抽取能力更强的Transformer

    GPT1.0    

GPT的简称是“Generative Pre-Train”的简称,即生成式预训练。GPT也是采用两阶段预训练,第一个阶段利用语言模型进行预训练,第二个阶段通过Fine-turning的模型解决下游任务。

Word Embedding资料整理

GPT与ELMO的目标都是语言模型,不同的是,首先特征抽取采用Transform;其次语言模型采用单向,其单向是指其训练的时候只使用了Context-before信息,没有使用单词W的下文信息。

在下游任务是要使用GPT的时候因为要进行Fine-Tuning因此任务的结构类型需要改造成与预训练阶段相似的框架。如何改造呢?

我不了解。

GPT的效果还是挺好的,刷新了不少NLP任务的成绩。缺点嘛就是语言模型是单向的,没有用下问的数据多少会有些信息损失啊。

    BERT----超新星

bert论文:BERT:Pre-training of Deep Bidirectional Transformer for Language Understanding

Bert采用与GPT完全相同的两阶段模型,首先是语言模型训练,并使用Transformer作为特征提取器;其次是使用Fine-Tuning模型解决下游任务。和GPT最主要的不同在于预训练阶段采用了类似ELMO的双向语言模型,还有语言模型的数据规模要比GPT要大。

Word Embedding资料整理

从上图中可以看到其双向的过程,以最底层为例,’E‘不仅与后向的’Trm‘有联系还有前向的’Trm‘也有联系。

第二阶段,Fine-Tuning阶段的做法跟GPT一样,也面临下游任务网络结构改造的问题,在改造任务方面Bert与GPT有些不同。

那么如何改造呢?这个我是真知道。

在改造之前先说一下NLP的问题被分词四大类:序列标注、分类、句子关系判断、生成式任务。

a,序列标注:如中文分词、词性标注、命名实体识别、语义角色标注,其特点是句子中每个单词要求模型根据上下文给出一个分类类别。

b,分类任务:如文本分类、情感计算等,其特点是不管文章多长,总体给出一个分类类别即可;

c,句子关系判断:QA,语义改写、自然语言推理等任务都是这个模式,其特点是给的两个句子,模型判断出两个句子是否具备某种语义关系。

d,生成式任务:比如机器翻译、文本摘要、写诗造句,看图说话等,其特点是输入文本内容之后,需要自动生成另外一段文字。

对于不用类型NLP的任务改造如下所示:

Word Embedding资料整理

如上图所示:(a)表示句子关系类任务;(b)表示单句分类任务;(c)表示阅读理解任务;(d)表示序列标注任务

以(a)句子关系类任务为例,框架主题是成BERT的结构,对于输入数据加上一个起始和终结符号,句子之间加个分隔符即可。

对于输出来说,把第一个起始符号对应的Transformer最后一层位置上面串接一个softmax分类层即可。

只有改造之后数据才能Fine-Tuning啊。

效果:在11个各种类型的NLP任务中达到目前最好的效果,某些任务性能有极大的提升

归纳一下Bert的进展:一,采用两阶段模型,第一阶段是双向语言训练模型,第二阶段是采用具体任务Fine-Tuning或者做特征集合;二,是特征抽取要采用Transformer。集众家之所长。

四:进化从未停止

长江后浪推前浪

2019年6月XLNet 在 20 项任务上全面超越了 BERT,创造了 NLP 预训练模型新记录

2019年7月30日Facebook 发布 RoBERTa  一些任务已超越XLNet

参考文章:

知乎张俊林的这篇文章细致入微的讲解,文章兼具可读性、严谨性、细致性,非常难得的佳品,墙裂推荐:

https://zhuanlan.zhihu.com/p/49271699

word2vec的文章:

https://zhuanlan.zhihu.com/p/59396559

继续阅读