我该怎么做才能加快斯坦福CoreNLP(dcoref / ner)的速度?

问题描述 投票:6回答:2

我正在使用斯坦福的CoreNLP库和Stanford CoreNLP Python Wrapper处理大量文档。我正在使用以下注释器:

tokenize, ssplit, pos, lemma, ner, entitymentions, parse, dcoref

以及shift-reduce解析器模型englishSR.ser.gz。我主要使用CoreNLP进行共同参考解析/命名实体识别,据我所知,我正在使用最小的注释器来实现此目的。

我可以采用哪些方法来加快文档注释?

其他SO答案都建议不要为每个文档加载模型,但我已经这样做了(因为包装器启动服务器一次然后来回传递文档/结果)。

我正在处理的文件平均长度为20个句子,有些句子长达400个句子,有些句子短至1.每个句子的平均解析时间为1秒。我可以在一台机器上运行一个单线程进程,每天解析~2500个文档,但我想加倍(如果不是更多)。

python nlp stanford-nlp
2个回答
1
投票

尝试设置Stanford CoreNLP服务器,而不是在每次运行时加载注释器。这样,您可以加载一次注释器并更快地处理文档。第一个过程会更慢,但其余的要快得多。查看Stanford CoreNLP server的更多详细信息。

话虽如此,通常需要在准确性和速度之间进行权衡。因此,您可能希望使用NLTK和spacy等其他工具进行尽职调查,以了解最适合您的方法。


1
投票

需要注意的一点是,句子的长度对核心NLP库的某些部分的解析时间有很大的影响。我建议不要尝试解析超过100个令牌的句子。

解决此问题的一种方法是使用两个不同的管道:标记器/句子拆分器和完整管道。句子分割器管道可以确定句子的长度,然后你可以决定是否要以某种方式减轻其长度(例如,通过忽略句子,或将其分成多个句子)。第二个管道仅适用于小于您允许的最大长度的文档/句子。

虽然这种方法不能加速平均情况,但它可以大大改善最坏情况的性能。权衡是有合理的句子比你想象的要长。

© www.soinside.com 2019 - 2024. All rights reserved.