Почему один и тот же вызов на сервер Stanford CoreNLP иногда> в 50 раз медленнее, чем предыдущие вызовы?
Почему один и тот же вызов на сервер Stanford CoreNLP иногда> в 30 раз медленнее, чем предыдущие вызовы?
Демонстрация (в этом случае каждый ~12 API-вызов происходит в ~30 раз медленнее, даже если анализируемый текст одинаков):
Например, если я запускаю сервер Stanford CoreNLP, используя:
java -mx4g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer -port 9001 -timeout 50000
и запустите следующий код, который делает 200 одинаковых вызовов API к серверу Stanford CoreNLP через пакет Pycorenlp Python:
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-generic x86_64).
Кажется, что проблема затрагивает ner
аннотатор в основном. parse
аннотатор также затронут, но в меньшей степени. Аннотаторы tokenize,ssplit,pos,depparse,truecase
похоже, нет этой проблемы.