在使用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
答案 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 分钟。