--- datasets: - zefang-liu/phishing-email-dataset metrics: - recall - f1 - precision base_model: - distilbert/distilbert-base-uncased pipeline_tag: text-classification --- # DistilBERT Spam Classifier A fine-tuned DistilBERT-based model for phishing email detection, trained on the [Phishing Emails Dataset](https://www.kaggle.com/datasets/subhajournal/phishingemails). This model is optimized for identifying spam and phishing emails with high accuracy. ## Model Overview - **Base Model**: DistilBERT - **Fine-Tuning**: Performed on a phishing email dataset to classify emails as spam (1) or non-spam (0). - **Format**: Available in ONNX format for efficient deployment. ## Architecture The model extends DistilBERT with a custom classification head: ```python class DistilBERTSpamClassifier(nn.Module): def __init__(self, distilbert): super(DistilBERTSpamClassifier, self).__init__() self.distilbert = distilbert self.dropout = nn.Dropout(0.1) self.relu = nn.ReLU() self.fc1 = nn.Linear(768, 512) self.fc2 = nn.Linear(512, 2) self.softmax = nn.LogSoftmax(dim=1) ``` - **Input**: Tokenized email text (processed via DistilBERT tokenizer). - **Output**: Log-probabilities for two classes (spam or non-spam). - **Layers**: - DistilBERT for contextual embeddings (768 dimensions). - Dropout (0.1) for regularization. - Fully connected layers (768 → 512 → 2) with ReLU activation. - LogSoftmax for classification. ## Performance Evaluated on a test set of 3,021 samples, the model achieves performance across metrics: | Class | Precision | Recall | F1-Score | Support | |-------|-----------|--------|----------|---------| | Non-Spam (0) | 0.98 | 0.98 | 0.98 | 1,870 | | Spam (1) | 0.96 | 0.97 | 0.96 | 1,151 | - **Accuracy**: 97% - **Macro Avg**: Precision: 0.97, Recall: 0.97, F1-Score: 0.97 - **Weighted Avg**: Precision: 0.97, Recall: 0.97, F1-Score: 0.97 ## Usage 1. **Install Dependencies**: ```bash pip install transformers onnxruntime torch ``` 2. **Load the Model**: Use the ONNX model with a compatible inference engine (e.g., ONNX Runtime). Example: ```python from transformers import DistilBertTokenizer import onnxruntime as ort import numpy as np # Load tokenizer tokenizer = DistilBertTokenizer.from_pretrained("distilbert-base-uncased") # Load ONNX model session = ort.InferenceSession("path_to_model.onnx") # Tokenize input text = "Your example email text here" inputs = tokenizer(text, return_tensors="np", padding=True, truncation=True, max_length=512) # Run inference outputs = session.run(None, dict(inputs))[0] prediction = np.argmax(outputs, axis=1) print("Spam" if prediction == 1 else "Non-Spam") ``` 3. **Input Requirements**: - Text input must be tokenized using the DistilBERT tokenizer. - Maximum sequence length: 512 tokens. ## Dataset The model was fine-tuned on the [Phishing Emails Dataset](https://www.kaggle.com/datasets/subhajournal/phishingemails), which contains labeled email samples for spam and phishing detection. ## Limitations - Only available in ONNX format; no PyTorch or TensorFlow checkpoints. - Maximum input length is 512 tokens; longer emails are truncated.