--- language: - en license: apache-2.0 base_model: distilbert/distilbert-base-uncased tags: - text-classification - phishing-detection - knowledge-distillation - distilbert datasets: - Akash-Sakala/phishing-site-classification metrics: - accuracy - f1 - precision - recall model-index: - name: bert-phishing-classifier_student results: - task: type: text-classification name: Text Classification dataset: name: Akash-Sakala/phishing-site-classification type: Akash-Sakala/phishing-site-classification split: test metrics: - type: accuracy value: 0.9601 name: Accuracy - type: f1 value: 0.9595 name: F1 - type: precision value: 0.9710 name: Precision - type: recall value: 0.9483 name: Recall --- # DistilBERT Phishing Site Classifier (Student) A 4-layer DistilBERT trained via **knowledge distillation** from a fine-tuned BERT teacher ([Akash-Sakala/bert-phishing-classifier_teacher](https://huggingface.co/Akash-Sakala/bert-phishing-classifier_teacher)) for binary phishing site URL classification. ## Model Details | Property | Value | |-----------------|-------------------------------------------| | Base model | distilbert/distilbert-base-uncased | | Architecture | DistilBertForSequenceClassification | | Layers | 4 (distilled from 12-layer BERT teacher) | | Attention heads | 8 | | Task | Binary classification (phishing / benign) | | Parameters | ~52M | ## Training — Distillation Setup | Hyperparameter | Value | |-------------------|--------------------| | Temperature | 3.0 | | Alpha (KL weight) | 0.6 | | Hard label weight | 0.4 | | Learning rate | 2e-5 | | Batch size | 64 | | Epochs | 4 | | Warmup steps | 10% of total steps | | Weight decay | 0.01 | | Optimizer | AdamW | | Scheduler | Linear with warmup | | Mixed precision | fp16 (torch.amp) | ## Loss Function Combined KL divergence (soft targets) + Cross-Entropy (hard labels): loss = alpha * KL(student_soft || teacher_soft) * T^2 + (1 - alpha) * CrossEntropy(student, labels) ## Test Set Results | Model | Accuracy | Precision | Recall | F1 | |------------------------|------------|------------|------------|------------| | BERT Teacher | 0.8971 | 0.9136 | 0.8763 | 0.8945 | | **DistilBERT Student** | **0.9601** | **0.9710** | **0.9483** | **0.9595** | The student **outperforms the teacher** across all metrics while being smaller and faster. ## Dataset - **Dataset:** [Akash-Sakala/phishing-site-classification](https://huggingface.co/datasets/Akash-Sakala/phishing-site-classification) - Train: 154,000 | Validation: 33,000 | Test: 33,000 - Labels: `0` = benign, `1` = phishing ## Usage ```python from transformers import AutoTokenizer, AutoModelForSequenceClassification import torch tokenizer = AutoTokenizer.from_pretrained('Akash-Sakala/bert-phishing-classifier_student') model = AutoModelForSequenceClassification.from_pretrained('Akash-Sakala/bert-phishing-classifier_student') url = 'http://suspicious-login.verify-account.com/secure' inputs = tokenizer(url, return_tensors='pt', truncation=True, padding='max_length') with torch.no_grad(): logits = model(**inputs).logits pred = torch.argmax(logits, dim=1).item() print('Phishing' if pred == 1 else 'Benign') ``` ## Teacher Model [Akash-Sakala/bert-phishing-classifier_teacher](https://huggingface.co/Akash-Sakala/bert-phishing-classifier_teacher)