2014-01-14 6 views
1

Я тренирую и тестирую данные с помощью GenericAcrfTui от Mallet. Поэтому я использую графические модели в 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). Существует два метода, которые вы должны написать: evaluate и test. Метод evaluate может быть скопирован кодом для другого оценщика в исходном коде, без значительных затрат. Это метод test, где вы добавляете строки для выполнения задачи.

В общем случае вывод командной строки разделяется между stdout и используемым регистратором. Результаты для каждой метки (f-оценка и точность) заканчиваются в выводе журнала, так что это может быть место, где мы помещаем метки, иначе, возможно, отдельный файл для ярлыков по вашему выбору. Итак, вот пример кода для тестового метода. Я выведу на stdout, и вы приспособитесь к своим вкусам.

@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()" 

 Смежные вопросы

  • Нет связанных вопросов^_^