5

Qualcuno può pensare ad un modo per accelerare l'analisi del sentimento CoreNLP (sotto)?Accelerare l'analisi del sentimento CoreNLP

ho inizializzare la pipeline CoreNLP una volta all'avvio del server:

// 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); 

Poi chiamo il gasdotto che collega il mio controller:

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); 
    ... 
} 

ho fatto il profilo del codice - la linea Annotation annotation = pipeline.process(text), che è la chiamata di elaborazione principale di CoreNLP, è molto lenta. Una richiesta con 100 chiamate al mio controller richiede in media 1,07 secondi. L'annotazione richiede ~ 7ms per chiamata. Devo ridurlo a ~ 2ms.

Non riesco a rimuovere nessuno degli annotatori perché il sentimento si basa su tutti loro. Sto già usando il parser Shift-Reduce Constituency perché è molto più veloce rispetto al parser di parser Context-Free predefinito.

Ci sono altri parametri che posso sintonizzare per accelerare notevolmente?

+0

Presumo si utilizzano i modelli predefiniti, è più probabile irrealizzabile senza un grosso corpus annotato, ma molto probabilmente è possibile riqualificare modelli più piccoli specifici per il tuo dominio. –

risposta

0

Avendo lo stesso problema. Ho anche provato l'SR Beam, che era ancora più lento del PCFG! Basato sui benchmark Stanford, SR Beam dovrebbe essere molto più veloce di PCFG, e solo leggermente più lento di SR.

Credo altro che utilizzare il parser SR invece del PCFG, l'unico modo rimasto per migliorare la velocità potrebbe essere una partita con le opzioni tokenizzatore ...