我正在尝试在pytorch中重新实现wor2vec。我根据原始论文的code进行了二次抽样。但是,我试图了解在Gensim中如何实现子采样。我看了source code,但没有设法掌握它与原始纸张的重新连接方式。
非常感谢。
答案 0 :(得分:1)
关键行是:
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大于其sample_int
。因此,在一个训练周期中,该词通过continue
跳过了句子中的下一个词。 (这一次,这个单词没有成为effective_words
的一部分。)
您可以在以下位置看到每个唯一词汇单词.sample_int
的原始赋值和预先计算: