Spaces:
Sleeping
Sleeping
| import json | |
| import torch | |
| from sklearn.metrics import classification_report, accuracy_score | |
| from sklearn.model_selection import train_test_split | |
| from sklearn.utils.multiclass import unique_labels | |
| from transformers import AutoTokenizer, AutoModelForSequenceClassification | |
| with open("intents_augmented.json", encoding="utf-8") as f: | |
| data = json.load(f) | |
| sentences = [] | |
| labels = [] | |
| label2id = {} | |
| id2label = {} | |
| for i, intent in enumerate(data["intents"]): | |
| tag = intent["tag"] | |
| label2id[tag] = i | |
| id2label[i] = tag | |
| for pattern in intent["patterns"]: | |
| sentences.append(pattern) | |
| labels.append(i) | |
| _, val_texts, _, val_labels = train_test_split( | |
| sentences, labels, test_size=0.2, random_state=42 | |
| ) | |
| MODEL_PATH = "./intent_model" | |
| tokenizer = AutoTokenizer.from_pretrained(MODEL_PATH) | |
| model = AutoModelForSequenceClassification.from_pretrained(MODEL_PATH) | |
| model.eval() | |
| val_encodings = tokenizer(val_texts, truncation=True, padding=True, max_length=128, return_tensors="pt") | |
| with torch.no_grad(): | |
| outputs = model(**val_encodings) | |
| preds = torch.argmax(outputs.logits, dim=1) | |
| print(f" الدقة: {accuracy_score(val_labels, preds) * 100:.2f}%") | |
| print("\n تقرير التصنيف:") | |
| labels_used = unique_labels(val_labels, preds) | |
| print(classification_report( | |
| val_labels, | |
| preds, | |
| labels=labels_used, | |
| target_names=[id2label[i] for i in labels_used], | |
| zero_division=0 | |
| )) | |
| print("\n أمثلة على الأخطاء:") | |
| for text, true, pred in zip(val_texts, val_labels, preds): | |
| if true != pred: | |
| print(f"- السؤال: {text} | متوقع: {id2label[true]} | تنبؤ: {id2label[int(pred)]}") | |