Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import rapidfuzz | |
| import sklearn | |
| from data import ValuesType, BenetechOutput, Annotation | |
| def normalized_rmse(expected: list[float], predicted: list[float]) -> float: | |
| return (1 - sklearn.metrics.r2_score(expected, predicted)) ** 0.5 | |
| def normalized_levenshtein_distance(expected: list[str], predicted: list[str]) -> float: | |
| total_distance = 0 | |
| for e, p in zip(expected, predicted): | |
| total_distance += rapidfuzz.distance.Levenshtein.distance(e, p) | |
| total_length = np.sum([len(e) for e in expected]) | |
| return total_distance / total_length | |
| def sigmoid(x): | |
| return 1 / (1 + np.exp(-x)) | |
| def positive_loss_to_score(x): | |
| return 2 * sigmoid(-x) | |
| def score_axis_values(values_type, expected, predicted): | |
| if values_type == ValuesType.numerical: | |
| loss = normalized_rmse(expected, predicted) | |
| else: | |
| loss = normalized_levenshtein_distance(expected, predicted) | |
| return positive_loss_to_score(loss) | |
| def benetech_score(expected: BenetechOutput, predicted: BenetechOutput) -> float: | |
| if expected.get_main_characteristics() != predicted.get_main_characteristics(): | |
| return 0 | |
| x_score = score_axis_values( | |
| expected.x_values_type, expected.x_data, predicted.x_data | |
| ) | |
| y_score = score_axis_values( | |
| expected.y_values_type, expected.y_data, predicted.y_data | |
| ) | |
| return (x_score + y_score) / 2 | |
| def benetech_score_string_prediction(expected_data_index: int, predicted_string: str): | |
| if not BenetechOutput.does_string_match_expected_pattern(predicted_string): | |
| return 0 | |
| expected_annotation = Annotation.from_image_index(expected_data_index) | |
| expected_output = BenetechOutput.from_annotation(expected_annotation) | |
| predicted_output = BenetechOutput.from_string(predicted_string) | |
| return benetech_score(expected_output, predicted_output) | |