Gensim Word2Vec模型在两个编辑器中针对相同环境和平台中的相同源代码的不同结果?

时间:2018-12-04 17:59:29

标签: python python-3.x gensim word2vec

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

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

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

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

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

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

任何建议都值得赞赏。

在Spyder中获得的结果:

enter image description here

使用Sublime Text获得的结果: enter image description here

1 个答案:

答案 0 :(得分:1)

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

如果训练有效(足够的数据,适当的参数,足够的训练通过),则在进行类似单词的操作时,所有这些模型都应具有相似的质量,即使实际的单词位于不同的位置。单词的相对排名会有些抖动,但是结果应该大致相似。

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

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

通过将min_count设置为低于默认值5来保留稀有单词吗? (此类单词往往得不到良好的向量,并且还会干扰附近单词的向量的改进。)

您是否要制作很大的向量? (较小的数据集和较小的词汇表只能支持较小的向量。太大的向量将允许“过度拟合”,在这种情况下,数据的特殊性被存储,而不是通用的学习模式。或者,它们允许模型在许多不同的非竞争方向上继续改进,因此模型的最终任务/相似性结果可能会因每次运行而有很大差异,即使每个模型在其内部单词预测任务上都做得差不多。)

即使数据集很小,您是否也坚持使用默认的epochs=5? (庞大且变化多端的数据集需要较少的训练-因为无论如何,所有单词在整个数据集中都会出现很多次。如果您试图从较薄的数据中挤出结果,那么更多的epochs可能会有所帮助-但不是尽可能多的数据。)