package edu.stanford.nlp.ie.crf; /** * @author Mengqiu Wang */ public class NoisyLabelLinearCliquePotentialFunction implements CliquePotentialFunction { private final double[][] weights; private final int[] docLabels; private final double[][] errorMatrix; public NoisyLabelLinearCliquePotentialFunction(double[][] weights, int[] docLabels, double[][] errorMatrix) { this.weights = weights; this.docLabels = docLabels; this.errorMatrix = errorMatrix; } private double g(int labelIndex, int posInSent) { if (errorMatrix == null) return 0; int observed = docLabels[posInSent]; return errorMatrix[labelIndex][observed]; } @Override public double computeCliquePotential(int cliqueSize, int labelIndex, int[] cliqueFeatures, double[] featureVal, int posInSent) { double output = 0.0; double dotProd = 0; for (int cliqueFeature : cliqueFeatures) { dotProd = weights[cliqueFeature][labelIndex]; output += dotProd; } if (cliqueSize == 1) { // add the noisy label part output += g(labelIndex, posInSent); } return output; } }