【问题标题】:How does Gensim implement subsampling in Word2Vec?Gensim 如何在 Word2Vec 中实现子采样?
【发布时间】:2020-03-19 10:28:45
【问题描述】:

我正在尝试在 pytorch 中重新实现 wor2vec。我根据原论文的code实现了二次采样。但是,我试图了解如何在 Gensim 中实现子采样。我查看了source code,但我没有掌握它是如何重新连接到原始论文的。

非常感谢。

【问题讨论】:

    标签: gensim word2vec subsampling


    【解决方案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,该随机 int 小于阈值,并且该单词被保留.

    少数最常用的词在那里有其他缩放值,因此有时生成的随机 int 大于它们的sample_int。因此,在那个训练周期中,该词通过continue 跳到句子中的下一个词。 (这一次不会成为effective_words 的一部分。)

    您可以看到.sample_int 值的原始分配和预计算,每个唯一的词汇,在和周围:

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

    【讨论】:

    • 非常感谢@gojomo的解释
    猜你喜欢
    • 2020-07-11
    • 2020-03-05
    • 2016-09-02
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2021-01-10
    • 2015-10-04
    • 1970-01-01
    相关资源
    最近更新 更多