【问题标题】:Different models with gensim Word2Vec on pythonpython上带有gensim Word2Vec的不同模型
【发布时间】:2016-06-10 09:55:13
【问题描述】:

我正在尝试在 python 中应用在库 gensim 中实现的 word2vec 模型。我有一个句子列表(每个句子都是一个单词列表)。

例如让我们有:

sentences=[['first','second','third','fourth']]*n

我实现了两个相同的模型:

model = gensim.models.Word2Vec(sententes, min_count=1,size=2)
model2=gensim.models.Word2Vec(sentences, min_count=1,size=2)

我意识到模型有时是相同的,有时是不同的,这取决于 n 的值。

例如,如果 n=100 我得到

print(model['first']==model2['first'])
True

同时,对于 n=1000:

print(model['first']==model2['first'])
False

这怎么可能?

非常感谢!

【问题讨论】:

  • 其实第二种情况,当文本结果为True时,n=5000
  • 在您粘贴的代码中,model 在sententes 上进行训练,model2 在sentences 上进行训练。这是复制错误还是您的实际代码?
  • 很遗憾,只是复制错误。
  • 我不明白这个 model['first']==model2['first'] 是如何计算为 True 的,它不应该计算为 True, True,因为你的嵌入是在 2 空间 (size=2) 中的吗?
  • 我的帖子回答你的问题了吗?

标签: python nlp gensim word2vec


【解决方案1】:

查看gensimdocumentation,运行Word2Vec时有一些随机化:

seed = 用于随机数生成器。每个单词的初始向量都使用单词 + str(seed) 连接的哈希作为种子。请注意,对于完全确定性可重现的运行,您还必须将模型限制为单个工作线程,以消除 OS 线程调度的顺序抖动。

因此,如果您想获得可重复的结果,则需要设置种子:

In [1]: import gensim

In [2]: sentences=[['first','second','third','fourth']]*1000

In [3]: model1 = gensim.models.Word2Vec(sentences, min_count = 1, size = 2)

In [4]: model2 = gensim.models.Word2Vec(sentences, min_count = 1, size = 2)

In [5]: print(all(model1['first']==model2['first']))
False

In [6]: model3 = gensim.models.Word2Vec(sentences, min_count = 1, size = 2, seed = 1234)

In [7]: model4 = gensim.models.Word2Vec(sentences, min_count = 1, size = 2, seed = 1234)

In [11]: print(all(model3['first']==model4['first']))
True

【讨论】:

  • 在 Python 3 中,解释器启动之间的可重复性还需要使用 PYTHONHASHSEED 环境变量来控制哈希随机化。所以,你需要在终端 PYTHONHASHSEED=0 python <script_name>.py 中运行 Evan.oman 的脚本
猜你喜欢
  • 1970-01-01
  • 2014-04-02
  • 2019-05-26
  • 2020-08-01
  • 2018-08-30
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多