我试图将Spacy NLP(自然语言处理)pipline应用于像Wikipedia Dump这样的大文本文件。以下是基于Spacy documentation示例的代码:
from spacy.en import English
input = open("big_file.txt")
big_text= input.read()
input.close()
nlp= English()
out = nlp.pipe([unicode(big_text, errors='ignore')], n_threads=-1)
doc = out.next()
Spacy同时应用所有nlp操作,如POS标记,Lemmatizing等。它就像NLP的管道,只需一步即可完成您所需的一切。应用管道方法应该通过多线程处理管道的昂贵部分来使处理更快。但是我没有看到速度的大幅提升,我的CPU使用率大约是25%(4个核心中只有一个工作)。我还尝试在多个chuncks中读取文件并增加批量输入文本:
out = nlp.pipe([part1, part2, ..., part4], n_threads=-1)
但性能仍然相同。反正是为了加快这个过程吗?我怀疑应该启用OpenMP功能来编译Spacy以利用多线程功能。但是没有关于如何在Windows上执行此操作的说明。
答案 0 :(得分:5)
我想出了问题所在。 OpenMP是用于为spacy pipe()方法实现多线程的包。默认情况下,此选项对MSVC编译器禁用。在用openmp支持编译源代码之后,它运行得很好。我还在下一个版本中创建了pull request来启用它。因此对于0.100.7之后的版本(这是最新版本),使用pipe()的多线程应该可以在Windows上运行而没有任何问题。