如何在多个内核上运行spacy算法

时间:2018-11-25 09:53:59

标签: python-3.x parallel-processing nlp python-multiprocessing spacy

我有两个列表。列表A包含500个单词。列表B包含10000个单词。我正在尝试为列表A找到与B相似的单词。我正在使用Spacy的相似功能。

我面临的问题是计算需要花费很多时间。我是多核新手,因此需要帮助。

如何通过python中的多核处理来加快算法的运行速度?

以下是我的代码。

ListA =['Dell', 'GPU',......] #500 words lists
ListB = ['Docker','Ec2'.......] #10000 words lists
s_words = []
for token1 in ListB:
    list_to_sort = [] 
    for token2 in ListA:    
        list_to_sort.append((token1, token2,nlp(str(token1)).similarity(nlp(str(token2)))))
        sorted_list = sorted(list_to_sort, key = itemgetter(2), reverse=True)[0][:2]
        s_words.append(sorted_list)

2 个答案:

答案 0 :(得分:1)

您可以使用multiprocessing软件包。我希望这会大大减少您的时间。有关示例代码,请参见here

答案 1 :(得分:0)

你试过nlp.pipe()吗?

你可以这样做:

from operator import itemgetter
import spacy

nlp = spacy.load("en_core_web_lg")
ListA = ['Apples', 'Monkey']  # 500 words lists
ListB = ['Grapefruit', 'Ape', 'Oranges', 'Banana']  # 10000 words lists
s_words = []
docs_a = nlp.pipe(ListA)
docs_b = list(nlp.pipe(ListB))
for token1 in docs_a:
    list_to_sort = []
    for token2 in docs_b:
        list_to_sort.append((token1.text, token2.text, token1.similarity(token2)))
        sorted_list = sorted(list_to_sort, key=itemgetter(2), reverse=True)[0][:2]
        s_words.append(sorted_list)
print(s_words)

这应该已经为您加快了速度。函数 nlp.pipe() 还具有参数 n_process,这可能正是您要查找的内容。