Gensim Doc2vec 已训练,但未保存

Gensim Doc2vec trained, but not saved

当我在大型文本语料库上训练 d2v 时,我收到了这 3 个文件:

doc2vec.model.trainables.syn1neg.npy

doc2vec.model.vocabulary.cum_table.npy

doc2vec.model.wv.vectors.npy

Bun 最终模型尚未保存,因为磁盘上可用空间不足 space。

OSError: 5516903000 requested and 4427726816 written

有没有办法在比所有训练时间更短的时间内使用这些文件重新保存我的模型?

提前致谢!

如果模型仍在 RAM 中,在可以 运行 新代码的环境(如 Jupyter 笔记本)中,您可以尝试清除 space(或附加新卷) 然后再次尝试 .save()。也就是说,你不需要重新训练,只需重新保存 RAM 中已有的内容即可。

保存没有套路"just what isn't already saved"。因此,即使 did 保存的子文件可能很有价值,如果你迫切希望从第一次培训 运行 中挽救任何东西(可能通过 my Word2Vec answer here 中的过程) ,尽管 Doc2Vec 有点复杂),尝试将另一个保存到同一个 place/volume 将需要将那些现有文件移开。 (也许您可以将它们转移到远程存储以备不时之需,但在本地删除它们以释放 space?)

如果您尝试保存为以“.gz”结尾的文件名,gensim 将尝试保存压缩的所有内容,这可能会有所帮助。 (不幸的是,主矢量数组的压缩效果不是很好,所以仅靠这可能还不够节省。)

没有简单的方法可以在内存中精简一个已经训练好的模型,同时又不会破坏它的某些功能。 (有一些困难的方法,但前提是你确定你可以放弃完整模型可以做的事情......而且目前还不清楚你是否处于那种情况。)

模型大小的主要贡献者是唯一词的数量和唯一文档标签的数量。

在训练前指定一个更大的 min_count 会丢弃更多的低频词——而非常低频的词通常只会伤害模型,所以这个修剪通常同时改进三件事:更快的训练、更小的模型和更高质量的下游任务结果。

如果您使用的是 plain-int doc-tags,则该模型将需要向量 space 用于从 0 到最大数字的所有 doc-tag 整数。因此,即使您只训练了 2 个文档,如果它们具有 999998999999 的纯整数文档标签,它仍然需要为 100 万个标签分配(和保存)垃圾向量,0到 999,999。因此,在某些情况下,人们的 memory/disk 使用率高于预期,因此使用从 0 开始的连续 ID 或切换到基于字符串的文档标签,可以大大减少大小。 (但是,同样,这必须在训练之前选择。)