calhoun.analysis.crf.solver.semimarkov
Class CleanLocalScoreSemiMarkovGradient

java.lang.Object
  extended by calhoun.analysis.crf.solver.semimarkov.CleanMaximumLikelihoodSemiMarkovGradient
      extended by calhoun.analysis.crf.solver.semimarkov.CleanLocalScoreSemiMarkovGradient
All Implemented Interfaces:
CRFObjectiveFunctionGradient
Direct Known Subclasses:
MaximumExpectedAccuracySemiMarkovGradient

public class CleanLocalScoreSemiMarkovGradient
extends CleanMaximumLikelihoodSemiMarkovGradient

computes an objective function which is the expected value of a local path similarity score on a semi-Markov model. Requires a CacheProcessor and a LocalPathSimilarityScore to be configured.

Debugging output

To get a better understanding of what the objective function is doing, several different properties can be set that cause the objective function to write out trace files showing its calculations during training. Usually when turning these options on, you should set maxIters = 1 and requireConvergence = false in your optimizer to do only a single training iteration, possibly setting the starts to some predetermined value. Each of these properties can be configured with a filename and each time apply(double[], double[]) is called, the file will be overwritten with data from the current call. The logging options are:

Implementation Notes

The general normalization scheme works as follows. When updating alpha values in the forward pass we compute segments of length 1 first and then work backwards.

Instead of always normalizing to 1 we discretize the normalization. We choose an arbitrary normalization factor w, such as 50. The normalization factor at any position is then an integer v, and all entries at that position are alpha[y]*e^(v*w).

The normalization can be computed at any position from 1) Elements of the alpha array are summed s 2) v = log(s)/w. By integer division v will always be an appropriate normalizer. It may be positive or negative. 3) All elements of the array are divided by e^(v*w)


Field Summary
 
Fields inherited from class calhoun.analysis.crf.solver.semimarkov.CleanMaximumLikelihoodSemiMarkovGradient
ASSERTION_TOLERANCE, debug, NORM_FACTOR, NORM_MAX, NORM_MIN
 
Constructor Summary
CleanLocalScoreSemiMarkovGradient()
           
 
Method Summary
 double apply(double[] param, double[] grad)
          computes the objective function value and the gradient.
 java.lang.String getExpectedProductFile()
           
 java.lang.String getMarginalsFile()
           
 LocalPathSimilarityScore getScore()
          gets the local similarity score function used to score each position in every path.
 java.lang.String getScoreAlphaFile()
           
 void setExpectedProductFile(java.lang.String expectedProductFile)
           
 void setMarginalsFile(java.lang.String marginalsFile)
           
 void setScore(LocalPathSimilarityScore score)
          sets the local similarity score function used to score each position in every path.
 void setScoreAlphaFile(java.lang.String scoreAlphaFile)
           
 void setTrainingData(ModelManager fm, java.util.List<? extends TrainingSequence<?>> data)
          sets the training data that will be used for evaluation of the objective function.
 
Methods inherited from class calhoun.analysis.crf.solver.semimarkov.CleanMaximumLikelihoodSemiMarkovGradient
clean, getAlphaFile, getAlphaLengthFile, getBetaLengthFile, getCacheProcessor, getExpectFile, getExpectLengthFile, getNodeMarginalFile, printNorm, setAlphaFile, setAlphaLengthFile, setBetaLengthFile, setCacheProcessor, setExpectFile, setExpectLengthFile, setNodeMarginalFile
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

CleanLocalScoreSemiMarkovGradient

public CleanLocalScoreSemiMarkovGradient()
Method Detail

setTrainingData

public void setTrainingData(ModelManager fm,
                            java.util.List<? extends TrainingSequence<?>> data)
Description copied from interface: CRFObjectiveFunctionGradient
sets the training data that will be used for evaluation of the objective function. This function will be called before apply is called to set up the training data. Since it is expected that apply will be called many times, this funtion is the place to do one time setup and caching.

Specified by:
setTrainingData in interface CRFObjectiveFunctionGradient
Overrides:
setTrainingData in class CleanMaximumLikelihoodSemiMarkovGradient
Parameters:
fm - the model to use. Defines the hidden states, transitions, and features.
data - the training sequences on which to calculate the objective function.

apply

public double apply(double[] param,
                    double[] grad)
Description copied from interface: CRFObjectiveFunctionGradient
computes the objective function value and the gradient. This function will be called for each iteration of the numerical solver during training. In each iteration it takes a new set of feature weights and computes a value for the objective function along with its gradient.

Specified by:
apply in interface CRFObjectiveFunctionGradient
Overrides:
apply in class CleanMaximumLikelihoodSemiMarkovGradient
Parameters:
param - an array of feature weights to use. The length will equal the number of features in the model, and the values will change for each call to apply.
grad - an array which must be filled with the gradient vector when the function returns. For each feature index, the array should contain an entry with the partial derivative with respect to that feature.
Returns:
the value of the objective function. This is what the numerical optimizer will attempt to maximize.

getScore

public LocalPathSimilarityScore getScore()
gets the local similarity score function used to score each position in every path.

Returns:
the configured score function

setScore

public void setScore(LocalPathSimilarityScore score)
sets the local similarity score function used to score each position in every path. This is usually specified in the XML configuration file.

Parameters:
score - the score function to use

getScoreAlphaFile

public java.lang.String getScoreAlphaFile()

setScoreAlphaFile

public void setScoreAlphaFile(java.lang.String scoreAlphaFile)

getExpectedProductFile

public java.lang.String getExpectedProductFile()

setExpectedProductFile

public void setExpectedProductFile(java.lang.String expectedProductFile)

getMarginalsFile

public java.lang.String getMarginalsFile()

setMarginalsFile

public void setMarginalsFile(java.lang.String marginalsFile)