【发布时间】:2021-12-31 11:24:25
【问题描述】:
我在这里看到https://radimrehurek.com/gensim/models/word2vec.html 类 Word2Vec 有一个名为 shrink_windows 的参数,我正在尝试了解它如何用于 CBOW 架构。具体做什么?是否使用填充来确保具有相同长度的最终上下文?
【问题讨论】:
我在这里看到https://radimrehurek.com/gensim/models/word2vec.html 类 Word2Vec 有一个名为 shrink_windows 的参数,我正在尝试了解它如何用于 CBOW 架构。具体做什么?是否使用填充来确保具有相同长度的最终上下文?
【问题讨论】:
从未使用过填充。上下文窗口始终受到您提供的文本中可用单词数量的限制。 (因此,对于文本中的第一个词,它的“之前”将没有上下文词。对于最后一个词,“之后”将没有上下文词。)
shrink_windows=True 设置是默认设置,与 Google 发布的原始 word2vec.c 代码的行为以及相关算法的其他相关实现相匹配 - 包括我上次查看的 Facebook 的 FastText。
对于正在考虑用于训练预测的任何给定中心目标词,而不是使用用户指定的完整 window,这些实现(以及带有 shrink_windows=True 的 Gensim)选择其他一些随机窗口大小,直到配置的 @987654325 @。
因此,当您的模型配置为 window=5, shrink_windows=True 时,实际的紧密训练循环使用大小从 1 到 5 的窗口。这是自算法推出以来大多数 word2vec 实现的工作方式,并且这种行为的目的是以一种可以快速应用的方式更多地加权更接近的单词。 (通过删除一些较远的词,有时会加快训练速度。如果相反,较远的词的影响因某些因素而降低,则需要额外的计算,从而减慢训练速度。 )
一般来说,对于真正的自然语言来源的训练文本,此默认设置可能是正确的,其中接近度是单词相关性的强烈信号。
另一方面,一些 word2vec 语料库不是真正的语言,而是类似单词的标记分组——而两个“单词”彼此相邻的事实是某些数据提取选择的任意结果。在这种情况下,您可能不想更多地权衡近邻的影响力。这时候shrink_windows=False 可能值得一试。
(在这种情况下,您可能还想查看 Gensim 参数 ns_exponent,它允许您更改在早期 word2vec 实现中固定为 0.75 的另一个参数。链接自ns_exponent 参数文档更详细地描述了哪些情况可能受益于非默认值,以及可以尝试的其他值。)
【讨论】:
pytorch 中的某些内容时遇到问题,可能需要向pytorch 专家提出单独的具体问题,或者研究现有的pytorch CBOW 实现以获得想法。 (一个必须已经存在,对吗?)但请注意,在 Gensim 和其他 word2vec 实现中,随机较小的有效窗口(在 Gensim 源代码中的变量 reduced_windows 和原始 word2vec.c 代码中的简单 b 中)是每个中心上下文单词重新采样,而不是每个“句子”(文本)或批次。