| from datasets import load_from_disk | |
| from transformers import AutoModelForSequenceClassification, AutoTokenizer | |
| import numpy as np | |
| import torch | |
| from sklearn.metrics import accuracy_score, precision_recall_fscore_support, confusion_matrix | |
| from torch.utils.data import DataLoader | |
| from tqdm import tqdm | |
| def evaluate_model(): | |
| print("Ewaluacja wytrenowanego modelu klasyfikacji emocji...") | |
| test_dataset = load_from_disk('./emotion_classification/data/emotion_tokenized')['test'] | |
| model = AutoModelForSequenceClassification.from_pretrained('./emotion_classification/models/emotion_classifier') | |
| tokenizer = AutoTokenizer.from_pretrained('distilbert-base-uncased') | |
| test_dataset.set_format(type='torch', columns=['input_ids', 'attention_mask', 'label']) | |
| test_loader = DataLoader(test_dataset, batch_size=64) | |
| model.eval() | |
| all_preds = [] | |
| all_labels = [] | |
| with torch.no_grad(): | |
| for batch in tqdm(test_loader, desc="Ewaluacja"): | |
| input_ids = batch['input_ids'] | |
| attention_mask = batch['attention_mask'] | |
| labels = batch['label'] | |
| outputs = model(input_ids=input_ids, attention_mask=attention_mask) | |
| preds = torch.argmax(outputs.logits, dim=1) | |
| all_preds.append(preds) | |
| all_labels.append(labels) | |
| y_pred = torch.cat(all_preds).numpy() | |
| y_true = torch.cat(all_labels).numpy() | |
| accuracy = accuracy_score(y_true, y_pred) | |
| precision, recall, f1, _ = precision_recall_fscore_support(y_true, y_pred, average='weighted') | |
| cm = confusion_matrix(y_true, y_pred) | |
| print(f'Dokladnosc: {accuracy:.4f}') | |
| print(f'Precyzja: {precision:.4f}') | |
| print(f'Czulosc: {recall:.4f}') | |
| print(f'Wynik F1: {f1:.4f}') | |
| print('Macierz bledu:') | |
| print(cm) |