在Java中加载StanfordOpenNLP模型的巨大开销?

时间:2014-06-12 22:00:52

标签: java memory nlp stanford-nlp

我正在尝试使用StanfordNLP对与给定主题相关的文本块进行共参考解析,并且在尝试加载StanfordCoreNLP模型时,它首先在加载模型时完全耗尽内存,但现在仍然需要花费15分钟来装载。

我的代码如下:

 public Map<Integer, CorefChain> getCoreferences(String text) {
    Properties props = new Properties();
    props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
    StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
    Annotation document = new Annotation(text);

    pipeline.annotate(document);

    return document.get(CorefCoreAnnotations.CorefChainAnnotation.class);
}

这是不可避免的设计?甚至可以在生产应用程序中进行这样的共参考分辨率,其中任何超过10秒的时间都是不可接受的吗?

1 个答案:

答案 0 :(得分:2)

是的,如果你没有实例化 StanfordCoreNLP ,它会快得多 在你的方法里面。将其存储为类变量。

更具体地说,将以下内容移到方法之外:

Properties props = new Properties();
props.put("annotators", "tokenize, ssplit, pos, lemma, ner, parse, dcoref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);

希望它有所帮助! ;)