public Double getRoleProbability(List<String> featureTypes, FeatureVector featureVector) throws Exceptions.FeatureTypeNotFoundException {

		if (featureTypes == null)
			return smoothingValue;

		double probability = 0.0;

		for (String featureType : featureTypes) {
			String fullFeatureType = Const.roleTypeIdentifier + Const.splitChar + featureType;
			if (featureValueRelativeRoleFrequency.containsKey(fullFeatureType)) {
				String featureValue = featureVector.getFeatureValue(fullFeatureType);

				if (featureValueRelativeRoleFrequency.get(fullFeatureType).containsKey(featureValue)) {

					probability += featureValueRelativeRoleFrequency.get(fullFeatureType).get(featureValue);

				} else {
					//try{
					probability += getRoleProbability(FeatureTypes.backOffFeature(featureType), featureVector);
				}

			} else {
				probability += getRoleProbability(FeatureTypes.backOffFeature(featureType), featureVector);
			}
		}

		return probability;
	}