【发布时间】:2020-03-19 10:28:45
【问题描述】:
我正在尝试在 pytorch 中重新实现 wor2vec。我根据原论文的code实现了二次采样。但是,我试图了解如何在 Gensim 中实现子采样。我查看了source code,但我没有掌握它是如何重新连接到原始论文的。
非常感谢。
【问题讨论】:
标签: gensim word2vec subsampling
我正在尝试在 pytorch 中重新实现 wor2vec。我根据原论文的code实现了二次采样。但是,我试图了解如何在 Gensim 中实现子采样。我查看了source code,但我没有掌握它是如何重新连接到原始论文的。
非常感谢。
【问题讨论】:
标签: gensim word2vec subsampling
关键是:
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 值的原始分配和预计算,每个唯一的词汇,在和周围:
【讨论】: