@Override public TensorSufficientStatistics getNewSufficientStatistics() { return new TensorSufficientStatistics( featureVars, new DenseTensorBuilder( new int[] {0}, new int[] {initialWeights.getWeights().getValues().length})); }
@Override public void incrementSufficientStatisticsFromAssignment( SufficientStatistics gradient, SufficientStatistics currentParameters, Assignment assignment, double count) { Preconditions.checkArgument(assignment.containsAll(getVars().getVariableNumsArray())); Assignment subAssignment = assignment.intersection(getVars().getVariableNumsArray()); long keyNum = initialWeights .getWeights() .dimKeyToKeyNum(initialWeights.getVars().assignmentToIntArray(subAssignment)); int index = initialWeights.getWeights().keyNumToIndex(keyNum); ((TensorSufficientStatistics) gradient).incrementFeatureByIndex(count, index); }
private Tensor getFeatureWeights(SufficientStatistics parameters) { TensorSufficientStatistics featureParameters = (TensorSufficientStatistics) parameters; // Check that the parameters are a vector of the appropriate size. Preconditions.checkArgument(featureParameters.get().getDimensionNumbers().length == 1); Preconditions.checkArgument( featureParameters.get().getDimensionSizes()[0] == initialWeights.getWeights().getValues().length); return featureParameters.get(); }
@Override public String getParameterDescription(SufficientStatistics parameters, int numFeatures) { Tensor featureWeights = getFeatureWeights(parameters); TableFactor featureValues = new TableFactor( initialWeights.getVars(), initialWeights.getWeights().replaceValues(featureWeights.getValues())); List<Assignment> biggestAssignments = featureValues.product(featureValues).getMostLikelyAssignments(numFeatures); return featureValues.describeAssignments(biggestAssignments); }
@Override public TableFactor getModelFromParameters(SufficientStatistics parameters) { Tensor featureWeights = getFeatureWeights(parameters); double[] logProbs = featureWeights.getValues(); double[] probs = new double[logProbs.length]; for (int i = 0; i < logProbs.length; i++) { probs[i] = Math.exp(logProbs[i]); } return new TableFactor( initialWeights.getVars(), initialWeights.getWeights().replaceValues(probs)); }