评估Stanford NER CRF并以编程方式计算Precision / Recall

时间:2017-01-27 17:55:21

标签: java stanford-nlp

Stanford NER是否有类/方法来计算Java中的Precision / Recall(不是命令行)?

我已经能够在我的训练数据上训练我的模型,如Java:

Properties props = StringUtils.propFileToProperties("classifierTraining/austen.prop");
SeqClassifierFlags flags = new SeqClassifierFlags(props);
CRFClassifier<CoreLabel> crf = new CRFClassifier<CoreLabel>(flags);
crf.train();
crf.serializeClassifier("classifierTraining/model.ser.gz");
  1. 是否可以使用Stanford NLP软件包以编程方式对测试数据集执行交叉验证?我从三年前看到了this question,其中说过#34; no&#34;当时。

  2. 有没有办法在Java中以编程方式在测试数据集上运行训练分类器,并获得精度/召回值(不使用命令行)?这样,我应该能够手动拆分数据集并在其上运行代码以进行交叉验证。

  3. 更新:我意识到在新的3.7.0软件包中,我可以使用以下内容来获得精确度,召回率和F1,但这是所有类型实体(人员,组织,位置)的平均值。有没有办法让它们用于特定的实体?

    Triple<Double,Double,Double> scores = crf.classifyAndWriteAnswers("classifierTraining/testFileTokenized.txt", true);
    

1 个答案:

答案 0 :(得分:1)

扫描CRFClassifier类显示以下功能用于记录日志

Triple<Double,Double,Double> classifyAndWriteAnswers(Collection<List<IN>> documents,
                                                              PrintWriter printWriter,
                                                              DocumentReaderAndWriter<IN> readerWriter,
                                                              boolean outputScores)

以上功能classifyAndWriteAnswers调用Triple<Double,Double,Double> printResults(Counter<String> entityTP, Counter<String> entityFP, Counter<String> entityFN),该功能使用Redwood记录器打印出所有指标。

一个简单的技巧是仅在具有main()的类中导入Redwood记录器并对其进行配置,以便显示所有指标。

导入:import edu.stanford.nlp.util.logging.*;

并将其添加到您的main()中 StanfordRedwoodConfiguration.setup();

然后只需使用classifyAndWriteAnswers调用outputScores = true的任何实现