-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathevaluate.py
More file actions
116 lines (97 loc) · 3.78 KB
/
Copy pathevaluate.py
File metadata and controls
116 lines (97 loc) · 3.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import numpy as np
from datasets import Dataset
from rouge_score import rouge_scorer
from sentence_transformers import SentenceTransformer, util
semantic_model = SentenceTransformer('all-MiniLM-L6-v2')
def compute_similarity_scores_text(text_ref : str, text_2 : str) -> float:
reference_embedding = semantic_model.encode(text_ref, convert_to_tensor=True)
sentence_embedding = semantic_model.encode(text_2, convert_to_tensor=True)
return util.cos_sim(reference_embedding, sentence_embedding).cpu()
def compute_rouge(test_dataset : Dataset, model) -> dict[str, dict[str, str]]:
scores = []
metrics = ['rouge1', 'rouge2', 'rougeL']
scorer = rouge_scorer.RougeScorer(
metrics,
use_stemmer=True
)
for i in range(len(test_dataset)):
example = test_dataset[i]
original_text = example['original_text']
reference_summary = example['reference_summary']
_, generated_summary = model(original_text)
scores.append(
scorer.score(
generated_summary,
reference_summary
)
)
final_scores = {
metric: {
"precision": str(np.mean(
[score.get(metric).precision for score in scores]
)),
"recall": str(np.mean(
[score.get(metric).recall for score in scores]
)),
"fmeasure": str(np.mean(
[score.get(metric).fmeasure for score in scores]
)),
}
for metric in metrics
}
return final_scores
def compute_similarity_scores(test_dataset : Dataset, model) -> dict[str, dict[str, str]]:
scores_with_reference = []
scores_with_original_text = []
for i in range(len(test_dataset)):
example = test_dataset[i]
original_text = example['original_text']
reference_summary = example['reference_summary']
_, generated_summary = model(original_text)
reference_embeddings = semantic_model.encode(
reference_summary,
convert_to_tensor=True
)
original_text_embeddings = semantic_model.encode(
original_text,
convert_to_tensor=True
)
generated_embeddings = semantic_model.encode(
generated_summary,
convert_to_tensor=True
)
scores_with_reference.append(
util.cos_sim(
reference_embeddings,
generated_embeddings).cpu()
)
scores_with_original_text.append(
util.cos_sim(
original_text_embeddings,
generated_embeddings).cpu()
)
final_scores = {
"similarity_with_reference_summary": {
"mean": str(np.mean(scores_with_reference)),
"median": str(np.median(scores_with_reference)),
"std": str(np.std(scores_with_reference))
},
"similarity_with_original_text": {
"mean": str(np.mean(scores_with_original_text)),
"median": str(np.median(scores_with_original_text)),
"std": str(np.std(scores_with_original_text))
}
}
return final_scores
def evaluate(test_dataset : Dataset, model):
perf_dict = {
"Rouge": compute_rouge(test_dataset, model),
"Similarity": compute_similarity_scores(test_dataset, model)
}
score_rouge, score_sim = 0, 0
performance_rouge = perf_dict['Rouge']
performance_sim = perf_dict['Similarity']
for metric in performance_rouge.values():
score_rouge += float(metric['fmeasure'])
score_sim = (2*float(performance_sim['similarity_with_reference_summary']['mean'])+float(performance_sim['similarity_with_original_text']['mean'])) / 3
return score_rouge / 3, score_sim, perf_dict