如何使用nlp.pipe模式加速spacy管道?

时间:2019-10-10 10:34:29

标签: python-3.x spacy

在使用spacy的pipeline documentation之后,我一直在尝试使用nlp.pipe模式来加快我的流程。不过,我发现,无论我设置的batch_size为何,与连续运行相比都没有提高速度。

我想知道问题是否在我的头上还是批处理不起作用?

我正在30000个平均长度为1500个字符的文本上测试此行为,我测试了5,50,500,5000的批量大小,但无济于事。

所以我计时:

for text in texts:
   doc = nlp(text)

VS

doc_gen = nlp.pipe(texts, batch_size, n_threads)

使用n_threads -1和2 测试批次大小5、50、500、5000 其中texts包含30000个文档,平均长度为1500个字符

我的计时结果没有显示使用管道样式之间的任何显着差异。

我正在使用spacy 2.0.12

运行Python 3

1 个答案:

答案 0 :(得分:1)

<块引用>

批量大小是特定于 nlp.pipe 的参数,同样,一个好的值取决于正在处理的数据。对于新闻文章等相当长的文本,保持批处理大小合理是有意义的(以便每个批处理不包含真正长的文本),因此在这种情况下,批处理大小选择为 20。对于每个文档的长度要短得多的其他情况(例如推文),可以使用更大的批量大小。

-Prashanth Rao,https://prrao87.github.io/blog/spacy/nlp/performance/2020/05/02/spacy-multiprocess.html#Option-1:-Sequentially-process-DataFrame-column

除了包含上面这个有用的引用之外,我上面链接的文章还讨论了使用 SpaCy 加速文本预处理的 3 种不同方法。

如果使用管道不能加快流程,我建议使用 .apply 函数,如下所述和该网站上所述!我已经看到它将一个过程从 9 多个小时缩短到 47 分钟。

The .apply function