2014-01-14 13 views
1

Mallet의 GenericAcrfTui를 사용하여 데이터를 테스트하고 테스트합니다. 그래서 저는 CRF 훈련을하기 위해 GRMM (Mallet in Graphic Models)을 사용하고 있습니다. 필자는 트레이닝 세트와 테스트 세트의 기능을 모두 생성했으며 명령 줄에서 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의 하위 클래스)를 작성하는 것입니다. 작성해야하는 두 가지 방법은 evaluatetest입니다. evaluate 메소드는 소스 코드에서 다른 Evaluator의 코드를 복사 할 수 있습니다. 큰 문제는 아닙니다. 작업을 수행 할 라인을 추가하는 것은 test 메소드입니다.

일반적으로 명령 행의 출력은 stdout과 사용 된 로거간에 분할됩니다. 각 라벨 (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()" 
과 같을 것이다