【问题标题】:Use fasttext model (gensim) with threading使用带有线程的 fasttext 模型 (gensim)
【发布时间】:2020-07-08 16:34:42
【问题描述】:

是否可以使用多线程访问快速文本模型 (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】:

    这个之前的回答可能对你有用,可能需要适应FastTextgensim的最新版本:

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

    (键是...

    • 如果关键的内存消耗数组是mmapped并因此在操作系统级别自动共享,即使在不同进程中冗余加载也可能不会使用冗余内存;和

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

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

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 2021-11-05
      • 2020-08-27
      • 2018-06-09
      • 2020-06-26
      • 1970-01-01
      相关资源
      最近更新 更多