numpy - Gensim word2vec 保存 numpy 数组?
问题描述
我从 gensim 运行 Word2Vec 实现两次,但save
函数有问题:
model_ = gensim.models.Word2Vec(all_doc, size=int(config['MODEL']['embed_size']),
window=int(config['MODEL']['window']),
workers=multiprocessing.cpu_count(),
sg=1, iter=int(config['MODEL']['iteration']),
negative=int(config['MODEL']['negative']),
min_count=int(config['MODEL']['min_count']), seed=int(config['MODEL']['seed']))
model_.save(config['BASIC']['embedding_dir'])
每次运行它时,我都会获得不同的输出。它第一次给出了“output_embedding”、“output_embedding.trainables.syn1neg.npy”和“output_embedding.wv.vectors.npy”。但是第二次它没有给出两个npy文件,它只是生成“output_embedding”。
从第一次到第二次,我唯一改变的是我用作输入的句子(all_doc
)。
为什么它不生成 3 个文件?
解决方案
Gensim 仅在内部 numpy 数组的大小超过某个阈值时才创建单独的文件——因此我怀疑您的all_doc
语料库在一种情况下具有非常小的词汇量,而在另一种情况下则具有更典型的大词汇量。
当它确实生成多个文件时,请确保将它们全部保存在一起以供以后加载工作。
(如果出于某种紧急原因您需要更改该行为,则继承的.save()
方法需要一个可选sep_limit
参数来更改阈值- 但我建议不要使用这个。)
另外:您的文件名.trainables.
中包含表明您使用的是 Gensim 4.0.0 之前的版本。最新的 Gensim 中对相关算法进行了一些改进Word2Vec
,一些旧代码需要进行一些小的更改才能继续工作,因此您可能需要升级到最新版本,然后再在旧基础上构建更多功能。