我正在尝试使用Spacy的相似度函数来衡量1万对文档之间的相似度。
但是,由于每个文档都很大,因此每个相似度计算都需要很长时间。因此,我正在考虑使用多处理模块,雇用了2名以上的工人。
我的问题是将同时使用N个进程,是否需要N倍以上的RAM使用率?如果可以,那么有什么办法可以使这N个处理器使用RAM中加载的相同(?)SPACY模块?
根据我的观察,我的环境(16GB RAM)不能同时执行2个(多)处理器(当用单个处理器执行脚本时大约为5GB)。
以下是我的代码的缩写版本:
import multiprocessing
import os
from difflib import SequenceMatcher
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics.pairwise import cosine_similarity
import spacy
import logging
import pickle
import datetime
from datetime import date
def measure_similarity(doc_pairs_queue, results_queue):
code that measure sim using spacy and other modules
def load_files(doc_pairs, loaded_pairs_queue):
code that loads files
if __name__ == "__main__":
doc_pairs = pickle.load (~~~)
loaded_pairs_queue = multiprocessing.Queue(maxsize=100)
loader = multiprocessing.Process(target=load_files, args=(doc_pairs, loaded_pairs_queue))
loader.start()
results_queue = multiprocessing.Queue(maxsize=1000)
worker_count = N
workers = [] # create list of workers, so we can terminate them later
for i in range(worker_count):
worker = multiprocessing.Process(target=measure_similarity, args=(loaded_pairs_queue, results_queue))
worker.start()
workers.append(worker)
while some_index < len(doc_pairs):
res = results_queue.get(timeout = 600)