【表示学习01】word2vec解读

1.参考文献

1.word2vec原理推导
2.word2vec原理-刘建平
3.word2vec、DeepWalk、node2vec对比
4.自己动手写word2vec
5.word2vec的输入是one-hot编码

2.思路和关键点解读

2013年,Google团队发表了word2vec工具。word2vec工具主要包含两个模型:
跳字模型(skip-gram)和连续词袋模型(continuous bag of words,简称CBOW);
以及两种高效训练的方法:负采样(negative sampling)和层序softmax(hierarchical softmax);

值得一提的是,word2vec词向量可以较好地表达不同词之间的相似和类比关系。

word2vec是个很棒的工具,目前有两种训练模型(CBOW和Skip-gram),两种加速算法(Hierarchical Softmax与Negative Sampling)

2.1 word2vec的想法是怎么来的?

对词的词向量表示并不是word2vec的发明,之前很早就有相关方法。对于文本中词的表示,我们的思维受到传统“查字典”的影响,直观上就是建立一个类似于词典的参照表,对每个词进行顺序编码,而后就可以得到词的向量表示。这里面最直观的就是one hot representation,也就是“0/1编码”。这种方法当然可以,但是很显然这样表示过于稀疏,对于存储以及后续相关处理工作都带来了很大不便,因此这一方法可行但是并不适用。

因此我们进一步思考:one hot representation是因为表示维度过高而显得不适用,因此我们需要的表示应当是基于较低维度的。这比较符合机器学习中的“降维”的思路,就是用较低的维度来表示目标对象的信息。在降维的同时,我们还希望在这个降维后的新的空间,具有相似含义的词的词向量之间距离相近。word2vec的成果Distributed representation就是实现了这样的词向量表示。

2.2 word2vec的模型架构从哪儿来的??

【表示学习01】word2vec解读_第1张图片

在word2vec出现之前,已经有用神经网络DNN来用训练词向量进而处理词与词之间的关系了。采用的方法一般是一个三层的神经网络结构(当然也可以多层),分为输入层,隐藏层和输出层(softmax层)。这个模型是如何定义数据的输入和输出呢?一般分为CBOW(Continuous Bag-of-Words)Skip-Gram两种模型:
  CBOW模型的训练输入是某一个特征词的上下文相关的词对应的词向量,而输出就是这特定的一个词的词向量。由于CBOW使用的是词袋模型,因此这8个词都是平等的,也就是不考虑他们和我们关注的词之间的距离大小,只要在我们上下文之内即可。
  这样我们这个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来训练模型与得到词向量的过程有很多的不同!!之所以不使用现成的DNN模型,最主要的问题是DNN模型的这个处理过程非常耗时。我们的词汇表一般在百万级别以上,这意味着我们DNN的输出层需要进行softmax计算各个词的输出概率的的计算量很大。

2.3 word2vev是如何改进已有的DNN模型的?

上面在介绍DNN模型时已经解释了,DNN最大的问题在于从隐藏层到输出的softmax层的计算量很大,因为要计算所有词的softmax概率,再去找概率最大的值。因此模型的主要计算量集中在“从隐藏层到输出层”这一部分。因此改进主要也是针对这一部分进行的。

【1】改进点1:首先,对于从输入层到隐藏层的映射,没有采取神经网络的线性变换加激活函数的方法,而是采用简单的对所有输入词向量求和并取平均的方法。比如输入的是三个4维词向量:(1,2,3,4),(9,6,11,8),(5,10,7,12) ,那么我们word2vec映射后的词向量就是(5,6,7,8) ;
【2】改进点2:第二个改进就是从隐藏层到输出的softmax层这里的计算量个改进。为了避免要计算所有词的softmax概率,word2vec采样了霍夫曼树来代替从隐藏层到输出softmax层的映射。这个哈夫曼树具体构建是基于各个词在语料库中的出现次数。定义的是左子树为负类(值为1),右子树为正类(值为0)。
【表示学习01】word2vec解读_第2张图片
在霍夫曼树中,隐藏层到输出层的softmax映射不是一下子完成的,而是沿着霍夫曼树一步步完成的,因此这种softmax取名为"Hierarchical Softmax"。如何“沿着霍夫曼树一步步完成”呢?在word2vec中,我们采用了二元逻辑回归的方法,即规定沿着左子树走,那么就是负类(霍夫曼树编码1),沿着右子树走,那么就是正类(霍夫曼树编码0)。判别正类和负类的方法是使用sigmoid函数,即:
【表示学习01】word2vec解读_第3张图片
也就是说:
step1.基于词出现的统计次数,我们构建了哈夫曼树;
step2.通过定义左子树为负类,右子树为正类,则从根节点出发到一个词的路径的各段对应了01表示;
step3.对于各段的01表示,将其与二分类问题挂钩,借用sigmoid函数的概率表示,则整条路径的概率可以表示为下式4.3的连乘形式:

【表示学习01】word2vec解读_第4张图片
我们要知道,上面的概率表示仅仅是语料库C中一个词的概率表示!而对于语料库来说,目标函数当然表示的是语料库中各个词的条件概率的乘积:
在这里插入图片描述
对上式连乘形式取对数操作,则有:
在这里插入图片描述

怎么理解上面这个公式呢:句子的概率等于句子中各个词的条件概率的连乘;而其中各个词的条件概率是基于该词在语料库中的上下文计算得到的。最大化这个连乘公式,就意味着最大化句子的概率。

因为上面我们借助哈夫曼树得到了单个词的条件概率的表示形式,因此上面的公式就变为:
【表示学习01】word2vec解读_第5张图片

2.4目标函数是怎么计算的?

现在目标函数的表示形式弄清楚了,下面就是这么进行计算的问题。
为了便于推导,将目标函数中划线部分提出来,表示为:
在这里插入图片描述

对于目标函数的计算,这里要用到“随机梯度上升法”。具体做法就是: 每取一个样本(指的是一个词以及它前后c个,共2c个邻居文本词),就对目标函数中所有相关参数进行一次更新,函数里的主要参数有Xw和theta,因此目标函数针对这些参数求偏导:

【表示学习01】word2vec解读_第6张图片

还需要注意的一点在于:我们知道这里的Xw是词w的2c个邻居文本词的词向量的累加,因此当基于梯度进行更新时,更新的也就是累加词向量,也就是将梯度贡献到每个邻居文本词的词向量上:
这里插入图片描述
因此基于COBW模型的更新步骤为:
【表示学习01】word2vec解读_第7张图片

2.4 skip-gram模型

skip-gram模型目标是:已知当前词w,对w上下文中的词(2c个)进行预测。
其与COBW模型从结构上看为相反的形式,因此推导过程也基本一致,仅因为条件概率的表示形式相反,因此使得推导中的表示形式略有差异:
【表示学习01】word2vec解读_第8张图片
包括采用的梯度上升法都是一样的:
【表示学习01】word2vec解读_第9张图片
【表示学习01】word2vec解读_第10张图片
skip-gram的更新流程为:
【表示学习01】word2vec解读_第11张图片

总结一下:hierarchical softmax相较于神经概率模型的区别在于:从结构上是将词w周围2c个词的词向量进行叠加作为输入,而后优化的目标函数是基于语料库的各词的条件概率连乘表示的;条件概率的表示又基于哈夫曼树,通过定义哈夫曼树上的二分类,利用logistic函数表示分支的概率,进而连乘表示出目标词的条件概率。

因此从宏观上看,hierarchical softmax的目标就是最大化句子基于语料库的条件概率,这是符合常规思维的:概率最大的最可行;n-gram从将关联词区域限制在2c开始,借助哈夫曼树和logistic回归,巧妙定义了这一概率的表示形式,将模型的求解归纳为目标函数的最优化问题;在最优化的过程中,我们同时得到了由参数theta表示的词向量(这也是为什么说词向量是语义模型的副产品)

<***************************************************************************************************************************************>

2.5 基于Negative Sampling的模型

Negative Sampling是区别于Hierarchical softmax的方法,功能上是等价的。它不再使用哈夫曼树,而是采用随机负采样,可以大幅提高计算性能。
从本质上讲,Negative Sampling相当于将Hierarchical softmax中的哈夫曼树部分替换成了随机负采样,我们知道后者中基于哈夫曼树构造的目标函数,实际上就是01二分类问题概率的连乘,而在Negative Sampling中,对于一个词w,不是基于哈夫曼树生成路径进而得到概率连乘,而是直接基于w的上下文邻居文本词集,从中随机采样,得到的就是w的负样本(这是显然的嘛,只有w是目标词,那么其他的自然是负类样本)
【表示学习01】word2vec解读_第12张图片
【表示学习01】word2vec解读_第13张图片
后面优化方法也是梯度上升法,不再赘述,可参见文档。

而关于负样本的选取方法,本质上来说,类似于轮盘赌的思想:

【表示学习01】word2vec解读_第14张图片
【表示学习01】word2vec解读_第15张图片

你可能感兴趣的:(机器学习,深度学习)