python - 确保 gensim 为同一数据的不同运行生成相同的 Word2Vec 模型

标签 python random gensim word2vec word-embedding

LDA model generates different topics everytime i train on the same corpus ,通过设置 np.random.seed(0),LDA 模型将始终以完全相同的方式进行初始化和训练。

gensim 的 Word2Vec 模型是否相同?通过将随机种子设置为常量,在同一数据集上的不同运行会产生相同的模型吗?

但奇怪的是,它已经在不同的实例中为我提供了相同的向量。

>>> from nltk.corpus import brown
>>> from gensim.models import Word2Vec
>>> sentences = brown.sents()[:100]
>>> model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.04985042,  0.02882229, -0.03625415, -0.03165979,  0.06049283,
        0.01207791,  0.04722737,  0.01984878, -0.03026265,  0.04485954], dtype=float32)
>>> model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.04985042,  0.02882229, -0.03625415, -0.03165979,  0.06049283,
        0.01207791,  0.04722737,  0.01984878, -0.03026265,  0.04485954], dtype=float32)
>>> model = Word2Vec(sentences, size=20, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.02596745,  0.01475067, -0.01839622, -0.01587902,  0.03079717,
        0.00586761,  0.02367715,  0.00930568, -0.01521437,  0.02213679,
        0.01043982, -0.00625582,  0.00173071, -0.00235749,  0.01309298,
        0.00710233, -0.02270884, -0.01477827,  0.01166443,  0.00283862], dtype=float32)
>>> model = Word2Vec(sentences, size=20, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.02596745,  0.01475067, -0.01839622, -0.01587902,  0.03079717,
        0.00586761,  0.02367715,  0.00930568, -0.01521437,  0.02213679,
        0.01043982, -0.00625582,  0.00173071, -0.00235749,  0.01309298,
        0.00710233, -0.02270884, -0.01477827,  0.01166443,  0.00283862], dtype=float32)
>>> exit()
alvas@ubi:~$ python
Python 2.7.11 (default, Dec 15 2015, 16:46:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from nltk.corpus import brown
>>> from gensim.models import Word2Vec
>>> sentences = brown.sents()[:100]
>>> model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=4)
>>> word0 = sentences[0][0]
>>> model[word0]
array([ 0.04985042,  0.02882229, -0.03625415, -0.03165979,  0.06049283,
        0.01207791,  0.04722737,  0.01984878, -0.03026265,  0.04485954], dtype=float32)
>>> model = Word2Vec(sentences, size=20, window=5, min_count=5, workers=4)
>>> model[word0]
array([ 0.02596745,  0.01475067, -0.01839622, -0.01587902,  0.03079717,
        0.00586761,  0.02367715,  0.00930568, -0.01521437,  0.02213679,
        0.01043982, -0.00625582,  0.00173071, -0.00235749,  0.01309298,
        0.00710233, -0.02270884, -0.01477827,  0.01166443,  0.00283862], dtype=float32)

那么默认的随机种子是固定的吗?如果是这样,默认的随机种子数是多少?还是因为我正在测试一个小数据集?

如果随机种子确实是固定的并且对相同数据的不同运行返回相同的向量,则非常感谢指向规范代码或文档的链接。

最佳答案

根据 Gensim 的文档,要执行完全确定性可重现的运行,您必须也将模型限制为单个工作线程,以消除操作系统线程调度中的顺序抖动。

对您的代码进行简单的参数编辑应该可以解决问题。

model = Word2Vec(sentences, size=10, window=5, min_count=5, workers=1)

关于python - 确保 gensim 为同一数据的不同运行生成相同的 Word2Vec 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34831551/

相关文章:

javascript - 使用带有偏差的 Random()

python - LDA Gensim Word -> 主题 ID 分布而不是主题 -> 单词分布

python - Doc2Vec 模型 Python 3 兼容性

python - 来自文件的数据流与文件目录的性能

python - 不要将 nan 值写入 Excel 工作表

python - Tornado Web 服务器与 AngularJS 运算符表达式一起工作时效果不佳

python - 从 python 访问 JIRA

python - 为什么 Python 中的 traceback.extract_stack() 这么慢?

Java从数字区间生成随机唯一数字

Fortran 中的随机数