从斯坦福分类器输出置信度得分的方法?

时间:2013-08-03 23:04:50

标签: java methods classification stanford-nlp

我目前正在研究Stanford Classifier(2013年4月4日发布的2.1.8版),并为内部研究项目编写了一个java包装器。基于ClassifierDemo.java(附带分类器zip文件),我能够调用我的序列化训练模型和属性文件来一次处理一个字符串。请注意,斯坦福分类器只能处理文件,一旦读取输入字符串然后保存在临时文件中,分类器就会开始处理它。方法trainedClassifier.classOf能够使用训练模型(myClassifier.ser.gz)输出给定字符串的类。但是,我找不到输出置信度得分的方法(cf:http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/classify/ColumnDataClassifier.html)。

欲望输出是 stringCategory:Dummy 置信度得分:0.85

以下是我在包装器中使用的Java类/方法:

         //.....
         LinearClassifier<String, String> trainedClassifier = 
         IOUtils.readObjectFromFile("myClassifier.ser.gz");

         //Have to call *.prop every time
         ColumnDataClassifier myProp = 
           new ColumnDataClassifier("myClassifierProp.prop");

         //Specify the temporary one sentence file saved in class-tmp.txt
         for (String line : ObjectBank.getLineIterator("class-tmp.txt")) 
               { Datum<String,String> classType = myProp.makeDatumFromLine(line, 0); 
                 classOutput = trainedClassifier.classOf(classType);

                 System.out.println("stringCategory: "+ classOutput + "/n");
                  //end of for
                  //.....

1 个答案:

答案 0 :(得分:0)

您可以使用Counter<L> scoresOf(Datum<L,F> example);方法获得分数(构造一个带有键的计数器,分类器的标签,并评估每个类的分数(非标准化的对数概率)。)可以在分类器界面中找到。您可以像这样使用它:trainedClassifier.scoresOf(classType)。在这种特殊情况下,这将返回Counter<String>。要查找输出类的分数,可以使用以下代码:

score = Double.toString(trainedClassifier.scoresOf(classType).getCount(classOutput));
System.out.println("Confidence score: " + score);

我做了一个像我上面那样的项目。您也可以尝试这种方法:

score = trainedClassifier.scoreOf(classType, classOutput);

我认为这也可以完成这项工作。

了解更多详情: Stanford LinearClassifier DocumentationStanford LinearClassifier Implementation