private double predict(List<Feature> features) throws CleartkProcessingException { TreeFeatureVector featureVector = featuresEncoder.encodeAll(features); return model.evaluate(featureVector); } }
@Override public void saveToTrainingDirectory(File dir) throws IOException { super.saveToTrainingDirectory(dir); // finalize the encoder feature set this.featuresEncoder.finalizeFeatureSet(dir); this.outcomeEncoder.finalizeOutcomeSet(dir); // save the encoders to the directory File encodersFile = getEncodersFile(dir); OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(encodersFile)); ObjectOutputStream os = new ObjectOutputStream(outputStream); os.writeObject(this.featuresEncoder); os.writeObject(this.outcomeEncoder); os.close(); outputStream.close(); }
private double predict(List<Feature> features) throws CleartkProcessingException { TreeFeatureVector featureVector = featuresEncoder.encodeAll(features); return model.evaluate(featureVector); } }
protected String featuresToString(List<Feature> features) throws CleartkEncoderException { StringBuilder buf = new StringBuilder(); FeatureVector encodedFeats = this.featuresEncoder.encodeAll(features); if (encodedFeats != null) { for (FeatureVector.Entry featureNode : this.featuresEncoder.encodeAll(features)) { buf.append(String.format(Locale.US, " %d:%.7f", featureNode.index, featureNode.value)); } } else { for (Feature feat : features) { buf.append(' '); buf.append(feat.getValue()); } } return buf.substring(1); } }
@Override public Map<Boolean, Double> score(List<Feature> features) throws CleartkProcessingException { FeatureVector featureVector = featuresEncoder.encodeAll(features); double prediction = sigmoid.evaluate(model.evaluate(featureVector)); Map<Boolean, Double> scores = Maps.newHashMap(); scores.put(true, prediction); scores.put(false, 1 - prediction); return scores; } }
@Override public Map<Boolean, Double> score(List<Feature> features) throws CleartkProcessingException { FeatureVector featureVector = featuresEncoder.encodeAll(features); double prediction = sigmoid.evaluate(model.evaluate(featureVector)); Map<Boolean, Double> scores = Maps.newHashMap(); scores.put(true, prediction); scores.put(false, 1 - prediction); return scores; } }
@Override public Map<String, Double> score(List<Feature> features) throws CleartkProcessingException { FeatureVector featureVector = this.featuresEncoder.encodeAll(features); Map<String, Double> results = Maps.newHashMap(); for (int i : models.keySet()) { double score = score(featureVector, i); String name = outcomeEncoder.decode(i); results.put(name, score); } return results; }
@Override public Map<String, Double> score(List<Feature> features) throws CleartkProcessingException { FeatureVector featureVector = this.featuresEncoder.encodeAll(features); Map<String, Double> results = Maps.newHashMap(); for (int i : models.keySet()) { double score = score(featureVector, i); String name = outcomeEncoder.decode(i); results.put(name, score); } return results; }
/** * Converts the features into a 2D string array that Mallet can use. The only thing mildly tricky * about this method is that the length of each string array is one more than the size of each * feature list - i.e. <code>returnValues[0].length == features.get(0).size() + 1</code> where the * last element in each string array is an empty string. * * @param features * the features to be converted. * @return a 2D string array that Mallet can use. */ private String[][] toStrings(List<List<Feature>> features) throws CleartkEncoderException { List<List<String>> encodedFeatures = new ArrayList<List<String>>(features.size()); for (List<Feature> features1 : features) { List<NameNumber> nameNumbers = this.featuresEncoder.encodeAll(features1); List<String> encodedFeatures1 = new ArrayList<String>(); for (NameNumber nameNumber : nameNumbers) { encodedFeatures1.add(nameNumber.name); } encodedFeatures.add(encodedFeatures1); } String[][] encodedFeaturesArray = new String[encodedFeatures.size()][]; for (int i = 0; i < encodedFeatures.size(); i++) { String[] encodedFeaturesArray1 = encodedFeatures.get(i).toArray(new String[0]); encodedFeaturesArray[i] = encodedFeaturesArray1; } return encodedFeaturesArray; } }
/** * Converts the features into a 2D string array that Mallet can use. The only thing mildly tricky * about this method is that the length of each string array is one more than the size of each * feature list - i.e. <code>returnValues[0].length == features.get(0).size() + 1</code> where the * last element in each string array is an empty string. * * @param features * the features to be converted. * @return a 2D string array that Mallet can use. */ private String[][] toStrings(List<List<Feature>> features) throws CleartkEncoderException { List<List<String>> encodedFeatures = new ArrayList<List<String>>(features.size()); for (List<Feature> features1 : features) { List<NameNumber> nameNumbers = this.featuresEncoder.encodeAll(features1); List<String> encodedFeatures1 = new ArrayList<String>(); for (NameNumber nameNumber : nameNumbers) { encodedFeatures1.add(nameNumber.name); } encodedFeatures.add(encodedFeatures1); } String[][] encodedFeaturesArray = new String[encodedFeatures.size()][]; for (int i = 0; i < encodedFeatures.size(); i++) { String[] encodedFeaturesArray1 = encodedFeatures.get(i).toArray(new String[0]); encodedFeaturesArray[i] = encodedFeaturesArray1; } return encodedFeaturesArray; } }
/** * Score a list of features against the various models used by the One Verse All SVM classifier. * * @param features * The features to classify * @return A map from String outcomes to likelihood. */ @Override public Map<String, Double> score(List<Feature> features) throws CleartkProcessingException { TreeFeatureVector featureVector = this.featuresEncoder.encodeAll(features); Map<String, Double> results = Maps.newHashMap(); for (int i : models.keySet()) { double score = predict(featureVector, i); String name = outcomeEncoder.decode(i); results.put(name, score); } return results; }
public String classify(List<Feature> features) throws CleartkProcessingException { FeatureVector featureVector = this.featuresEncoder.encodeAll(features); int maxScoredIndex = 0; double maxScore = 0; boolean first = true; for (int i : models.keySet()) { double score = score(featureVector, i); if (first || score > maxScore) { first = false; maxScore = score; maxScoredIndex = i; } } return outcomeEncoder.decode(maxScoredIndex); }
public String classify(List<Feature> features) throws CleartkProcessingException { FeatureVector featureVector = this.featuresEncoder.encodeAll(features); int maxScoredIndex = 0; double maxScore = 0; boolean first = true; for (int i : models.keySet()) { double score = score(featureVector, i); if (first || score > maxScore) { first = false; maxScore = score; maxScoredIndex = i; } } return outcomeEncoder.decode(maxScoredIndex); }
/** * Score a list of features against the various models used by the One Verse All SVM classifier. * * @param features * The features to classify * @return A map from String outcomes to likelihood. */ @Override public Map<String, Double> score(List<Feature> features) throws CleartkProcessingException { TreeFeatureVector featureVector = this.featuresEncoder.encodeAll(features); Map<String, Double> results = Maps.newHashMap(); for (int i : models.keySet()) { double score = predict(featureVector, i); String name = outcomeEncoder.decode(i); results.put(name, score); } return results; }
@Override public OUTCOME_TYPE classify(List<Feature> features) throws CleartkProcessingException { FeatureNode[] encodedFeatures = this.featuresEncoder.encodeAll(features); int encodedOutcome = (int)Linear.predict(this.model, encodedFeatures); return this.outcomeEncoder.decode(encodedOutcome); }
public Instance toInstance(List<Feature> features) throws CleartkEncoderException { List<NameNumber> nameNumbers = featuresEncoder.encodeAll(features); Iterator<NameNumber> nameNumberIterator = nameNumbers.iterator(); while (nameNumberIterator.hasNext()) { NameNumber nameNumber = nameNumberIterator.next(); if (!alphabet.contains(nameNumber.name)) nameNumberIterator.remove(); } String[] keys = new String[nameNumbers.size()]; double[] values = new double[nameNumbers.size()]; for (int i = 0; i < nameNumbers.size(); i++) { NameNumber nameNumber = nameNumbers.get(i); keys[i] = nameNumber.name; values[i] = nameNumber.number.doubleValue(); } int[] keyIndices = FeatureVector.getObjectIndices(keys, alphabet, true); FeatureVector fv = new FeatureVector(alphabet, keyIndices, values); Instance instance = new Instance(fv, null, null, null); return instance; } }
public List<String> classifyFeatures( List<List<Feature>> features, OutcomeEncoder<String, String> outcomeEncoder, FeaturesEncoder<List<NameNumber>> featuresEncoder, File modelFile) throws IOException { File featureFile = File.createTempFile("features", ".crfsuite"); featureFile.deleteOnExit(); logger.log(Level.FINE, "Write features to classify to " + featureFile.getAbsolutePath()); try { BufferedWriter out = new BufferedWriter(new FileWriter(featureFile)); for (List<Feature> f : features) { List<NameNumber> fe; fe = featuresEncoder.encodeAll(f); for (NameNumber nn : fe) { out.append(nn.name); out.append("\t"); } out.append("\n"); } out.close(); return classifyFeatures(featureFile, modelFile, features.size()); } catch (CleartkEncoderException e) { logger.log(Level.WARNING, e.getMessage()); } return null; }
public Instance toInstance(List<Feature> features) throws CleartkEncoderException { List<NameNumber> nameNumbers = featuresEncoder.encodeAll(features); Iterator<NameNumber> nameNumberIterator = nameNumbers.iterator(); while (nameNumberIterator.hasNext()) { NameNumber nameNumber = nameNumberIterator.next(); if (!alphabet.contains(nameNumber.name)) nameNumberIterator.remove(); } String[] keys = new String[nameNumbers.size()]; double[] values = new double[nameNumbers.size()]; for (int i = 0; i < nameNumbers.size(); i++) { NameNumber nameNumber = nameNumbers.get(i); keys[i] = nameNumber.name; values[i] = nameNumber.number.doubleValue(); } int[] keyIndices = FeatureVector.getObjectIndices(keys, alphabet, true); FeatureVector fv = new FeatureVector(alphabet, keyIndices, values); Instance instance = new Instance(fv, null, null, null); return instance; } }
public List<String> classifyFeatures( List<List<Feature>> features, OutcomeEncoder<String, String> outcomeEncoder, FeaturesEncoder<List<NameNumber>> featuresEncoder, File modelFile) throws IOException { File featureFile = File.createTempFile("features", ".crfsuite"); featureFile.deleteOnExit(); logger.log(Level.FINE, "Write features to classify to " + featureFile.getAbsolutePath()); try { BufferedWriter out = new BufferedWriter(new FileWriter(featureFile)); for (List<Feature> f : features) { List<NameNumber> fe; fe = featuresEncoder.encodeAll(f); for (NameNumber nn : fe) { out.append(nn.name); out.append("\t"); } out.append("\n"); } out.close(); return classifyFeatures(featureFile, modelFile, features.size()); } catch (CleartkEncoderException e) { logger.log(Level.WARNING, e.getMessage()); } return null; }
@Override public Map<OUTCOME_TYPE, Double> score(List<Feature> features) throws CleartkProcessingException { FeatureVector featureVector = this.featuresEncoder.encodeAll(features); double[] decisionValues = new double[this.model.nr_class]; libsvm.svm.svm_predict_probability(this.model, convertToLIBSVM(featureVector), decisionValues); Map<OUTCOME_TYPE, Double> results = Maps.newHashMap(); for (int i = 0; i < this.model.nr_class; ++i) { int intLabel = this.model.label[i]; OUTCOME_TYPE outcome = this.outcomeEncoder.decode(this.decodePrediction(intLabel)); results.put(outcome, decisionValues[i]); } return results; }