带Spacy管的多线程NLP

SJ *_*Bey 4 python multithreading nlp pipeline spacy

我正在尝试将Spacy NLP(自然语言处理)规则应用于诸如Wikipedia Dump之类的大文本文件。这是基于Spacy 文档示例的代码:

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() 
Run Code Online (Sandbox Code Playgroud)

Spacy可一次应用所有nlp操作,例如POS标记,去胶化等。就像NLP的管道一样,它一步一步地满足了您的所有需求。应用管道方法可以通过对管道的昂贵部分进行多线程处理来使处理过程更快。但是我看不到速度有什么大的提高,我的CPU使用率大约是25%(只有4个内核之一在工作)。我还尝试以多个块形式读取文件并增加了输入文本的数量:

out = nlp.pipe([part1, part2, ..., part4], n_threads=-1)
Run Code Online (Sandbox Code Playgroud)

但性能仍然相同。无论如何,有什么加快的过程吗?我怀疑应该启用OpenMP功能来编译Spacy以利用多线程功能。但是没有有关如何在Windows上执行操作的说明。

SJ *_*Bey 6

我想出了问题所在。OpenMP是用于为spacy pipe()方法实现多线程处理的软件包。默认情况下,MSVC编译器禁用此选项。在使用openmp支持编译源代码之后,它可以很好地工作。我还提出了拉取请求,以在以后的版本中启用它。因此,对于0.100.7之后的版本(最新版本),带有pipe()的多线程应该在Windows上正常工作。