2013-08-03 51 views
1

我目前正在研究Stanford Classifier(2013年4月4日發佈的版本2.1.8),併爲內部研究項目編寫了一個java包裝器。基於ClassifierDemo.java(附帶Classifier zip文件),我可以調用我的序列化的訓練模型和屬性文件來一次處理一個字符串。請注意,斯坦福分類器只能處理文件,一旦輸入字符串被讀取並保存在臨時文件中,分類器就開始處理它。方法trainedClassifier.classOf能夠使用訓練過的模型(myClassifier.ser.gz)輸出給定字符串的類。但是,我找不到與其一起輸出置信度得分的方法(cf:http://nlp.stanford.edu/nlp/javadoc/javanlp/edu/stanford/nlp/classify/ColumnDataClassifier.html)。斯坦福分類器輸出置信度分數的方法?

的願望輸出 stringCategory:虛擬 信心評分: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 
        //..... 
+0

你不必寫一個臨時文件,並用'ObjectBank'閱讀。如果你有一個String str,它包含了一個測試例子中的製表符分隔的值,你可以直接去看:'Datum classType = myProp.makeDatumFromLine(line);'。 –

回答

0

您可以用得到的分數方法Counter<L> scoresOf(Datum<L,F> example);(構造一個計數器,其中鍵爲分類器的標籤並賦值每個類的分數(非標準化日誌概率)。)可以在Classifier接口中找到。你可以像這樣使用它: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