为什么对斯坦福CoreNLP服务器的相同呼叫有时比以前的相同呼叫慢30倍?
演示(在这种情况下,即使解析的文本相同,每个〜12 API调用也要慢大约30倍):
例如,如果我使用以下命令启动Stanford CoreNLP服务器:
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9001 -timeout 50000
并运行以下代码,它通过Python包pycorenlp对Stanford CoreNLP服务器进行200个相同的API调用:
import os
import json
from pycorenlp import StanfordCoreNLP
import time
import sys
nlp = StanfordCoreNLP('http://localhost:9001')
total_start_time = time.time()
for i in range(200):
text = 'without the dataset the paper {0} is useless'.format(i)
print('text: {0}'.format(text))
start_time = time.time()
output = nlp.annotate(text, properties={
'annotators': 'ner',
'outputFormat': 'json'
})
elapsed_time = time.time() - start_time
print('elapsed_time: {0:.4f} seconds'.format(elapsed_time))
print('total_start_time: {0:.4f} seconds'.format(time.time()-total_start_time))
我偶尔会发现API调用的速度比正常情况下慢30倍以上,例如请参见下面的两行强调内容:
文本:如果没有数据集,则纸张0是无用的
经过时间:0.0199秒
文字:没有数据集,论文1没用
经过时间:0.0160秒
文字:没有数据集,论文2毫无用处
经过时间:0.0160秒
文字:没有数据集,论文3毫无用处
经过时间:0.0170秒
文字:没有数据集,论文4没用
经过时间:0.0160秒
文字:如果没有数据集,则论文5毫无用处
经过时间:0.0169秒
文字:没有数据集,论文6没用
经过时间:0.0170秒
文字:没有数据集,论文7毫无用处
经过时间:0.0180秒
文字:如果没有数据集,则论文8毫无用处
经过时间:0.0170秒
文字:没有数据集,论文9没用
经过时间:0.0190秒
文字:没有数据集,论文10毫无用处
经过时间:0.6911秒
文字:没有数据集,论文11没用
经过时间:0.0130秒
文字:没有数据集,论文12毫无用处
经过时间:0.0140秒
文字:没有数据集,论文13毫无用处
经过时间:0.0150秒
文字:没有数据集,论文14没用
经过时间:0.0170秒
文字:没有数据集,论文15毫无用处
经过时间:0.0179秒
文字:没有数据集,论文16毫无用处
经过时间:0.0160秒
文字:没有数据集,论文17毫无用处
经过时间:0.0140秒
文字:如果没有数据集,则论文18毫无用处
经过时间:0.0179秒
文字:没有数据集,论文19没用
经过时间:0.0170秒
文字:没有数据集,论文20毫无用处
经过时间:0.0150秒
文字:如果没有数据集,则论文21毫无用处
经过时间:0.0170秒
文字:没有数据集,论文22毫无用处
经过时间:0.0170秒
文字:没有数据集,论文23毫无用处
经过时间:0.0160秒
文字:没有数据集,论文24毫无用处
经过时间:0.6343秒
文字:没有数据集,论文25毫无用处
经过时间:0.0130秒
文字:没有数据集,论文26毫无用处
经过时间:0.0130秒
文字:没有数据集,论文27没用
经过时间:0.0160秒
文字:没有数据集,论文28毫无用处
经过时间:0.0150秒
文字:没有数据集,论文29毫无用处
经过时间:0.0170秒
文字:没有数据集,论文30毫无用处
经过时间:0.0167秒
文字:没有数据集,论文31没用
经过时间:0.0180秒
[…]
(我使用引号格式而不是代码块来增加重点。)
我使用python 3.6和Stanford CoreNLP版本3.9.2,即2018-10-05。我在运行Windows 7 SP1 x64 Ultimate,Microsoft Windows 18.03“ Professional”和Ubuntu 16.04.4 LTS 1(GNU / Linux 4.4.0-128-通用x86_64)的三台计算机上都观察到了这种行为。
该问题似乎主要影响ner
注释者。 parse
注释器也受到影响,但程度较小。注释者tokenize,ssplit,pos,depparse,truecase
似乎没有这个问题。