public Entry<String, Double> classify(FeatureVector featureVector) throws Exceptions.FeatureTypeNotFoundException {
		List<String> startingFeatureTypes = FeatureTypes.backOffFeature("");

		String bestRoleName = "";
		double bestRoleProbability = Double.NEGATIVE_INFINITY;

		double roleProbability = 0.0;

		for (String role : featureValueRelativeRoleFrequency.get(Const.roleTypeIdentifier).keySet()) {
			featureVector.addFeature(Const.roleTypeIdentifier, role);
			//if(featureValueRelativeRoleFrequency.get(Const.roleTypeIdentifier).containsKey(role)){
				roleProbability = featureValueRelativeRoleFrequency.get(Const.roleTypeIdentifier).get(role) + getRoleProbability(startingFeatureTypes, featureVector);
			//} else{
			//	roleProbability = smoothingValue + getRoleProbability(startingFeatureTypes, featureVector);
			//}
			if (bestRoleProbability < roleProbability) {
				bestRoleProbability = roleProbability;
				bestRoleName = role;
			}
		}
		Entry<String, Double> bestRole;

		bestRole = new AbstractMap.SimpleEntry<String, Double>(bestRoleName, bestRoleProbability);
		return bestRole;
	}