Word2Vec的随机方面是什么?

快克

我正在用Gensim在几个不同的语料库上对单词进行矢量化处理,并获得的结果使我重新思考Word2Vec的功能。我的理解是Word2Vec是确定性的,并且单词在向量空间中的位置不会因训练而改变。如果“我的猫在奔跑”和“您的狗无法奔跑”是语料库中的两个句子,则“正在奔跑”(或其茎)的值似乎必须固定。

但是,我发现该值确实在各个模型中确实有所不同,并且当我训练模型时,单词会不断改变它们在向量空间中的位置。差异并不总是很有意义,但是它们确实表明存在一些随机过程。我在这里想念什么?

五条魔

我在这里引用Gensim常见问题解答对此有很好的说明

Q11:我已经使用完全相同的文本语料库反复训练了Word2Vec/ Doc2Vec/ etc模型,但是每次向量都不相同。是否有错误或我做错了?(* 2vec训练不确定性)

答案: * 2vec模型(word2vec,fasttext,doc2vec…)以随机初始化开始,然后大多数模式在训练过程中使用附加的随机化。(例如,训练窗被随机截断,这是对较高的较近词加权的一种有效方法。在默认的负采样模式下,会随机选择负样本。受sample参数控制的高频词的降采样是这些行为均在原始Word2Vec论文的算法描述中定义。)

即使所有这些随机性都来自伪随机数生成器,该生成器已被植入种子以提供可重现的随机数流(gensim默认情况下这样做),多线程训练的通常情况仍可以进一步更改文本的确切训练顺序示例,以及最终的模型状态。(此外,在Python 3.x中,每次重新启动Python解释器时,字符串的哈希值都是随机的-每次运行时都会改变词汇字典的迭代顺序,从而使相同的随机数-会在不同的发布中选择不同的单词。)

因此,可以预见的是,模型之间会因运行而异,甚至在相同的数据上进行训练。没有任何一个单词向量或文档向量要结束的“正确位置”:仅是在同一模型内与其他向量相距越来越远的距离和方向的位置。(通常,只有在交叉使用对比过程中一起训练过的向量才能在其坐标中变得可比。)

合适的训练参数应产生的模型在每次运行之间都大致相同。测试和评估过程应该容忍矢量位置的任何偏移,并且应该容忍模型的整体效用中的小“抖动”,这是由固有算法随机性引起的。(如果每次运行之间观察到的质量差异很大,则可能存在其他问题:数据太少,参数调整不当或评估方法中的错误/不足。)

您可以尝试通过workers=1将训练限制在一个线程中来强制确定性,如果在Python 3.x中使用PYTHONHASHSEED环境变量来禁用其通常的字符串哈希随机化,则可以尝试确定性但是培训将比使用更多线程慢得多。而且,您可能会以某种方式使底层算法的固有随机性/近似性模糊不清,这可能会使结果更脆弱,并取决于特定设置的运气。最好容忍一点抖动,并使用过多的抖动来指示数据或模型设置中其他地方的问题,而不是施加表面上的确定性。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章