Word2Vec理解

Skip-gram模型和CBOW模型

Skip-gram模型

跳字模型假设基于某个词来生成它在文本序列周围的词,假设文本序列“the man loves his son”,给定中心词loves,窗口大小为2,生成其他四个词的概率就是:P(the, man, his, son | loves) = P(the | loves) P(man | loves) P(his | loves) * P(son | loves)

每一个条件概率的计算公式为:(其中wc为中心词,wo为背景词,其实就是做了一个softmax)

跳字模型的似然函数其实就是给定任意中心词生成所有背景词的概率:

训练中我们通过最大化似然函数来学习模型参数,即最大似然估计。这等价于最小化以下损失函数

如果使用随机梯度下降,在每一次迭代里我们随机采样一个较短的子序列来计算有关该子序列的损失,然后计算梯度来更新模型参数。

我们先不考虑上式前面的两个求和,只考虑log的部分

通过微分,我们可以得到梯度

我们可以看到,仅仅计算log的部分梯度的开销就是O(V)(词典大小).

CBOW模型

连续词袋模型与跳字模型类似,区别在于,连续词袋模型是基于中心词上下文的背景词来生成中心词,还是以"the man loves his son"为例子,给定背景词生成中心词(loves)的条件概率是:P(loves | the, man, his, son)
因为背景词有多个,我们将其背景词词向量取个平均(也就是将多个词转化成了一个词)

我们设Wo为平均词向量,上式简化成

那么由背景词生成任意中心词的概率也就是:

最大化上式也就是最小化以下损失函数

不考虑求和,只考虑log,也就是只考虑下式

通过求梯度,得

我们可以看到,仅仅计算log的部分梯度的开销就是O(V)(词典大小).

总结

为什么复杂度会如此之高?其实原因就是softmax。因为我们求概率的时候用到了softmax,而softmax的运算是基于整个词典大小的(这样才能使得计算的概率相加为1)。

近似训练:负采样、层序softmax(以skip-gram为例)

负采样

负采样通过采样并添加负类样本使得目标函数有意义,对于当前窗口,我们采样k个未出现在窗口内的词作为噪声次。则联合概率近似表示为

损失函数为:

梯度计算不再写,与之前的求导类似,不再赘述。到这里我们可以看到,loss不再与词典大小有关,而是与噪声词数目有关,降低了计算的复杂度。

层序softmax

直接copy文档的了

Last modification:February 4th, 2021 at 03:55 pm
如果觉得我的文章对你有用,请随意赞赏