Spaces:
Running
Running
import torch | |
import numpy as np | |
from nltk.translate.bleu_score import sentence_bleu | |
from transformers import BertTokenizer, BertModel | |
# Function to Calculate the BLEU score | |
def calculate_bleu(reference, candidate): | |
return sentence_bleu([reference], candidate) | |
# Function to calculate BERT score | |
def calculate_bert(reference, candidate): | |
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') | |
model = BertModel.from_pretrained('bert-base-uncased') | |
reference_tokens = tokenizer.tokenize(reference) | |
candidate_tokens = tokenizer.tokenize(candidate) | |
reference_ids = tokenizer.encode(reference, add_special_tokens=True, max_length=512, truncation=True, return_tensors="pt") | |
candidate_ids = tokenizer.encode(candidate, add_special_tokens=True, max_length=512, truncation=True, return_tensors="pt") | |
with torch.no_grad(): | |
reference_outputs = model(reference_ids) | |
candidate_outputs = model(candidate_ids) | |
reference_embeddings = reference_outputs[0][:, 0, :].numpy() | |
candidate_embeddings = candidate_outputs[0][:, 0, :].numpy() | |
cosine_similarity = np.dot(reference_embeddings, candidate_embeddings.T) / (np.linalg.norm(reference_embeddings) * np.linalg.norm(candidate_embeddings)) | |
return np.mean(cosine_similarity) | |
# Function to calculate minimum edit distance | |
def min_edit_distance(reference, candidate): | |
m = len(reference) | |
n = len(candidate) | |
dp = [[0] * (n + 1) for _ in range(m + 1)] | |
for i in range(m + 1): | |
for j in range(n + 1): | |
if i == 0: | |
dp[i][j] = j | |
elif j == 0: | |
dp[i][j] = i | |
elif reference[i - 1] == candidate[j - 1]: | |
dp[i][j] = dp[i - 1][j - 1] | |
else: | |
dp[i][j] = 1 + min(dp[i][j - 1], # Insert | |
dp[i - 1][j], # Remove | |
dp[i - 1][j - 1]) # Replace | |
return dp[m][n] |