【问题标题】:Different results of Gensim Word2Vec Model in two editors for the same source code in same environment and platform?Gensim Word2Vec模型在相同环境和平台中相同源代码的两个编辑器中的不同结果?
【发布时间】:2019-05-06 05:33:48
【问题描述】:

我正在尝试在 python 3.7、Windows 10 机器中应用在库 gensim 3.6 中实现的 word2vec 模型。在执行预处理后,我有一个句子列表(每个句子都是一个单词列表)作为模型的输入。

我在Anaconda's Spyder 和Sublime Text 编辑器中计算了结果(使用model.wv.most_similar 获得了给定输入词的10 个最相似的词)。

但是,对于在两个编辑器中执行的相同源代码,我得到了不同的结果。

我需要选择哪个结果以及为什么?

我指定了通过在 spyder 和 sublime 文本中运行相同代码获得的结果的屏幕截图。我需要获得10个最相似词的输入词是#universe#

我真的很困惑如何选择结果,基于什么?另外,我最近开始学习 Word2Vec。

欢迎提出任何建议。

在 Spyder 中获得的结果:

使用 Sublime Text 获得的结果:

【问题讨论】:

标签: python python-3.x gensim word2vec


【解决方案1】:

Word2Vec 算法在内部使用随机化。此外,当(通常为了提高效率)训练分布在多个线程上时,会引入一些额外的呈现顺序随机化。这意味着即使在完全相同的环境中,两次运行也会产生不同的结果。

如果训练是有效的——足够的数据、适当的参数、足够的训练次数——所有这些模型在处理单词相似度之类的事情时都应该具有相似的质量,即使实际的单词会在不同的地方。单词的相对排名会有一些抖动,但结果应该大致相似。

您的结果与 'universe' 模糊相关,但并不令人印象深刻,而且每次运行的结果差异如此之大,这表明您的数据、参数或训练数量可能存在问题。 (我们预计结果会有所不同,但不会太大。)

你有多少数据? (Word2Vec 受益于大量不同的单词用法示例。)

您是否通过使min_count 低于其默认值5 来保留稀有词? (这样的词往往得不到好的向量,还会干扰附近词向量的改进。)

您是否正在尝试制作非常大的向量? (较小的数据集和较小的词汇表只能支持较小的向量。太大的向量会导致“过度拟合”,即记住数据的特性,而不是学习通用模式。或者,它们允许模型在许多不同的非竞争方向上继续改进,因此模型的最终任务/相似性结果可能与每次运行的结果大不相同,即使每个模型在其内部单词预测任务上的表现都差不多。)

您是否坚持使用默认的epochs=5,即使是小数据集? (一个大而多样的数据集需要更少的训练通道 - 因为所有单词都出现了很多次,无论如何都在整个数据集中。如果你想从更薄的数据中提取结果,更多 epochs 可能会有所帮助 - 但没有那么多就像更多样化的数据一样。)

【讨论】:

  • 感谢您的建议。但我有 1 个查询。正如您提到的,w2v 最初处理随机化,将模型运行 10 次并取 10 次运行的平均值是否有效,类似于机器学习领域中使用的交叉验证。
  • 是的。我已将 min_count 设置为 5
  • 比平均 10 次单独运行要好得多的是找到使 2 次运行非常相似的参数,这可能意味着 epochs training-passes 值大 10 倍,或者向量要小得多大小,或其他匹配任何数据限制的东西。
  • 我对 w2v 模型知之甚少。训练量是什么意思?大尺寸和小尺寸矢量有什么区别?这是否取决于词汇量的大小。是否需要在每次运行中将 epoch 的值设置为 5?同样,广义上什么是更薄的数据?
猜你喜欢
  • 2018-08-30
  • 1970-01-01
  • 2016-04-22
  • 1970-01-01
  • 1970-01-01
  • 2021-01-27
  • 2020-08-01
  • 2017-10-06
  • 1970-01-01
相关资源
最近更新 更多