anls / compute_score.py
Viona's picture
adding ANLS logic
29d0f05
raw
history blame
1.42 kB
from Levenshtein import ratio
def anls_compute(predictions, ground_truths):
theta = 0.5
anls_score = 0
for qid, prediction in predictions.items():
max_value = 0
if qid in ground_truths:
for x in ground_truths[qid]:
nl = ratio(prediction, x)
if nl < theta:
score = 1 - nl
if score > max_value:
max_value = score
anls_score += max_value
return anls_score
def compute_score(dataset, prediction):
ground_truths = {x['question_id']: x['answers'] for x in dataset}
predictions = {x['question_id']: x['prediction_text'] for x in prediction}
anls_score = anls_compute(predictions=predictions, ground_truths=ground_truths)
return {"anls_score": anls_score}
if __name__ == "__main__":
prediction = [{'question_id': '10285', 'prediction_text': 'Denver Broncos'},
{'question_id': '18601', 'prediction_text': '12/15/89'},
{'question_id': '16734', 'prediction_text': 'Dear dr. Lobo'}]
dataset = [{"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'}]
anls_score = compute_score(dataset=dataset, prediction=prediction)
print(anls_score)