word2vec原理(转)

word2vec原理(转)
 比如下图我们将词汇表里的词用"Royalty",“Masculinity”, "Femininity"和"Age"4个维度来表示,King这个词对应的词向量可能是(0.99,0.99,0.05,0.7)。当然在实际情况中,我们并不能对词向量的每个维度做一个很好的解释。
 word2vec原理(转)
 2. CBOW与Skip-Gram用于神经网络语言模型
 word2vec原理(转)
 word2vec原理(转)
 3. word2vec基础之霍夫曼树
    word2vec也使用了CBOW与Skip-Gram来训练模型与得到词向量,但是并没有使用传统的DNN模型。最先优化使用的数据结构是用霍夫曼树来代替隐藏层和输出层的神经元,霍夫曼树的叶子节点起到输出层神经元的作用,叶子节点的个数即为词汇表的小大。 而内部节点则起到隐藏层神经元的作用。

具体如何用霍夫曼树来进行CBOW和Skip-Gram的训练我们在下一节讲,这里我们先复习下霍夫曼树。

霍夫曼树的建立其实并不难,过程如下:

输入:权值为(w1,w2,…wn)的n个节点

输出:对应的霍夫曼树

1)将(w1,w2,…wn)看做是有n棵树的森林,每个树仅有一个节点。

2)在森林中选择根节点权值最小的两棵树进行合并,得到一个新的树,这两颗树分布作为新树的左右子树。新树的根节点权重为左右子树的根节点权重之和。

3) 将之前的根节点权值最小的两棵树从森林删除,并把新树加入森林。

4)重复步骤2)和3)直到森林里只有一棵树为止。

下面我们用一个具体的例子来说明霍夫曼树建立的过程,我们有(a,b,c,d,e,f)共6个节点,节点的权值分布是(20,4,8,6,16,3)。

首先是最小的b和f合并,得到的新树根节点权重是7.此时森林里5棵树,根节点权重分别是20,8,6,16,7。此时根节点权重最小的6,7合并,得到新子树,依次类推,最终得到下面的霍夫曼树。
    word2vec原理(转)
    
    我们讲到了使用神经网络的方法来得到词向量语言模型的原理和一些问题,现在我们开始关注word2vec的语言模型如何改进传统的神经网络的方法。由于word2vec有两种改进方法,一种是基于Hierarchical Softmax的,另一种是基于Negative Sampling的。本文关注于基于Hierarchical Softmax的改进方法,在下一篇讨论基于Negative Sampling的改进方法。
    1. 基于Hierarchical Softmax(分层softmax)的模型概述
    word2vec原理(转)
    word2vec原理(转)
    word2vec原理(转)同样的方法,可以求出xw的梯度表达式如下:
∂L∂xw=∑j=2lw(1−dwj−σ(xTwθwj−1))θwj−1
    有了梯度表达式,我们就可以用梯度上升法进行迭代来一步步的求解我们需要的所有的θwj−1和xw。
    3. 基于Hierarchical Softmax的CBOW模型
    word2vec原理(转)
    word2vec原理(转)
    4. 基于Hierarchical Softmax的Skip-Gram模型
    word2vec原理(转)
    5. Hierarchical Softmax的模型源码和算法的对应 
    这里给出上面算法和word2vec源码中的变量对应关系。

在源代码中,基于Hierarchical Softmax的CBOW模型算法在435-463行,基于Hierarchical Softmax的Skip-Gram的模型算法在495-519行。大家可以对着源代码再深入研究下算法。

在源代码中,neule对应我们上面的e, syn0对应我们的xw, syn1对应我们的θij−1, layer1_size对应词向量的维度,window对应我们的c。

另外,vocab[word].code[d]指的是,当前单词word的,第d个编码,编码不含Root结点。vocab[word].point[d]指的是,当前单词word,第d个编码下,前置的结点。

以上就是基于Hierarchical Softmax的word2vec模型,下一篇我们讨论基于Negative Sampling的word2vec模型。

word2vec原理(转)
2. 基于Negative Sampling的模型概述
word2vec原理(转)
word2vec原理(转)
word2vec原理(转)
word2vec原理(转)
word2vec原理(转)
word2vec原理(转)