|
# DistilBERT-Based Intent Detection Model for Banking Customer Queries |
|
|
|
This repository contains a fine-tuned **DistilBERT** model for **intent detection** in banking customer support scenarios. It is trained on the **BANKING77 dataset** and designed to accurately classify user queries into 77 distinct banking-related intents. |
|
|
|
## Model Details |
|
|
|
- **Model Architecture:** DistilBERT Base Uncased |
|
- **Task:** Intent Detection for Banking Queries |
|
- **Dataset:** [BANKING77](https://huggingface.co/datasets/banking77) |
|
- **Fine-tuning Framework:** Hugging Face Transformers |
|
- **Language:** English |
|
- **Number of Labels:** 77 |
|
- **Quantization:** *Not applied (full precision)* |
|
|
|
## Usage |
|
|
|
### Installation |
|
|
|
```bash |
|
pip install transformers torch datasets |
|
``` |
|
|
|
### Loading the Model |
|
|
|
```python |
|
from transformers import DistilBertTokenizer, DistilBertForSequenceClassification |
|
import torch |
|
|
|
# Load fine-tuned model |
|
model_path = "./banking77-distilbert" # Adjust path if different |
|
model = DistilBertForSequenceClassification.from_pretrained(model_path) |
|
tokenizer = DistilBertTokenizer.from_pretrained(model_path) |
|
model.eval() |
|
|
|
# Sample query |
|
text = "I need to reset my online banking password." |
|
|
|
# Tokenize and predict |
|
inputs = tokenizer(text, return_tensors="pt", truncation=True, padding=True) |
|
with torch.no_grad(): |
|
outputs = model(**inputs) |
|
predicted_class = torch.argmax(outputs.logits, dim=1).item() |
|
|
|
# Example label map (replace with the full BANKING77 map) |
|
label_map = {0: "activate_my_card", 1: "balance", 2: "card_arrival", ..., 76: "why_was_my_card_declined"} |
|
print(f"Predicted Intent: {label_map[predicted_class]}") |
|
``` |
|
|
|
## Performance Metrics |
|
|
|
- **Accuracy:** ~95% (on the BANKING77 test split) |
|
- **Loss:** ~0.13 (after fine-tuning for 4 epochs) |
|
|
|
## Fine-Tuning Details |
|
|
|
### Dataset |
|
|
|
- **Name:** BANKING77 |
|
- **Size:** ~13,000 customer support queries |
|
- **Intents:** 77 unique labeled banking intents |
|
|
|
### Training |
|
|
|
- **Epochs:** 4 |
|
- **Batch Size:** 16 |
|
- **Learning Rate:** 2e-5 |
|
- **Optimizer:** AdamW |
|
- **Evaluation Strategy:** per epoch |
|
- **Loss Function:** CrossEntropyLoss |
|
|
|
### Hardware |
|
|
|
- **GPU Used:** NVIDIA Tesla T4 (via Google Colab) |
|
- **Training Time:** ~15 minutes |
|
|
|
## Repository Structure |
|
|
|
``` |
|
. |
|
βββ banking77-distilbert/ # Fine-tuned model directory (saved via trainer.save_model) |
|
β βββ config.json |
|
β βββ pytorch_model.bin |
|
β βββ tokenizer_config.json |
|
β βββ vocab.txt |
|
βββ intent_predictor.py # Script for predicting intents (with preprocessing) |
|
βββ README.md # Model documentation |
|
``` |
|
|
|
## Limitations |
|
|
|
- The model is trained only on banking-related intents; it may misclassify out-of-domain queries. |
|
- Multilingual support is not included β limited to English. |
|
- Model does not handle multiple intents per query. |
|
|
|
## Contributing |
|
|
|
Contributions and suggestions are welcome. Please open an issue or pull request for improvements or additional features. |
|
|