Spaces:
Sleeping
Sleeping
import warnings | |
warnings.filterwarnings('ignore') | |
import logging | |
logging.disable(logging.WARNING) | |
import torch | |
import numpy as np | |
import random | |
from transformers import AutoModel, AutoTokenizer | |
from Mbert import MBERTClassifier, SentencePairDataset | |
from torch.utils.data import DataLoader | |
#from evidence_retrieval import evidence_top_n, similarities | |
from config import hf_token | |
import pandas as pd | |
# Thiết lập seed cố định | |
def set_seed(seed): | |
random.seed(seed) | |
np.random.seed(seed) | |
torch.manual_seed(seed) | |
if torch.cuda.is_available(): | |
torch.cuda.manual_seed(seed) | |
torch.cuda.manual_seed_all(seed) | |
torch.backends.cudnn.deterministic = True | |
torch.backends.cudnn.benchmark = False | |
# Gọi hàm set_seed với seed cố định, ví dụ: 42 | |
set_seed(42) | |
device = torch.device("cpu") | |
modelname = "SonFox2920/MBert_FC" | |
tokenizer = AutoTokenizer.from_pretrained(modelname, token=hf_token) | |
mbert = AutoModel.from_pretrained(modelname, token=hf_token).to(device) | |
model = MBERTClassifier(mbert, num_classes=3).to(device) | |
model.load_state_dict(torch.load('Model/classifier.pt', map_location=device)) | |
def predict(context, claim): | |
data = pd.DataFrame([{'context': context, 'claim': claim}]) | |
# list_evidence_top5 = [] | |
# list_evidence_top1 = [] | |
# for i in range(len(data)): | |
# statement = data.claim[i] | |
# context = data.context[i] | |
# evidence_top5, top5_consine = evidence_top_n(context, statement) | |
# evidence_top1, top1_consine, rank_5 = similarities(evidence_top5, statement, top5_consine) | |
# evidence_top1 = "".join(evidence_top1) | |
# list_evidence_top5.append(rank_5) | |
# list_evidence_top1.append(evidence_top1) | |
# data['evidence_top5'] = list_evidence_top5 | |
# data['evidence'] = list_evidence_top1 | |
X1_pub_test = data['claim'] | |
X2_pub_test = data['context'] | |
X_pub_test = [(X1_pub_test, X2_pub_test) for (X1_pub_test, X2_pub_test) in zip(X1_pub_test, X2_pub_test)] | |
y_pub_test = [1] | |
test_dataset = SentencePairDataset(X_pub_test, y_pub_test, tokenizer, 256) | |
test_loader_pub = DataLoader(test_dataset, batch_size=1) | |
model.eval() | |
predictions = [] | |
probabilities = [] | |
for batch in test_loader_pub: | |
input_ids = batch["input_ids"].to(device) | |
attention_mask = batch["attention_mask"].to(device) | |
with torch.no_grad(): | |
outputs = model(input_ids, attention_mask) | |
probs = torch.nn.functional.softmax(outputs, dim=1) | |
predicted = torch.argmax(outputs, dim=1) | |
predictions.extend(predicted.cpu().numpy().tolist()) | |
probabilities.extend(probs.cpu().numpy().tolist()) | |
data['verdict'] = predictions | |
data['verdict'] = data['verdict'].replace(0, "SUPPORTED") | |
data['verdict'] = data['verdict'].replace(1, "REFUTED") | |
data['verdict'] = data['verdict'].replace(2, "NEI") | |
result = { | |
'verdict': data['verdict'][0], | |
'probabilities': { | |
'SUPPORTED': probabilities[0][0], | |
'REFUTED': probabilities[0][1], | |
'NEI': probabilities[0][2] | |
} | |
} | |
return result | |
# # Set default context and claim | |
# context = "Trái Đất là hành tinh duy nhất trong Hệ Mặt Trời được biết đến là nơi có sự sống tồn tại. Nó là hành tinh lớn thứ ba trong hệ này về kích thước và khối lượng. Trái Đất hình cầu với bề mặt gồm nước và đất liền, được bao phủ bởi lớp khí quyển. Khí quyển của Trái Đất chủ yếu bao gồm nitơ và oxy, cùng với các khí nhà kính như hơi nước và carbon dioxide. Trái Đất quay quanh Mặt Trời theo một quỹ đạo hình ellip, hoàn thành một vòng quay trong khoảng 365 ngày, gây ra sự luân phiên của các mùa." | |
# claim = "Trái Đất là hành tinh duy nhất trong Hệ Mặt Trời được biết đến là nơi có sự sống tồn tại." | |
# verdict, probabilities = predict(context, claim) | |
# print(f"Verdict: {verdict}") | |
# # Display percentages with colors | |
# labels = ["SUPPORTED", "REFUTED", "NEI"] | |
# for i, label in enumerate(labels): | |
# print(f'{label}: {probabilities[0][i]*100:.2f}%') | |