可寻址存储器中所需的模型大小很大程度上取决于所需权重的数量、唯一单词和唯一文档标签的数量。
拥有 145,000,000 个独特的文档标签,无论您限制自己使用多少个单词,仅训练中的原始文档向量就需要:
145,000,000 * 300 dimensions * 4 bytes/dimension = 174GB
您可以尝试较小的数据集。您可以减小矢量大小。你可以获得更多内存。
我会首先尝试其中的一个或多个,只是为了验证您是否能够使事情正常运行并获得一些初步结果。
有一个技巧,最好考虑为实验性的,它可能有助于训练更大的文档向量集,但代价是额外的复杂性和较低的性能:docvecs_mapfile
的参数Doc2Vec
.
通常,您不想要Word2Vec
/Doc2Vec
使用任何虚拟内存的风格训练会话,因为任何对较慢磁盘 IO 的依赖都会使训练变得极其缓慢。然而,对于仅以一个顺序迭代的大型文档集,在使文档向量数组由内存映射文件支持后,性能损失可能是可以克服的。本质上,每次训练都会从头到尾扫描文件,读取每个部分一次并分页一次。
如果您提供一个docvecs_mapfile
争论,Doc2Vec
将分配由该磁盘文件支持的 doc-vectors 数组。因此,您将在磁盘(最好是 SSD)上有一个数百 GB 的文件,其范围根据需要调入/调出 RAM。
如果您尝试此操作,请务必先在小规模运行中尝试此选项,以熟悉其操作,尤其是在保存/加载模型方面。
另请注意,如果您随后执行了默认操作most_similar()
在 doc-vectors 上,必须从原始数组创建另一个 174GB 单位标准化向量数组。 (您可以强制就地完成,通过显式调用来破坏现有的原始值init_sims(replace=True)
在调用任何其他需要单位范数向量的方法之前调用。)