首页 > 解决方案 > Gensim Word2Vec模型在相同环境和平台中相同源代码的两个编辑器中的不同结果?

问题描述

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

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

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

我应该选择哪个结果,为什么?

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

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

任何建议表示赞赏。

在 Spyder 中获得的结果:

在此处输入图像描述

使用 Sublime Text 获得的结果: 在此处输入图像描述

标签: pythonpython-3.xgensimword2vec

解决方案


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

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

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

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

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

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

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


推荐阅读