将快速文本模型(gensim)与线程一起使用

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

是否可以使用多线程访问快速文本模型(gensim)?当前,由于大小和加载时间的缘故,我试图加载一次模型,因此该模型保留在内存中,并且连续数千次访问其相似性函数。我想并行执行此操作,并且我当前的方法使用包装类来加载模型,然后将其传递给工作人员。但是看起来它没有返回任何结果。

包装器类。发起一次。

from gensim.models.fasttext import load_facebook_model

class FastTextLocalModel:
    def __init__(self):
        self.model_name = "cc.de.300.bin"
        self.model_path = path.join("data", "models", self.model_name)
        self.fast_text = None

    def load_model(self):
        self.fast_text = load_facebook_model(self.model_path)

    def similarity(self, word1: str = None, word2: str = None):
        return self.fast_text.wv.similarity(word1, word2)

并且Processor类使用上面的FastTextLocalModel方法:

fast_text_instance = FastTextLocalModel()
fast_text_instance.load_model()

with concurrent.futures.ThreadPoolExecutor(max_workers=multiprocessing.cpu_count()) as executor:
        docs = corpus.get_documents()  # docs is iterable
        processor = ProcessorClass(model=fast_text_instance)
        executor.map(processor.process, docs)

使用max_workers=1似乎有效。我不得不提到我在python多线程方面没有专门知识。

python multithreading gensim fasttext
1个回答
0
投票

在此先前的回答中可能对您有用,可能需要适应FastTextgensim的最新版本:

https://stackoverflow.com/a/43067907/130288

(键是...

  • 即使关键内存消耗阵列被mmap填充并因此在操作系统级别自动共享,即使在不同进程中进行冗余加载也可能不会使用冗余内存;和

  • [[您必须做一些额外的技巧,以防止规范向量的通常重新计算后加载和相似前操作,这会破坏共享

..但是FastText代码中的混乱可能会使这些操作变得更加困难。)

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