2014-01-14 81 views
1

我正在使用Mallet的GenericAcrfTui來訓練和測試數據。所以我使用Mallet中的圖形模型(GRMM)進行CRF培訓。我爲我的訓練集和測試集創建了特性,並希望從命令行運行GenericAcrfTui。當我運行它時,我得到了每個標籤的F分數和準確性度量,但我沒有回到每行的實際標籤。我做這樣的事情:您如何從命令行查看GenericAcrfTui的測試集標籤?

java -cp $GRMM/class:$GRMM/lib/mallet-deps.jar:$GRMM/lib/grmm-deps.jar \ 
edu.umass.cs.mallet.grmm.learning.GenericAcrfTui \ 
--training $GRMM/data/grmm/conll2000.train1k.txt \ 
--testing $GRMM/data/grmm/conll2000.test1k.txt \ 
--model-file tmpls.txt > stdout.txt 2> stderr.txt 

這是在Mallet example給出的例子。雖然對於獲取標籤似乎沒有切換。人們如何做到這一點?

回答

0

這個想法是寫你自己的評估者(即ACRFEvaluator的子類)。有兩種方法你必須寫,evaluatetestevaluate方法可以複製源代碼中另一個Evaluator的代碼,沒什麼大不了的。這是test方法,您可以在其中添加行來執行任務。

通常,命令行的輸出在標準輸出和使用的記錄器之間分開。每個標籤的結果(f分數和準確性)最終在記錄器輸出中,因此可能是我們放置標籤的地方,否則可能是標籤的單獨文件,您的選擇。所以這裏是一個測試方法的代碼示例。我將輸出到標準輸出,並根據您的口味進行調整。

@Override 
public void test(InstanceList gold, List returned, String description) { 
    for (Iterator it = evals.iterator(); it.hasNext();) { 
     ACRFEvaluator eval = (ACRFEvaluator) it.next(); 
     eval.test(gold, returned, description); 
     int rows = returned.size(); 
     for (int index = 0; index < rows; index++)     
      System.out.println("PREDICTED: " + returned.get(index).toString() + " vs. " + gold.get(index).toString()); 
     } 
    } 
} 

爲了完整起見,類聲明:

public class MyEvaluator extends ACRFEvaluator { 
    // body goes here 
} 

和命令行開關看起來像

--eval "new MyEvaluator()" 
相關問題