首页 > 解决方案 > 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 个文件?

标签: numpygensimword2vec

解决方案


Gensim 仅在内部 numpy 数组的大小超过某个阈值时才创建单独的文件——因此我怀疑您的all_doc语料库在一种情况下具有非常小的词汇量,而在另一种情况下则具有更典型的大词汇量。

当它确实生成多个文件时,请确保将它们全部保存在一起以供以后加载工作。

(如果出于某种紧急原因您需要更改该行为,则继承的.save()方法需要一个可选sep_limit参数来更改阈值- 但我建议不要使用这个。)

另外:您的文件名.trainables.中包含表明您使用的是 Gensim 4.0.0 之前的版本。最新的 Gensim 中对相关算法进行了一些改进Word2Vec,一些旧代码需要进行一些小的更改才能继续工作,因此您可能需要升级到最新版本,然后再在旧基础上构建更多功能。


推荐阅读