On 04/04/2012 02:21 PM, Jim - FooBar(); wrote:
Hmm...it is not that simple! what about the maxent model? Let's say you

--create a class that extends Evaluator  (as all evaluators do)
--allow the constructor of that class to take variable number of arguments (of type TokenNameFinder) so we can use them later on --pretty much copy the code from TokenNameFinderEvaluator and paste it in the new class --make sure the code asks both (or however many) name-finders before it classifies a prediction as right or wrong.

Up to here everything is quite straight forward...now the problems begin!!! The Dictionary has to be evaluated on separate data than the model...That is because the Dictionary can only deal with the "default tag" and nothing else! A quick workaround would be to retrain the maxent model with "default" tags so i can evaluate it on the dictionary's test-set but then what about multiple types???

We could pass a tag to the DictionaryNameFinder it should output, then it works with the data you give to the
evaluator.
You would run your tests twice, once with the maxent name finder and once with the dictionary name finder.

Why do you want to extend the evaluators? It should work out of the box.

I would do it like this:
ObejctStream<NameSample> samples = ...;

// create NameFinderME
NameFinderME maxentNameFinder = ...;

TokenNameFinderEvaluator maxentEval = new TokenNameFinderEvaluator(maxentNameFinder);
maxentEval.evaluate(samples);
maxentEval.getFMeasure(); // here are you maxent results

samples.reset();

DictionaryNameFinder dictNameFinder = ...;
TokenNameFinderEvaluator dictEval = new TokenNameFinderEvaluator(dictNameFinder);
dictEval.evaluate(samples);
dictEval.getFMeasure(); // here are you dictionary name finder results

Doesn't that more or less like this work?

Jörn

Reply via email to