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?
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. –