gpt4 book ai didi

python - gensim-Doc2Vec : MemoryError when training on english Wikipedia

转载 作者:行者123 更新时间:2023-11-30 22:14:54 24 4
gpt4 key购买 nike

我从英语维基百科转储中提取了 145,185,965 个句子 (14GB),我想根据这些句子训练 Doc2Vec 模型。不幸的是,我“只有”32GB RAM,并且在尝试训练时出现MemoryError。即使我将 min_count 设置为 50,gensim 也会告诉我它需要超过 150GB 的 RAM。我认为进一步增加 min_count 不是一个好主意,因为生成的模型不会很好(只是猜测)。不过不管怎样,我会用500来尝试一下,看看内存是否足够。

是否有可能用有限的 RAM 来训练如此大的模型?

这是我当前的代码:

corpus = TaggedLineDocument(preprocessed_text_file)
model = Doc2Vec(vector_size=300,
window=15,
min_count=50, #1
workers=16,
dm=0,
alpha=0.75,
min_alpha=0.001,
sample=0.00001,
negative=5)
model.build_vocab(corpus)
model.train(corpus,
epochs=400,
total_examples=model.corpus_count,
start_alpha=0.025,
end_alpha=0.0001)

我可能犯了一些明显的错误吗?使用完全错误吗?

我也可以尝试减小向量大小,但我认为这会导致更糟糕的结果,因为大多数论文都使用 300D 向量。

最佳答案

可寻址内存中所需的模型大小很大程度上取决于所需权重的数量、唯一单词和唯一文档标签的数量。

拥有 145,000,000 个独特的文档标签,无论您限制自己使用多少个单词,仅训练中的原始文档向量就需要:

145,000,000 * 300 dimensions * 4 bytes/dimension = 174GB

您可以尝试较小的数据集。您可以减小矢量大小。你可以获得更多内存。

我会首先尝试其中的一个或多个,只是为了验证您是否能够让事情正常运行并获得一些初步结果。

有一个技巧,最好考虑为实验性的,它可能有助于训练更大的文档向量集,但代价是额外的复杂性和较低的性能:Doc2Vec 的 docvecs_mapfile 参数.

通常情况下,您不希望 Word2Vec/Doc2Vec 式的训练 session 使用任何虚拟内存,因为任何对较慢磁盘 IO 的依赖都会使训练变得极其缓慢。然而,对于仅以一个顺序迭代的大型文档集,在使文档向量数组由内存映射文件支持后,性能损失可能是可以克服的。本质上,每次训练都会从头到尾扫描文件,读取每个部分一次并分页一次。

如果您提供 docvecs_mapfile 参数,Doc2Vec 将分配由该磁盘文件支持的 doc-vectors 数组。因此,您将在磁盘(最好是 SSD)上有一个数百 GB 的文件,其范围根据需要调入/调出 RAM。

如果您尝试此操作,请务必先在小规模运行中尝试此选项,以熟悉其操作,尤其是在保存/加载模型方面。

另请注意,如果您对文档向量执行默认的 most_similar(),则必须从原始数组创建另一个 174GB 单位标准化向量数组。 (您可以通过在调用任何其他需要单位范数向量的方法之前显式调用 init_sims(replace=True) 调用来强制就地完成此操作,从而破坏现有的原始值。)

关于python - gensim-Doc2Vec : MemoryError when training on english Wikipedia,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50390455/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com