python - 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 中获得的结果:
解决方案
Word2Vec 算法在内部使用随机化。此外,当(通常为了提高效率)训练分布在多个线程上时,会引入一些额外的呈现顺序随机化。这意味着即使在完全相同的环境中,两次运行也会产生不同的结果。
如果训练是有效的——足够的数据、适当的参数、足够的训练通过——所有这些模型在做类似单词相似性的事情时都应该具有相似的质量,即使实际的单词会在不同的地方。单词的相对排名会有一些抖动,但结果应该大致相似。
你的结果与你的结果模糊相关'universe'
但并不令人印象深刻,而且它们在每次运行中差异很大,这表明你的数据、参数或训练数量可能存在问题。(我们预计结果会有所不同,但不会太大。)
你有多少数据?(Word2Vec 受益于许多不同的单词用法示例。)
您是否通过min_count
低于默认值 5 来保留稀有词?(这样的词往往得不到好的向量,而且还会干扰附近词向量的改进。)
您是否正在尝试制作非常大的向量?(较小的数据集和较小的词汇表只能支持较小的向量。太大的向量会导致“过度拟合”,即记住数据的特性,而不是学习通用模式。或者,它们允许模型在许多不同的非竞争方向上继续改进,因此模型的最终任务/相似性结果可能与每次运行都有很大不同,即使每个模型在其内部单词预测任务上的表现都差不多。)
即使数据集很小,您是否也坚持使用默认设置epochs=5
?(一个大而多样的数据集需要更少的训练通道——因为所有的词都出现了很多次,无论如何都在整个数据集中出现。如果你想从更薄的数据中提取结果,更多epochs
可能会有所帮助——但没有更多的变化数据会。)
推荐阅读
- git - Git致命错误:无法将代码拉到我的服务器
- python - 有没有办法让这个脚本只提供事件摘要唯一的事件摘要?
- c# - C# 或 VBA office word interop - 更改表格样式
- python - 多个盒子的盒子包装问题
- mysql - 如何将 jpg 类型作为原始类型的图像(blob 类型)从 mysql 检索到 matlab?
- python - 将多个 GluonTS 预测导出到 pandas 数据框
- javascript - 有人可以解释一下 javaScript 中的“空”语句和普通分号有什么区别吗
- ios - swift不能删除行
- windows - 终端关闭后,使用批处理脚本复制的文件将从文件夹中消失
- node.js - 如何删除除一个以外的所有文件