private static CRFClassifier<CoreLabel> chooseCRFClassifier(SeqClassifierFlags flags) { CRFClassifier<CoreLabel> crf; // initialized in if/else if (flags.useFloat) { crf = new CRFClassifierFloat<>(flags); } else if (flags.nonLinearCRF) { crf = new CRFClassifierNonlinear<>(flags); } else if (flags.numLopExpert > 1) { crf = new CRFClassifierWithLOP<>(flags); } else if (flags.priorType.equals("DROPOUT")) { crf = new CRFClassifierWithDropout<>(flags); } else if (flags.useNoisyLabel) { crf = new CRFClassifierNoisyLabel<>(flags); } else { crf = new CRFClassifier<>(flags); } return crf; }
private double[] trainWeightsUsingNonLinearCRF(AbstractCachingDiffFunction func, Evaluator[] evaluators) { Minimizer<DiffFunction> minimizer = getMinimizer(0, evaluators);
@Override protected double[] trainWeights(int[][][][] data, int[][] labels, Evaluator[] evaluators, int pruneFeatureItr, double[][][][] featureVals) { if (flags.secondOrderNonLinear) { CRFNonLinearSecondOrderLogConditionalObjectiveFunction func = new CRFNonLinearSecondOrderLogConditionalObjectiveFunction(data, labels, windowSize, classIndex, labelIndices, map, flags, nodeFeatureIndicesMap.size(), edgeFeatureIndicesMap.size()); cliquePotentialFunctionHelper = func; double[] allWeights = trainWeightsUsingNonLinearCRF(func, evaluators); Quadruple<double[][], double[][], double[][], double[][]> params = func.separateWeights(allWeights); this.inputLayerWeights4Edge = params.first(); this.outputLayerWeights4Edge = params.second(); this.inputLayerWeights = params.third(); this.outputLayerWeights = params.fourth(); } else { CRFNonLinearLogConditionalObjectiveFunction func = new CRFNonLinearLogConditionalObjectiveFunction(data, labels, windowSize, classIndex, labelIndices, map, flags, nodeFeatureIndicesMap.size(), edgeFeatureIndicesMap.size(), featureVals); if (flags.useAdaGradFOBOS) { func.gradientsOnly = true; } cliquePotentialFunctionHelper = func; double[] allWeights = trainWeightsUsingNonLinearCRF(func, evaluators); Triple<double[][], double[][], double[][]> params = func.separateWeights(allWeights); this.linearWeights = params.first(); this.inputLayerWeights = params.second(); this.outputLayerWeights = params.third(); } return null; }
@Override public Triple<int[][][], int[], double[][][]> documentToDataAndLabels(List<IN> document) { Triple<int[][][], int[], double[][][]> result = super.documentToDataAndLabels(document); int[][][] data = result.first(); data = transformDocData(data); return new Triple<>(data, result.second(), result.third()); }
@Override public Triple<int[][][], int[], double[][][]> documentToDataAndLabels(List<IN> document) { Triple<int[][][], int[], double[][][]> result = super.documentToDataAndLabels(document); int[][][] data = result.first(); data = transformDocData(data); return new Triple<>(data, result.second(), result.third()); }
@Override public Triple<int[][][], int[], double[][][]> documentToDataAndLabels(List<IN> document) { Triple<int[][][], int[], double[][][]> result = super.documentToDataAndLabels(document); int[][][] data = result.first(); data = transformDocData(data); return new Triple<int[][][], int[], double[][][]>(data, result.second(), result.third()); }
private static CRFClassifier<CoreLabel> chooseCRFClassifier(SeqClassifierFlags flags) { CRFClassifier<CoreLabel> crf; // initialized in if/else if (flags.useFloat) { crf = new CRFClassifierFloat<CoreLabel>(flags); } else if (flags.nonLinearCRF) { crf = new CRFClassifierNonlinear<CoreLabel>(flags); } else if (flags.numLopExpert > 1) { crf = new CRFClassifierWithLOP<CoreLabel>(flags); } else if (flags.priorType.equals("DROPOUT")) { crf = new CRFClassifierWithDropout<CoreLabel>(flags); } else if (flags.useNoisyLabel) { crf = new CRFClassifierNoisyLabel<CoreLabel>(flags); } else { crf = new CRFClassifier<CoreLabel>(flags); } return crf; }
@Override protected double[] trainWeights(int[][][][] data, int[][] labels, Evaluator[] evaluators, int pruneFeatureItr, double[][][][] featureVals) { if (flags.secondOrderNonLinear) { CRFNonLinearSecondOrderLogConditionalObjectiveFunction func = new CRFNonLinearSecondOrderLogConditionalObjectiveFunction(data, labels, windowSize, classIndex, labelIndices, map, flags, nodeFeatureIndicesMap.size(), edgeFeatureIndicesMap.size()); cliquePotentialFunctionHelper = func; double[] allWeights = trainWeightsUsingNonLinearCRF(func, evaluators); Quadruple<double[][], double[][], double[][], double[][]> params = func.separateWeights(allWeights); this.inputLayerWeights4Edge = params.first(); this.outputLayerWeights4Edge = params.second(); this.inputLayerWeights = params.third(); this.outputLayerWeights = params.fourth(); } else { CRFNonLinearLogConditionalObjectiveFunction func = new CRFNonLinearLogConditionalObjectiveFunction(data, labels, windowSize, classIndex, labelIndices, map, flags, nodeFeatureIndicesMap.size(), edgeFeatureIndicesMap.size(), featureVals); if (flags.useAdaGradFOBOS) { func.gradientsOnly = true; } cliquePotentialFunctionHelper = func; double[] allWeights = trainWeightsUsingNonLinearCRF(func, evaluators); Triple<double[][], double[][], double[][]> params = func.separateWeights(allWeights); this.linearWeights = params.first(); this.inputLayerWeights = params.second(); this.outputLayerWeights = params.third(); } return null; }
private double[] trainWeightsUsingNonLinearCRF(AbstractCachingDiffFunction func, Evaluator[] evaluators) { Minimizer minimizer = getMinimizer(0, evaluators);
private static CRFClassifier<CoreLabel> chooseCRFClassifier(SeqClassifierFlags flags) { CRFClassifier<CoreLabel> crf; // initialized in if/else if (flags.useFloat) { crf = new CRFClassifierFloat<>(flags); } else if (flags.nonLinearCRF) { crf = new CRFClassifierNonlinear<>(flags); } else if (flags.numLopExpert > 1) { crf = new CRFClassifierWithLOP<>(flags); } else if (flags.priorType.equals("DROPOUT")) { crf = new CRFClassifierWithDropout<>(flags); } else if (flags.useNoisyLabel) { crf = new CRFClassifierNoisyLabel<>(flags); } else { crf = new CRFClassifier<>(flags); } return crf; }
@Override protected double[] trainWeights(int[][][][] data, int[][] labels, Evaluator[] evaluators, int pruneFeatureItr, double[][][][] featureVals) { if (flags.secondOrderNonLinear) { CRFNonLinearSecondOrderLogConditionalObjectiveFunction func = new CRFNonLinearSecondOrderLogConditionalObjectiveFunction(data, labels, windowSize, classIndex, labelIndices, map, flags, nodeFeatureIndicesMap.size(), edgeFeatureIndicesMap.size()); cliquePotentialFunctionHelper = func; double[] allWeights = trainWeightsUsingNonLinearCRF(func, evaluators); Quadruple<double[][], double[][], double[][], double[][]> params = func.separateWeights(allWeights); this.inputLayerWeights4Edge = params.first(); this.outputLayerWeights4Edge = params.second(); this.inputLayerWeights = params.third(); this.outputLayerWeights = params.fourth(); } else { CRFNonLinearLogConditionalObjectiveFunction func = new CRFNonLinearLogConditionalObjectiveFunction(data, labels, windowSize, classIndex, labelIndices, map, flags, nodeFeatureIndicesMap.size(), edgeFeatureIndicesMap.size(), featureVals); if (flags.useAdaGradFOBOS) { func.gradientsOnly = true; } cliquePotentialFunctionHelper = func; double[] allWeights = trainWeightsUsingNonLinearCRF(func, evaluators); Triple<double[][], double[][], double[][]> params = func.separateWeights(allWeights); this.linearWeights = params.first(); this.inputLayerWeights = params.second(); this.outputLayerWeights = params.third(); } return null; }
private double[] trainWeightsUsingNonLinearCRF(AbstractCachingDiffFunction func, Evaluator[] evaluators) { Minimizer<DiffFunction> minimizer = getMinimizer(0, evaluators);