5

Может кто-нибудь подумать о том, как ускорить анализ Sentiment CoreNLP (см. Ниже)?Ускорение анализа состояния ядра CoreNLP

инициализирует трубопровод CoreNLP один раз при запуске сервера:

// Initialize the CoreNLP text processing pipeline 
public static Properties props = new Properties(); 
public static StanfordCoreNLP pipeline; 

// Set text processing pipeline's annotators 
props.setProperty("annotators", "tokenize, ssplit, pos, parse, sentiment"); 
// Use Shift-Reduce Constituency Parsing (O(n), 
// http://nlp.stanford.edu/software/srparser.shtml) vs CoreNLP's default 
// Probabilistic Context-Free Grammar Parsing (O(n^3)) 
props.setProperty("parse.model", "edu/stanford/nlp/models/srparser/englishSR.ser.gz"); 
pipeline = new StanfordCoreNLP(props); 

Тогда я вызываю трубопровод от моего контроллера:

String text = 'A sample string.' 
Annotation annotation = pipeline.process(text); 
List<CoreMap> sentences = annotation.get(CoreAnnotations.SentencesAnnotation.class); 
for (CoreMap sentence : sentences) { 
    Tree tree = sentence.get(SentimentCoreAnnotations.SentimentAnnotatedTree.class); 
    int sentiment = RNNCoreAnnotations.getPredictedClass(tree); 
    ... 
} 

Я профилированный код - линия, которая Annotation annotation = pipeline.process(text) является основным вызовом обработки CoreNLP, очень медленный. Запрос со 100 вызовами моего контроллера занимает в среднем 1.07 секунды. Аннотации берут ~ 7 мс за звонок. Мне нужно уменьшить это до ~ 2 мс.

Я не могу удалить ни одного из аннотаторов, потому что настроение зависит от всех них. Я уже использую Shift-Reduce Constructance Parser, потому что он намного быстрее, чем стандартный грамматический анализатор без контекста.

Есть ли другие параметры, которые я могу настроить, чтобы значительно ускорить это?

+0

Я предполагаю, что вы используете модели по умолчанию, то, скорее всего, неосуществимо без большого аннотированного корпуса, но, скорее всего, вы могли бы перенастроить небольшие модели, специфичные для вашего домена. –

ответ

0

Имея ту же проблему. Я также попробовал SR Beam, который был еще медленнее PCFG! На основе тестов в Стэнфорде SR Beam должен быть намного быстрее, чем PCFG, и только немного медленнее, чем SR.

Я думаю, кроме использования SR парсер вместо PCFG, единственный оставшийся способ улучшить скорость может играть с параметрами Tokenizer ...