【问题标题】:Evaluate Stanford NER CRF and compute Precision/Recall programmatically评估斯坦福 NER CRF 并以编程方式计算 Precision/Recall
【发布时间】:2017-01-27 17:55:20
【问题描述】:

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,当时它说“不”。

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

更新:我意识到在新的 3.7.0 包中,我可以使用以下方法来获得精度、召回率和 F1,但这是所有类型实体(个人、组织、位置)的平均值。有没有办法为特定实体获取它们?

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

【问题讨论】:

  • 您有没有找到实现这一目标的方法?
  • 没有。最接近的是我上面包含的最后一行代码。
  • 我也认为这将是一个特别有用的功能。代码在那里,使用 CLI 我可以看到实体特定的指标。也许您可以通过github.com/stanfordnlp/CoreNLP/issues 提出建议
  • 如果 CLI 版本确实打印每个实体结果,那么必须能够在某处找到代码。奇怪的是,我查看了 CRFClassifier.java 和 AbstractSequenceClassifier.java,似乎只能找到输出一组(精度、召回、F1)分数而不是每个实体分数的多组的代码。

标签: java stanford-nlp


【解决方案1】:

通过CRFClassifier类扫描可以看出,使用如下函数进行日志记录

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

上述函数classifyAndWriteAnswers 调用Triple&lt;Double,Double,Double&gt; printResults(Counter&lt;String&gt; entityTP, Counter&lt;String&gt; entityFP, Counter&lt;String&gt; entityFN),它使用Redwood logger 打印出所有指标。

一个简单的技巧是在你的类中导入 Redwood logger,它有 main() 并配置它,以便显示所有指标。

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

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

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

【讨论】:

    猜你喜欢
    • 2015-06-29
    • 1970-01-01
    • 2016-06-20
    • 2019-03-17
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-07
    相关资源
    最近更新 更多