Package cc.mallet.fst

Source Code of cc.mallet.fst.TransducerEvaluator

/* Copyright (C) 2002 Univ. of Massachusetts Amherst, Computer Science Dept.
   This file is part of "MALLET" (MAchine Learning for LanguagE Toolkit).
   http://www.cs.umass.edu/~mccallum/mallet
   This software is provided under the terms of the Common Public License,
   version 1.0, as published by http://www.opensource.org.  For further
   information, see the file `LICENSE' included with this distribution. */




/**
   @author Andrew McCallum <a href="mailto:mccallum@cs.umass.edu">mccallum@cs.umass.edu</a>
*/

package cc.mallet.fst;

import java.util.logging.Logger;

import cc.mallet.types.InstanceList;

import cc.mallet.optimize.Optimizable;

import cc.mallet.util.MalletLogger;

/**
* An abstract class to evaluate a transducer model.
*/
public abstract class TransducerEvaluator
{
  private static Logger logger = MalletLogger.getLogger(TransducerEvaluator.class.getName());

  // TODO consider storing the TransducerTrainer here also?  Methods like precondition() will be shorter and easier.
  protected InstanceList[] instanceLists;
  protected String[] instanceListDescriptions;
 
  public TransducerEvaluator () {
    instanceLists = new InstanceList[0];
    instanceListDescriptions = new String[0];
  }
 
  public TransducerEvaluator (InstanceList[] instanceLists, String[] instanceListDescriptions) {
    this.instanceLists = instanceLists;
    this.instanceListDescriptions = instanceListDescriptions;
  }

  /**
   * Evaluates a TransducerTrainer and its Transducer on the instance lists specified in the constructor.               .
   * <P>
   * The default implementation calls the evaluator's <TT>evaluateInstanceList</TT> on each instance list.
   *
   * @param tt The TransducerTrainer to evaluate.
   */
  public void evaluate (TransducerTrainer tt)  {
    if (!precondition(tt))
      return;
    this.preamble(tt);
    for (int k = 0; k < instanceLists.length; k++)
      if (instanceLists[k] != null)
        evaluateInstanceList (tt, instanceLists[k], instanceListDescriptions[k]);
  }
 
  protected void preamble (TransducerTrainer tt) {
    int iteration = tt.getIteration();
    Optimizable opt;
    if (tt instanceof TransducerTrainer.ByOptimization
        && (opt = ((TransducerTrainer.ByOptimization)tt).getOptimizer().getOptimizable()) instanceof Optimizable.ByValue)
      logger.info ("Evaluator iteration="+iteration+" cost="+((Optimizable.ByValue)opt).getValue());
    else
      logger.info ("Evaluator iteration="+iteration+" cost=NA (not Optimizable.ByValue)");
  }
 
  /** If this returns false, then the body of the evaluate(TransducerTrainer) method will not run.
   * Use this method to implement behaviors such as only evaluating every 5 iterations with
   * <code>
   * new TokenAccuracyEvaluator (crft) { public boolean precondition (TransducerTrainer tt) { return tt.getIteration() % 5 == 0; };
   * </code>*/
  public boolean precondition (TransducerTrainer tt) {
    return true;
  }

  public abstract void evaluateInstanceList (TransducerTrainer transducer, InstanceList instances, String description);


}
TOP

Related Classes of cc.mallet.fst.TransducerEvaluator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.