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 实现了子采样,但我没能理解它是如何重新连接到原始论文的。
非常感谢。
关键一行是:
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
值的原始分配和预先计算,每个独特的词汇表单词,在以下位置和周围:
我正在尝试在 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 实现了子采样,但我没能理解它是如何重新连接到原始论文的。
非常感谢。
关键一行是:
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
值的原始分配和预先计算,每个独特的词汇表单词,在以下位置和周围: