我正在尝试在 pytorch 中重新实现 wor2vec。我根据原论文的代码实现了二次采样。但是,我试图了解如何在 Gensim 中实现子采样。我查看了源代码,但我没有掌握它是如何重新连接到原始论文的。
提前非常感谢。
我正在尝试在 pytorch 中重新实现 wor2vec。我根据原论文的代码实现了二次采样。但是,我试图了解如何在 Gensim 中实现子采样。我查看了源代码,但我没有掌握它是如何重新连接到原始论文的。
提前非常感谢。
关键线是:
if c.sample and word.sample_int < random_int32(&c.next_random):
continue
如果c.sample
测试是否完全启用了频繁词下采样(任何非零值)。
word.sample_int
是在词汇发现阶段预先计算的每个词汇单词的值。它本质上是应该保留一个单词的 0.0 到 1.0 的概率,但缩放到 0 到 (2^32-1)的范围。
大多数从不下采样的单词,只是在那里具有值 (2^32-1) - 因此,无论刚刚生成什么随机 int,该随机 int 都小于阈值,并且该单词被保留。
少数最常用的词在那里有其他缩放值,因此有时生成的随机 int 大于它们的sample_int
. 因此,在那个训练周期中,该词会通过 跳转continue
到句子中的下一个词。(这个词不会成为 的一部分effective_words
,这一次。)
.sample_int
您可以在以下位置和周围查看每个唯一词汇单词的值的原始分配和预计算: