加快CoreNLP情绪分析

时间:2016-01-18 22:30:01

标签: java performance optimization stanford-nlp sentiment-analysis

有人能想出加速我的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);

然后我从我的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);
    ...
}

我已经对代码进行了分析 - 行Annotation annotation = pipeline.process(text),这是CoreNLP的主要处理调用,非常慢。对我的控制器进行100次调用的请求平均需要1.07秒。注释每次调用大约需要7毫秒。我需要将其减少到~2ms。

我无法移除任何注释器,因为情绪依赖于所有这些注释器。我已经使用了Shift-Reduce选区解析器,因为它比默认的无上下文语法解析器快得多。

我可以调整其他任何参数来显着提高速度吗?

1 个答案:

答案 0 :(得分:0)

遇到同样的问题。我也尝试过SR Beam,它甚至比PCFG慢!根据斯坦福基准,SR Beam应该比PCFG快得多,并且只比SR略慢。

我想除了使用SR解析器而不是PCFG之外,提高速度的唯一剩余方法可能是使用tokenizer选项......