我正在使用Stanford CoreNLP的NER模块进行项目,目前我对模型的评估存在一些问题。
我正在使用API从java程序内部调用功能而不是使用命令行参数,到目前为止,我已经设法从几个训练文件中训练模型(以制表符分隔格式; 2列使用令牌和注释/答案)并将其序列化为一个非常简单的文件。
现在我正在尝试评估我在一些测试文件(精确度,召回,f1)上训练的模型,我有点卡在那里。首先,测试文件应该采用什么格式?我假设它们应该与训练文件(制表符分隔)相同,这将是合乎逻辑的事情。我查看了JavaDoc文档,了解有关如何使用classify
方法的信息,还查看了NERDemo.java。我设法让classifyToString
方法起作用,但这对我的评估并没有帮助。我发现如果我将classifyAndWriteAnswers(String testFile, DocumentReaderAndWriter<IN> readerWriter, boolean outputScores)
设置为true,我假设的outputScores
方法会给我精确度和回忆分数。
但是,我无法让这个工作。我应该使用哪个DocumentReaderAndWriter
作为第二个参数?
这就是我现在所拥有的:
public static void evaluate(CRFClassifier classifier, File testFile) {
try {
classifier.classifyAndWriteAnswers(testFile.getPath(), new PlainTextDocumentReaderAndWriter(), true);
} catch (IOException e) {
e.printStackTrace();
}
}
这就是我得到的:
Unchecked call to 'classifyAndWriteAnswers(String, DocumentReaderAndWriter<IN>, boolean)' as a member of raw type 'edu.stanford.nlp.ie.AbstractSequenceClassifier'
另外,我是否将路径作为第一个参数传递给测试文件,或者将文件本身加载到String中?一些帮助将不胜感激。