自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型
gensim库中的word2vev中模型主要使用了CBOW(哈夫曼树)与Skip-Gram模型。CBOW表示基于上下文来预测目标词,即输入是2c个上下文词(c表示窗口大小),输出是目标词的概率;Skip-Gram则是恰恰相反,输入是当前的目标词,输出则是上下文词的概率。
在确定了输入输出之后,其实训练的方式也就很明显了,(例如CBOW)输入层经过隐藏层最后softmax输出所有词的概率,然后反向传播梯度下降decrease loss。但这其中有一个很大的问题:从隐藏层到输出的softmax层的计算量很大,因为要计算所有词的softmax概率,再去找概率最大的值。这样的性能显然是对于一个embedding操作来讲是得不偿失的,因此,word2vec对这里做了很精妙的优化,本文首先来介绍基于哈夫曼树的word2vec。
由哈夫曼树的建树规则不难知道,每个叶子节点代表一个目标词,同时每个目标词也有一条路径代表了其编码规则。在word2vec中,我们采用逻辑回归的方法,规定沿着左子树走,那么就是负类(霍夫曼树编码1),沿着右子树走,那么就是正类(夫曼树编码0)。判别正类和负类的方法是使用sigmoid函数,对于n1-n2-n3-n4这条路径来讲,神经网络训练的目标就是要让走这条路径的可能性最大,这里我们可以先给出似然函数:
这里的似然函数其实就是对每一步的sigmoid求积,而我们的目标就是让这个概率最大,即通过最大似然的方式来优化这个函数。为了给出其一般过程,我们首先做一些定义:
以以下这一案例来进行讲解:str=“我喜欢观看世界足球”,目标词W为足球,目的是优化这个概率函数,求得适当的权重。
*