email_classifier / README.md
skgezhil2005's picture
updated README.md
09d8291
---
license: apache-2.0
---
# Email Classifier
This project implements an email classification model that assigns each email to a specific category using SBERT `all-minilm-l6-v2` for text embeddings, followed by a sequential neural network for final classification.
## Model Description
- **Architecture:** `SBERT (384‑d) → Dense(256, ReLU) → Dropout(0.4) → Dense(128, ReLU) → Dropout(0.4) → Softmax(5)`
- **Frameworks:** TensorFlow2.17, sentence‑transformer
## Training Data & Preprocessing
- **Emails:** 4954 college emails, manually labeled into `[Academics, Clubs, Internships, Others, Talks]`
- **Split:** 80% train / 20% test
- **Embedding & Labeling:**
1. Each email was embedded with `all‑MiniLM‑L6‑v2` (SBERT).
2. We created a small “prototype” set of example sentences for each category.
3. For every email, we computed cosine similarities between its SBERT embedding and each prototype embedding.
4. The email was assigned to the category whose prototype had the **highest** cosine score (threshold ≥ 0.4).
## Evaluation
The model was tested on **991** college‑email samples. Below are the per‑class precision, recall, F1‑score and support:
| Class | label | Support | Precision | Recall | F1‑Score |
|:-----:|-------------|--------:|----------:|-------:|---------:|
| 0 | Academics | 200 | 0.92 | 0.97 | 0.94 |
| 1 | Clubs | 236 | 0.94 | 0.96 | 0.95 |
| 2 | Internships | 143 | 0.95 | 0.98 | 0.97 |
| 3 | Others | 200 | 0.95 | 0.83 | 0.89 |
| 4 | Takls | 212 | 0.93 | 0.94 | 0.93 |
\
**Aggregate metrics**
| Metric | Accuracy | Precision | Recall | F1‑Score |
|:-------------|---------:|----------:|-------:|---------:|
| Overall | 0.94 | — | — | — |
| Macro avg | — | 0.94 | 0.94 | 0.94 |
| Weighted avg | — | 0.94 | 0.94 | 0.93 |
### Confusion Matrix
![Confusion Matrix](cm.png)
## Usage
### 1. Install dependencies
```bash
pip install tensorflow sentence-transformers huggingface_hub
```
### 2. Load the model & embedder
``` python
from sentence_transformers import SentenceTransformer
import tensorflow as tf
from huggingface_hub import hf_hub_download
# 1) Load SBERT embedder
embedder = SentenceTransformer("all-MiniLM-L6-v2")
# 2) Load your fine‑tuned classifier
model_file = hf_hub_download(
repo_id="skgezhil2005/email_classifier",
filename="model_v2.keras" #replace with your model file
)
model = tf.keras.models.load_model(model_file)
# 3) Define label names (in the same order used during training)
labels = ["Academics", "Clubs", "Internships", "Others", "Talks"]
```
### 3. Inference Helper
``` python
def classify_email(text: str) -> str:
# Compute a 1×384 SBERT embedding
emb = embedder.encode(text, convert_to_tensor=False)
emb = emb.reshape(1, -1)
# Predict probabilities and pick the highest‐scoring class
prediction = model.predict(emb)
pred_idx = int(np.argmax(prediction[0]))
return labels[pred_idx]
```