4-3 item2vec依赖模型word2vec之skip gram数学原理介绍

1. 问题抽象

skip gram是已知中间词,最大化它相邻词的概率。

与CBOW的不同:CBOW的时候,是选取一次负采样;而这里对于中间词的上下文的每一个词,每一次都需要进行一个负采样。

下面看一下条件概率:

与之前的CBOW大体形式一样,不同之处:

(1)隐含层输出的是中间词对应的词向量;而CBOW是输出的所有中间词上下文词向量对应的和;

(2)theta:上下文的词,或者是上下文的词选出来的负样本的词与输出层之间的全连接;

2. 损失函数

采用log损失函数。

但是,可以发现如果按照这个loss去对v(w)或者theta求偏导,在每一轮迭代的时候,只能够对词向量v(w)进行一次迭代。这里需要进行上下文窗口次的负采样才能对一个词的词向量进行迭代。显然,效率有些低。

在真正的word2vec实现的时候,需要变换一下思路:

同样也是基于像CBOW一样的思想,已知上下文(Wc)的情况下,最大化中间词。但是这里上下文的每一个词(Wc)都是独立的,不像CBOW是对上下文中所有的词进行累加。

下面重新看一下损失函数:

3. 训练主流程

1. 对于中心词上下文中的每一个词,都需要选取一次负采样,也就是构造出正负样本;

2. 计算loss对于theta以及Wc的偏导;

计算偏导也是有顺序的,像CBOW首先更新loss对于Wc的偏导,因为这个偏导是最后我们需要更新词向量偏导的 1/n (n负采样的数目 + 正样本 + 1);

3. 更新Wc对应的词向量;

skip gram与CBOW相比,每一次负采样skip gram只能更新一个词对应的词向量;而CBOW在一次负采样,可以更新n(n指窗口)个词。

4. 负采样的算法

假设词典(训练样本中所有的词)中有n个词,每一个词都会计算出一个长度,这个长度是一个0-1之间的长度,有的短,有的长,所有词的长度加起来=1。

每一次的长度计算:

分子:该单词在所有语料中出现的次数;幂次:相当于做了一个平缓;

分母:语料中所有词出现的次数累加和。

然后,初始一个非常大的数,源码中采用10^8,将0-1进行等分。然后每一段都会对应一个词的值域。

eg:m0属于w1,m5属于w2。

在每次进行负采样的过程中,会随机一个0-M之间的数,随机完数字之后,也就知道了随机的哪一个词。eg:随机到了1,那么就是w1词。

注意:如果随机到的词是中心词,那么就跳过去,再进行一次随机。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章