NLP笔记之word2vec算法(2)--Hierarchical Softmax原理+数学推导

目录

1 基于Hierarchical Softmax的模型

2 基于Hierarchical Softmax的数学推导

3 基于Hierarchical Softmax的CBOW模型

4 基于Hierarchical Softmax的Skip-gram模型

 


上一篇Skip-gram推导的文章中最后提到求概率时需要计算softmax,如果词典的大小V十分庞大的时候,整个分母需要计算中心词和词典中所有词的乘积,这显然是个非常庞大的计算量,因此Wordvec中提出了两种解决方案,一种是基于Hierarchical softmax的解决方案,一种是基于Negative sampling的解决方案。本文是讲解的是Hierarchical softmax的解决方案,在后一篇文章中讲解基于Negative sampling的解决方案。

1 基于Hierarchical Softmax的模型

我们先回顾下上篇文章中所讲到的部分。

这里面分为三层,输入层,隐藏层,输出层,我们从前一篇文章中知道,Hidden layer就是word embedding,然后经过一个W‘ 矩阵,得到一个词典大小维度的向量,最后再经过一个softmax,得出最后所有单词的概率分布。这里面存在的就是在于如果词典大小V如果很大的情况下,计算从Hidden layer到Output layer的计算量很大,因为需要计算词典中所有的词。

因为Word2vec对这个模型进行了改进和优化。首先对于输入层到隐藏层的部分,没有再采用神经网络所采用的线性变化+激活函数的方式了,而是仅仅采用对输入的词向量进行求和并取平均值的方法,这无疑省略了很多计算,最后使得输入的向量无论是一个中心词向量还是一堆context向量,最后所得到的结果都是一个向量。举个例子,比如输入的是三个5维的词向量,(1,2,3,4,5),(2,0,3,1,1),(3,4,0,1,0),那么word2vec对它们就是求和取平均值,

最后所得到的向量为(2,2,2,2,2),所以结果是将多个向量变成了一个向量。

第二个改进是从隐藏层到输出层的softmax的改进,为了避免需要计算所有词向量,word2vec采用了hierarchical softmax的方式,简单来说就是采用哈夫曼树(也叫作霍夫曼树)建树的方式来计算softmax,下面会详细介绍如何采用哈夫曼树来进行softmax的计算和建模。

 

因为我们输出层所要做的是要求出词典的所有词的概率,最后从中选出所需要的词语作为输出。因为我们知道词典的大小为V,所以如下图所示:

我们将叶节点个数设为V,这就对应着我们最后的V个概率值。先前的模型计算概率是在分母部分计算所有词向量的乘积,在哈夫曼树中,我们要计算概率只需要从根节点沿着树往下到叶节点为止即可,这样对于每个叶节点的概率,需要计算的量直接从V 减少到了log2 V,因为这是基于二叉树的性质。

比如对于w_{2}来说,只需要计算从根节点到w_{2}节点之间节点的乘积即可,省去了很多计算量。在这里根节点的值就是输入的向量求和取平均值的那个向量,所有叶子节点对应的就是输出层的V个神经元,叶子节点的个数就是词典的大小V。对应于上面的神经网络图来说,Input layer就是求和取平均值的向量,隐藏层的神经元就是哈夫曼树中所有的内部节点,输出层的神经元就是所有叶子节点。因为在哈夫曼树中,隐藏层到输出层的softmax映射不是一下子分母求和完成的,而是沿着哈夫曼树一步步向下延伸所求得的,因此这种softmax叫做“Hierarchical softmax” ,也叫层级softmax。

那么如何沿着哈夫曼树来计算概率呢? 在Word2vec中,所采用的是二元逻辑回归的方式,它们规定沿着左子树走,就定义为负类(哈夫曼树的编码为1),沿着柚子树走,就定义为正类(哈夫曼树的编码为0)。计算正类和负类所采用的计算方式是sigmoid函数,即

                                                          

那么很容易理解 P(-) = 1 - P(+),因为哈夫曼树是二叉树,要么就往左边走,不然就往右边走。

上面公式中的 x_{w} 就是 哈夫曼树中的内部节点的词向量,这个 x_{w} 是内部所有节点的词向量,也就是说计算P(+)或者P(-)的概率时,对于任意一个内部节点,都是使用 x_{w} 作为词向量,\theta 就是我们需要在训练过程中所要更新的逻辑回归的参数, \theta 是对于任意一个内部节点都不一样的,这点和 x_{w} 是不一样的。

当计算到某一个内部节点时,根据P(+)和P(-)的值的大小来决定是左子树走还是往右子树走,谁大就往哪边走,而控制P(−),P(+)谁的概率值大的因素一个是当前节点的词向量

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值