Gensim如何在Word2Vec中实现子采样?

时间:2019-11-23 16:19:38

标签: gensim word2vec subsampling

我正在尝试在pytorch中重新实现wor2vec。我根据原始论文的code进行了二次抽样。但是,我试图了解在Gensim中如何实现子采样。我看了source code,但没有设法掌握它与原始纸张的重新连接方式。

非常感谢。

1 个答案:

答案 0 :(得分:1)

关键行是:

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

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

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

大多数从未降采样的单词在那里仅具有值(2 ^ 32-1)-因此,无论刚刚生成了什么随机整数,该随机整数都小于阈值,并且保留了该单词

少数几个最常见的词在那里还有其他标度值,因此有时生成的随机int大于其sample_int。因此,在一个训练周期中,该词通过continue跳过了句子中的下一个词。 (这一次,这个单词没有成为effective_words的一部分。)

您可以在以下位置看到每个唯一词汇单词.sample_int的原始赋值和预先计算:

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