我遇到了问题,我想解决文档的共指问题,我正在尝试运行以下link提供的示例
import edu.stanford.nlp.hcoref.CorefCoreAnnotations;
import edu.stanford.nlp.hcoref.data.CorefChain;
import edu.stanford.nlp.hcoref.data.Mention;
import edu.stanford.nlp.ling.CoreAnnotations;
import edu.stanford.nlp.pipeline.Annotation;
import edu.stanford.nlp.pipeline.StanfordCoreNLP;
import edu.stanford.nlp.util.CoreMap;
import java.util.Properties;
public class CorefExample {
public static void main(String[] args) throws Exception {
Annotation document = new Annotation("Barack Obama was born in Hawaii. He is the president. Obama was elected in 2008.");
Properties props = new Properties();
props.setProperty("annotators", "tokenize,ssplit,pos,lemma,ner,parse,mention,coref");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
pipeline.annotate(document);
System.out.println("---");
System.out.println("coref chains");
for (CorefChain cc : document.get(CorefCoreAnnotations.CorefChainAnnotation.class).values()) {
System.out.println("\t"+cc);
}
for (CoreMap sentence : document.get(CoreAnnotations.SentencesAnnotation.class)) {
System.out.println("---");
System.out.println("mentions");
for (Mention m : sentence.get(CorefCoreAnnotations.CorefMentionsAnnotation.class)) {
System.out.println("\t"+m);
}
}
}
}
只有一个句子要解决,这是我的程序运行大约一个小时。这是正常的吗? 得到结果花了我一个小时
我使用此选项运行程序:-Xmx4g
答案 0 :(得分:0)
您是否尝试使用6GB内存?在documentation中,他们提到CoreNLP的新版本正在使用神经网络进行共参考分辨率,因此它比基于规则的算法要慢,而且需要更多的RAM。在我的情况下,它很慢,内存耗尽了两个句子和4 GB RAM。
英文神经系统的示例命令使用5GB作为3.7.0 CoreNLP版本:
java -Xmx5g -cp stanford-corenlp-3.7.0.jar:stanford-corenlp-models-3.7.0.jar:* edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner,parse,mention,coref -coref.algorithm neural -file example_file.txt
您也可以尝试使用参数指定您喜欢的算法:
coref.algorithm
例如,
PropertiesUtils.asProperties("annotators", "your annotators","coref.algorithm","neural");
有三种可供选择的方法。
在basic示例代码中,他们使用“ dcoref ”而不是“ coref ”作为共参考分辨率注释器,这是确定性方法,这更快,更准确。
答案 1 :(得分:0)
我没有遇到这个特殊问题,但也使用 CoreNLP 和 coref 作为注释器属性耗尽了堆空间。问题是我多次创建 new StanfordCoreNLP(props)
,而不是使用同一个对象。