anls / compute_score.py
Viona's picture
writing README.md
95d4295
from Levenshtein import ratio
def compute_score(predictions, ground_truths):
theta = 0.5
anls_score = 0
total = 0
for qid, prediction in predictions.items():
max_value = 0
if qid in ground_truths:
for x in ground_truths[qid]:
total += 1
nl = ratio(prediction.lower(), x.lower())
if nl < theta:
score = 1 - nl
if score > max_value:
max_value = score
anls_score += max_value
return anls_score/total
if __name__ == "__main__":
predictions = [{'question_id': '10285', 'prediction_text': 'Denver R.'},
{'question_id': '18601', 'prediction_text': '12'},
{'question_id': '16734', 'prediction_text': 'dear'}]
references = [{"answers": ["Denver Broncos", "Denver R. Broncos"], 'question_id': '10285'},
{'answers': ['12/15/88'], 'question_id': '18601'},
{'answers': ['Dear Dr. Lobo', 'Dr. Lobo'], 'question_id': '16734'}]
ground_truths = {x['question_id']: x['answers'] for x in references}
predictions = {x['question_id']: x['prediction_text'] for x in predictions}
anls_score = compute_score(predictions=predictions, ground_truths=ground_truths)
print(anls_score)