从CoreNLP管道打印概率

时间:2018-03-12 23:52:51

标签: stanford-nlp

我知道使用分类器中的printProbs来打印特定令牌是特定神经类型的概率的功能。但是,如何在底部代码中访问CoreNLP管道使用的CRFC分类器来实际调用printProb方法?

    // create an empty Annotation just with the given text
    Annotation document = new Annotation(text);


    // run all Annotators on this text
    pipeline.annotate(document);

2 个答案:

答案 0 :(得分:0)

我要说的一种可能的方法是拥有自己的自定义ner注释器,它类似于CRFClassifier,并将其添加到您的管道而不是ner。所以基本上从该代码的副本开始,然后从那里开始,您可以访问包含派系和概率的CRFClassifier方法

答案 1 :(得分:0)

也可以使用反射(哈哈哈)

NERCombinerAnnotator nerAnnotator = (NERCombinerAnnotator) StanfordCoreNLP.getExistingAnnotator(Annotator.STANFORD_NER);
Field field = nerAnnotator.getClass().getDeclaredField("ner");
field.setAccessible(true);
NERClassifierCombiner classifier = (NERClassifierCombiner) field.get(nerAnnotator);
Field field2 = ner.getClass().getSuperclass().getDeclaredField("baseClassifiers");
field2.setAccessible(true);
// one of these will be the CRFClassifier used
List baseClassifiers = (List) field2.get(ner);

您还应该意识到使用此代码可以引发许多常见的反射异常。