gensim w2k - 附加文件

gensim w2k - additional file

我在相当大的(> 2 亿个句子)语料库上训练了 w2v,除了文件 w2v_model.model 之外,还得到了文件:w2v_model.model.trainables.syn1neg.npy 和 w2v.model_model.wv.vectors.npy。模型文件已成功加载并读取所有 npy 文件,无一例外。获得的模型表现良好。

现在我在更大的语料库(> 10 亿个句子)上重新训练了模型。正如预期的那样,自动保存了相同的 3 个文件。

当我尝试加载我重新训练的新模型时:

w2v_model = Word2Vec.load(path_filename)

我得到:

FileNotFoundError: [Errno 2] No such file or directory: '/Users/...../w2v_US.model.trainables.vectors_lockf.npy'

但是在训练结束时gensim没有保存这种扩展名的.npy文件 (我根据需要将所有输出文件保存在同一个库中)。

我应该怎么做才能获得这样的文件作为输出.npy 文件的一部分(训练时可能是 gensim w2v 中的一些选项)?是否有其他方法可以解决此问题?

如果 .save() 正在创建任何包含单词 trainables 的文件,则您使用的是旧版本的 Gensim。任何新培训绝对应该更喜欢使用当前版本。截至目前(2022 年 1 月),即 gensim-4.1.2,2021 年 9 月发布。

如果 .load() 的尝试产生了那个特定的错误,那么在 .save() 完成时应该已经创建了那个文件,以及你提到的其他文件。 (事实上​​ ,您用 path_filename 命名的 main 文件应该能够知道 other 文件名的唯一方法是其他文件写入成功,让主文件完成写入。)

您确定该文件没有被写入,但后来不知何故被遗留下来,可能被删除或没有与其他几个文件一起移动到某个新的文件系统路径?

一般来说,我会建议:

  • 使用最新的 Gensim 进行任何新训练
  • 始终在 INFO 级别启用 Python 日志记录,并密切观察 training/saving 进程的 logging/console 输出以查看对预期 activity/steps
  • 的确认
  • .save() 中以相同主文件名(在上面的示例中,w2v_US.model)开头的所有文件放在一起 - 请记住,对于较大的模型,它可能是一个较大的花名册文件比小型测试模型

您可能需要重新训练模型,但您可能能够通过如下步骤重新生成兼容的lockf文件:

  • 保存所有可能使用的文件
  • 来自与原始 .save() 完全相同的配置 - 包括相同的过时 Gensim 版本、完全相同的模型参数和完全相同的训练语料库 - 重复你之前完成的所有模型构建步骤.build_vocab()步。 (即:不需要 .train()。)这将创建一个 未经训练的 虚拟模型,它应该与损坏模型的词汇表 'shape' 完全匹配。
  • 使用 .save() 再次保存 that 虚拟模型 - 观察 logs/output 是否有错误。在其他文件旁边应该有一个名称类似于 dummy.model.trainables.vectors_lockf.npy 的文件。如果是这样,您 可能 可以将其复制,将其重命名为加载失败的原始模型所期望的文件,然后将其与原始模型放在一起 - .load() 然后可能会成功,或者以不同的方式失败。

(如果在创建原始模型时还有其他problems/corruption,这可能行不通。特别是,我想知道您在谈论重新训练模型时是否没有从新鲜的 Word2Vec 个实例,但以某种方式扩展了旧的实例,这可能会添加其他 problems/complications。在这种情况下,最好在最新的 Gensim 中进行全面的再培训,这也是一个更好的基础继续前进。)