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

标签 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从三年前开始,当时说“不”。

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

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

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

最佳答案

通过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 记录器打印出所有指标。

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

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

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

然后只需调用 classifyAndWriteAnswers 的任何实现即可与 outputScores = true

关于java - 评估 Stanford NER CRF 并以编程方式计算 Precision/Recall,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41900156/

相关文章:

java - 线程中的异常 "main"java.lang.IllegalArgumentException : cannot add to layout: constraints must be a GridBagConstraint

java - 我如何将groovy应用程序中的数据存储为Web应用程序中的( session ,flash)

java - 无法解析构造函数 'arrayadapter(android.widget.adapterview.onitemselectedlistener, int, java.util.arraylist)'

python - 从 NLTK 中训练新的斯坦福词性标注器

java - 斯坦福 CoreNLP 词形还原

java - 打开和在选项卡之间切换时如何更新 FirefoxDriver (WebDriver) 对象?

java - 如何初始化stanfordNLP管道一次并使用多次而不需要再次初始化?

nlp - 如何使用斯坦福 CoreNLP NER 和 POS 标记预标记化文本?

parsing - 好的例子 : English Parsing/Natural Language Processing

java - Java中DocumentListener更改后如何让JTextField返回空白