101 lines
2.3 KiB
Python
101 lines
2.3 KiB
Python
import evaluate as eval
|
|
|
|
BLEU = eval.load("bleu")
|
|
ROUGE = eval.load("rouge")
|
|
METEOR = eval.load("meteor")
|
|
|
|
def precision(ref: list[int], pred: list[int]):
|
|
metric = eval.load("precision")
|
|
return metric.compute(predictions=pred, references=ref, average="weighted", zero_division=0)
|
|
|
|
|
|
def recall(ref: list[int], pred: list[int]):
|
|
metric = eval.load("recall")
|
|
return metric.compute(predictions=pred, references=ref, average="weighted", zero_division=0)
|
|
|
|
|
|
def accuracy(ref: list[int], pred: list[int]):
|
|
metric = eval.load("accuracy")
|
|
return metric.compute(predictions=pred, references=ref)
|
|
|
|
|
|
def meteor(ref: list[str], pred: list[str]):
|
|
metric = METEOR
|
|
return metric.compute(predictions=pred, references=ref)
|
|
|
|
|
|
def bleu(ref: list[str], pred: list[str]):
|
|
metric = BLEU
|
|
return metric.compute(predictions=pred, references=ref)
|
|
|
|
|
|
def rouge(ref: list[str], pred: list[str]):
|
|
metric = ROUGE
|
|
return metric.compute(predictions=pred, references=ref)
|
|
|
|
|
|
def f1(precision: float, recall: float):
|
|
divisor = max((precision + recall), 1E-5)
|
|
return (2 * recall * precision) / divisor
|
|
|
|
|
|
def average(array: list[float]):
|
|
return sum(array) / len(array)
|
|
|
|
|
|
def rdf2txt(ref: list[str], pred: list[str]):
|
|
|
|
b_m = bleu(ref, pred)
|
|
r_m = rouge(ref, pred)
|
|
m_m = meteor(ref, pred)
|
|
|
|
return (b_m, r_m, m_m)
|
|
|
|
def txt2rdf(ref: list[int], pred: list[int]):
|
|
|
|
p_m = precision(ref, pred)
|
|
r_m = recall(ref, pred)
|
|
|
|
return (p_m, r_m)
|
|
|
|
def rdf_completion_1(ref: list[int], pred: list[int]):
|
|
|
|
a_m = accuracy(ref, pred)
|
|
|
|
return a_m
|
|
|
|
|
|
def rdf_completion_2(ref: list[int], pred: list[int]):
|
|
|
|
p_m = precision(ref, pred)
|
|
r_m = recall(ref, pred)
|
|
|
|
return (p_m, r_m)
|
|
|
|
|
|
def remove_padding(seq: list[int], pad_token: int, end_token: int):
|
|
clean_seq = list(filter(lambda x: x != pad_token, seq))
|
|
|
|
if clean_seq[-1] == end_token:
|
|
return clean_seq
|
|
|
|
clean_seq.append(
|
|
end_token
|
|
)
|
|
|
|
return clean_seq
|
|
|
|
|
|
def balance_paddings(seq_1: list[int], seq_2: list[int], pad_token: int):
|
|
SEQ_1_LEN = len(seq_1)
|
|
SEQ_2_LEN = len(seq_2)
|
|
|
|
if SEQ_1_LEN > SEQ_2_LEN:
|
|
PAD = [pad_token] * (SEQ_1_LEN - SEQ_2_LEN)
|
|
seq_2.extend(PAD)
|
|
|
|
if SEQ_2_LEN > SEQ_1_LEN:
|
|
seq_2 = seq_2[:SEQ_1_LEN]
|
|
|
|
return (seq_1, seq_2)
|