如何使用Stanford CoreNLP Server更有效地注释长文本?

时间:2019-12-02 14:47:26

标签: java nlp stanford-nlp pycorenlp

我正在尝试注释20万个文档,使用Stanford CoreNLP一次注释一个文档。每个文档平均包含200个句子或相当于6k的令牌。

我对Java不熟悉,所以我在用pycorenlp。我按照建议的以下命令启动服务器(稍后将使用其他参数对其进行编辑)。

java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer

我正在使用java 1.8和python 3.6。以下是我遇到的问题和尝试解决的方法,然后是我的问题:

1.Java内存不足,超出了GC开销限制:

我做到了:增加Java内存并添加-XX:+ UseG1GC -XX:+ UseStringDeduplication -XX:+ PrintStringDeduplicationStatistics

效果:到目前为止,还好。不知道以后会发生什么。我无法处理所有文本。

问题:尚未。

2。连接/管道破裂

我这样做了:在我的代码中每隔四个文档关闭服务器。 (我最多可以处理4个文档。有时我什至无法处理一个文档)

效果:看起来不错。但是,在服务器重新启动之后,它似乎很慢

问题:有更好的解决方案吗?如果我继续这样做,是否会在服务器使用方面遇到麻烦,例如禁止使用服务器?

3。低速

我做到了:调用服务器时将线程增加到12、18。

效果:比1个线程好很多

问题:是否有任何提速建议?由于文档的长度,即使要处理一个文档也要花费将近半小时,尽管我要打几个注释器。 (我知道使用更多的注释器会花费更多的时间,但是我仍然需要使用它们。)

4。服务器完全没有响应。甚至没有错误。

这是最痛苦的问题。由于我实际上没有IT背景,因此很难弄清问题所在。下面是程序卡住的地方。没有警告,没有错误。也许一小时后,它将继续。或者,它可以一直保留在那里直到我终止该程序。

[pool-1-thread-2] INFO CoreNLP - [/127.0.0.1:56846] API call w/annotators tokenize,ssplit,pos,depparse,lemma,ner,parse,dcoref,natlog,openie
the same field as the previous one is detected with magnitude @xmath107 photometric redshift, like borg_ 0240- 1857_ 129, is peaked at @xmath111, with a broad higher- redshift wing......(further content omitted)

任何及时的响应将不胜感激,尤其是对于第三和第四期。我已经仔细研究了官方文档和github,但是找不到任何解决方案。在官方文件上,它说要限制文件的大小,例如限制在一章,而不是整本小说。因此,我认为数据集中单个文档的长度很好。


0 个答案:

没有答案