为什么每次用预训练的嵌入词向量和固定词元组运行后,我的相似度值都会改变?

问题描述 投票:0回答:1

我想做什么。我想从word2vec中得到很多词组的相似度值。Tuple_list_example = [('guard', 'suffrage'), ('guard', protest), ('guard', 'sea'), ('guard', 'demonstrations'), ('guard', 'definition')…]我导入了Text8Corpus的预训练向量与genismw2v_model = Word2Vec(Text8Corpus(r'C:\\path’), size=100, window=5, min_count=150, workers=4)

一切都很好,只是我不明白为什么每次运行我的代码后,相似度值都会改变。我总是使用相同的预训练向量和相同的单词元组。例如:第一次命中后的输出。[-0.3895531, -0.3782139, -0.36835572, -0.36330146, ...]第二次命中后的输出: [-0.40356663, -0.3905962, -0.37609994, -0.3635677,…]

为什么会这样?

python word2vec
1个回答
0
投票

word2vec算法本质上将随机化作为其训练过程的一部分:无论是训练前向量的初始化,还是训练的进度。

进一步做多线程训练,意味着操作系统层面对工作线程调度的轻微变化,意味着即使是相同的训练数据,在运行之间也不会以完全相同的顺序呈现给模型,从而改变模型的最终状态。

此外,Python本身也会稍微随机化的行为。dicts,以防止某些类型的拒绝服务攻击,在某些版本中,这可能会影响发现的单词在运行到运行之间的枚举顺序。

所以,你不应该期望从后续的运行中得到相同的结果,除非你已经采取了极端的措施来防止所有这样的差异(由于其他原因,这是一个坏主意,包括使训练变得更慢&从一个核心不是精确的算法中创造一个虚假的稳定性假象)。

有一个更多的讨论在 gensim FAQ的Q11 & Q12。.

© www.soinside.com 2019 - 2024. All rights reserved.