6

我正在尝试将 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() 

Spacy 一次性应用所有 nlp 操作,如 POS 标记、词形还原等。它就像 NLP 的管道,一步即可处理您需要的一切。应用管道方法应该通过多线程处理管道的昂贵部分来使过程更快。但是我没有看到速度有很大的提高,我的 CPU 使用率大约是 25%(只有 4 个内核中的一个在工作)。我还尝试以多个块读取文件并增加输入文本的批次:

out = nlp.pipe([part1, part2, ..., part4], n_threads=-1)

但仍然是相同的表现。有没有办法加快这个过程?我怀疑应该启用 OpenMP 功能来编译 Spacy 以利用多线程功能。但是没有关于如何在 Windows 上执行此操作的说明。

4

1 回答 1

7

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

于 2016-04-10T01:33:56.230 回答