Gensim如何在Word2Vec中实现二次采样?

How does Gensim implement subsampling in Word2Vec?

我正在尝试在 pytorch 中重新实现 wor2vec。我根据 code of the original paper. However, I am trying to understand how subsampling is implemented in Gensim. I looked at the source code 实现了子采样,但我没能理解它是如何重新连接到原始论文的。

非常感谢。

关键一行是:

https://github.com/RaRe-Technologies/gensim/blob/e391f0c25599c751e127dde925e062c7132e4737/gensim/models/word2vec_inner.pyx#L543

    if c.sample and word.sample_int < random_int32(&c.next_random):
        continue

If c.sample 测试是否完全启用了频繁词下采样(任何非零值)。

word.sample_int 是在词汇发现阶段预先计算的每个词汇的值。它本质上是一个词应该保留的 0.0 到 1.0 的概率,但缩放到 0 到 (2^32-1) 的范围。

大多数从未被下采样的词,在那里只有值 (2^32-1) - 所以无论刚刚生成什么随机整数,随机整数都小于阈值,并且词被保留。

几个最常用的单词在那里有其他缩放值,因此有时生成的随机整数大于它们的 sample_int。因此,在那个训练周期中,该词通过 continue 跳到句子中的下一个词。 (这一次这个词没有成为 effective_words 的一部分。)

您可以看到 .sample_int 值的原始分配和预先计算,每个独特的词汇表单词,在以下位置和周围:

https://github.com/RaRe-Technologies/gensim/blob/e391f0c25599c751e127dde925e062c7132e4737/gensim/models/word2vec.py#L1544