Используйте модель fasttext (gensim) с потоками - PullRequest
0 голосов
/ 28 марта 2020

Можно ли получить доступ к модели быстрого текста (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 многопоточности.

1 Ответ

0 голосов
/ 29 марта 2020

В этом предыдущем ответе могут быть полезные идеи, для которых может потребоваться адаптация для FastText и последних версий gensim:

{ ссылка }

(Клавиши ...

  • , даже избыточная загрузка в разных процессах может не использовать избыточную память, если массивы, использующие ключевую память, mmap ped и, таким образом, автоматически распределяются в уровень ОС и

  • вам нужно сделать немного больше хитрости, чтобы предотвратить обычные повторные операции c после загрузки и операции перед сходством нормированных векторов, которые уничтожат делиться

.. но беспорядок в коде FastText может сделать их немного сложнее.)

...