[深度学习]-全面了解Word2Vec(详细)(NNLP->CBOW&skip-gram->hierarchical softmax&Negative sampling)

Word2Vec 顾名思义,就是将word转化成向量,转化成计算机可以计算、训练的0和1,让计算机自己可以识别词的含义,并进行学习和输出。

2013年,Google团队发表了word2vec工具。word2vec工具主要包含两个模型:跳字模型(skip-gram)和连续词袋模型(continuous bag of words,简称CBOW),以及两种高效训练的方法:负采样(negative sampling)和层序softmax(hierarchical softmax)。值得一提的是,word2vec词向量可以较好地表达不同词之间的相似和类比关系。
【来源】:https://blog.****.net/yu5064/article/details/79601683

1.词嵌入:

词嵌入(word embedding)是一种词的类型表示,具有相似意义的词具有相似的表示,是将词汇映射到实数向量的方法总称。词嵌入是自然语言处理的重要突破之一。
基于神经网络的分布表示又称为词向量或者词嵌入。 2001年, Bengio 等人正式提出神经网络语言模型( Neural Network Language Model ,NNLM),该模型在学习语言模型的同时,也得到了词向量。所以请注意一点:词向量可以认为是神经网络训练语言模型的副产品。

词嵌入的简单理解是:将编码经过one-hot的高维向量映射到低维空间,如图,将France和Italy映射在二维空间,可以通过计算词量之间的余弦值来计算词向量之间的相似度。
[深度学习]-全面了解Word2Vec(详细)(NNLP->CBOW&skip-gram->hierarchical softmax&Negative sampling)

2.one-hot编码:
one-hot的基本思想:将离散型特征的每一种取值都看成一种状态,若你的这一特征中有N个不相同的取值,那么我们就可以将该特征抽象成N种不同的状态,one-hot编码保证了每一个取值只会使得一种状态处于“**态”,也就是说这N种状态中只有一个状态位值为1,其他状态位都是0。举个例子,假设我们以三个单词为例,为cat、cats、dog分别在对应的位置将0置1,我们使用one-hot对其编码就会得到:
[深度学习]-全面了解Word2Vec(详细)(NNLP->CBOW&skip-gram->hierarchical softmax&Negative sampling)
链接:https://www.jianshu.com/p/5eceb8cfa4a5

One hot representation用来表示词向量非常简单,但是却有很多问题:
(1)任意两个词之间都是孤立的,根本无法表示出在语义层面上词语词之间的相关信息,而这一点是致命的。
(2)我们的词汇表一般都非常大,比如达到百万级别,这样每个词都用百万维的向量来表示简直是内存的灾难。能不能把词向量的维度变小呢?

3.词的分布式表示 distributed representation

目前流行的是通过矩阵降维或神经网络降维将语义分散存储到向量的各个维度中,这两类方法得到的向量空间是低维的一般都可以称作分布式表示,又称为词嵌入(word embedding)或词向量)

Dristributed representation可以解决One hot representation的问题,它的思路是通过训练,将每个词都映射到一个较短的词向量上来。所有的这些词向量就构成了向量空间,进而可以用普通的统计学的方法来研究词与词之间的关系。这个较短的词向量维度是多大呢?这个一般需要我们在训练时自己来指定。

词的分布式表示主要可以分为三类:
https://blog.****.net/aspirinvagrant/article/details/52928361

基于矩阵的分布表示:

基于矩阵的分布表示主要是构建“词-上下文”矩阵,通过某种技术从该矩阵中获取词的分布表示。矩阵的行表示词,列表示上下文,每个元素表示某个词和上下文共现的次数,这样矩阵的一行就描述了改词的上下文分布。常见的上下文有:
(1)文档,即“词-文档”矩阵;
(2)上下文的每个词,即“词-词”矩阵;
(3)n-元词组,即“词-n-元组”矩阵。
下图为共现矩阵:
from:https://www.jianshu.com/p/c1e4f42b78d7
[深度学习]-全面了解Word2Vec(详细)(NNLP->CBOW&skip-gram->hierarchical softmax&Negative sampling)
矩阵中的每个元素为词和上下文共现的次数,通常会利用TF-IDF、取对数等技巧进行加权和平滑。另外,矩阵的维度较高并且非常稀疏,可以通过SVD、NMF等手段进行分解降维,变为低维稠密矩阵。

基于聚类的分布表示

通过聚类手段构建词与其上下文之间的关系。代表模型:布朗聚类(Brown clustering)
https://blog.****.net/u014516670/article/details/50574147

基于神经网络的分布表示
大致有这么些:
a) Neural Network Language Model ,NNLM
b) Log-Bilinear Language Model, LBL
c) Recurrent Neural Network based Language Model,RNNLM
d) Collobert 和 Weston 在2008 年提出的 C&W 模型
e) Mikolov 等人提出了 CBOW( Continuous Bagof-Words)和 Skip-gram 模型
如今我们主要用到的是CBOW和Skip-gram模型。

[深度学习]-全面了解Word2Vec(详细)(NNLP->CBOW&skip-gram->hierarchical softmax&Negative sampling)
4.Skip-gram&CBOW

在word2vec出现之前,已经有用神经网络DNN来用训练词向量进而处理词与词之间的关系了。采用的方法一般是一个三层的神经网络结构(当然也可以多层),分为输入层,隐藏层和输出层(softmax层)

这个模型是如何定义数据的输入和输出呢?一般分为CBOW(Continuous Bag-of-Words 与Skip-Gram两种模型。

CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。比如下面这段话,我们的上下文大小取值为4,特定的这个词是"Learning",也就是我们需要的输出词向量,上下文对应的词有8个,前后各4个,这8个词是我们模型的输入。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可

[深度学习]-全面了解Word2Vec(详细)(NNLP->CBOW&skip-gram->hierarchical softmax&Negative sampling)

这样我们这个CBOW的例子里,我们的输入是8个词向量,输出是所有词的softmax概率(训练的目标是期望训练样本特定词对应的softmax概率最大),对应的CBOW神经网络模型输入层有8个神经元,输出层有词汇表大小个神经元。

隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某8个词对应的最可能的输出中心词时,我们可以通过一次DNN前向传播算法并通过softmax**函数找到概率最大的词对应的神经元即可。

Skip-Gram模型和CBOW的思路是反着来的,即输入是特定的一个词的词向量,而输出是特定词对应的上下文词向量。还是上面的例子,我们的上下文大小取值为4, 特定的这个词"Learning"是我们的输入,而这8个上下文词是我们的输出。

这样我们这个Skip-Gram的例子里,我们的输入是特定词, 输出是softmax概率排前8的8个词,对应的Skip-Gram神经网络模型输入层有1个神经元,输出层有词汇表大小个神经元。隐藏层的神经元个数我们可以自己指定。通过DNN的反向传播算法,我们可以求出DNN模型的参数,同时得到所有的词对应的词向量。这样当我们有新的需求,要求出某1个词对应的最可能的8个上下文词时,我们可以通过一次DNN前向传播算法得到概率大小排前8的softmax概率对应的神经元所对应的词即可。

以上就是神经网络语言模型中如何用CBOW与Skip-Gram来训练模型与得到词向量的大概过程。但是这和word2vec中用CBOW与Skip-Gram来训练模型与得到词向量的过程有很多的不同。

word2vec为什么 不用现成的DNN模型,要继续优化出新方法呢?最主要的问题是DNN模型的这个处理过程非常耗时。我们的词汇表一般在百万级别以上,这意味着我们DNN的输出层需要进行softmax计算各个词的输出概率的的计算量很大。有没有简化一点点的方法呢?

http://www.cnblogs.com/pinard/p/7160330.html

5.负采样(negative sampling)&层序softmax

负采样
[深度学习]-全面了解Word2Vec(详细)(NNLP->CBOW&skip-gram->hierarchical softmax&Negative sampling)

层序softmax
[深度学习]-全面了解Word2Vec(详细)(NNLP->CBOW&skip-gram->hierarchical softmax&Negative sampling)

https://blog.****.net/weixin_39527549/article/details/84784735

如果真的很难懂,那你看看视频吧,偶然看到的,还不错的!
https://www.bilibili.com/video/av18512944?from=search&seid=17346346286320315226

以上摘自不同的博主文章,已附上了链接,可以点进去了解详情!
以上整理部分,或有不对之处,还请指正!