自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型

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

自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型_第6张图片
自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型_第7张图片
CBOW模型流程举例
假设我们现在的Corpus是这一个简单的只有四个单词的document:{I drink coffee everyday}我们选coffee作为中心词,window size设为2也就是说,我们要根据单词"I","drink"和"everyday"来预测一个单词,并且我们希望这个单词是coffee。

自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型_第8张图片
自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型_第9张图片
自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型_第10张图片
自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型_第11张图片

自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型_第12张图片
自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型_第13张图片

你可能感兴趣的:(自然语言处理:CBOW(哈夫曼树)与Skip-Gram模型)