如何对数百万个文档执行doc2vec.infer_vector()?

问题描述 投票:0回答:1

我使用了python gensim对40,000,000个文档的语料库进行了doc2vec模型的训练。该模型用于每天在数百万个文档上推断docvec。为了确保稳定性,我将alpha设置为较小的值并将其设置为较大的steps,而不是设置恒定的随机种子:

from gensim.models.doc2vec import Doc2Vec
model = Doc2Vec.load('doc2vec_dm.model')
doc_demo = ['a','b']
# model.random.seed(0)
model.infer_vector(doc_demo, alpha=0.1, min_alpha=0.0001, steps=100)

doc2vec.infer_vector()每次仅接受一个文档,并且推断每个文档大约需要0.1秒。在每个推断步骤中,是否有任何可以处理一系列文档的API

gensim doc2vec
1个回答
0
投票

当前,没有gensim API一次执行大量推理,这可以通过使用多个线程来提供帮助。这是一个愿望清单项目,其中包括其他改进:https://github.com/RaRe-Technologies/gensim/issues/515

通过将自己的推理作业分散在多个线程上,可以提高速度,最高可以达到CPU内核的数量。

为了消除由于Python GIL引起的所有多线程争用,您可以将推理分散到单独的Python进程上。如果每个进程都使用another answer n中描述的一些技巧来加载模型(请参见下文),则OS将帮助他们共享大型模型支持阵列(仅在RAM中支付一次费用),而它们各自可以完全独立一个畅通无阻的推理线程。

((Doc2Vec.load()也可以使用mmap='r'模式加载具有备份文件内存映射的现有磁盘模型。仅凭推论,不进行类似most_similar()的操作,只会读取共享的原始的后备数组,因此,如果您要启动仅进行推理然后保存其结果并退出的单用途进程,则无需对_norm变量进行任何改动。

© www.soinside.com 2019 - 2024. All rights reserved.