我使用了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 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
变量进行任何改动。