| # BERT-Base-Uncased Fine-Tuned Model for Intent Classification on CLINC150 Dataset | |
| This repository hosts a fine-tuned BERT model for multi-class intent classification using the CLINC150 (plus) dataset. The model is trained to classify user queries into 150 in-scope intents and handle out-of-scope (OOS) queries. | |
| ## Model Details | |
| - **Model Architecture:** BERT Base Uncased | |
| - **Task:** Multi-class Intent Classification | |
| - **Dataset:** CLINC150 (plus variant) | |
| - **Quantization:** Float16 | |
| - **Fine-tuning Framework:** Hugging Face Transformers | |
| --- | |
| ## Installation | |
| ```bash | |
| pip install transformers datasets scikit-learn evaluate | |
| ``` | |
| --- | |
| ## Loading the Model | |
| ```python | |
| from transformers import AutoModelForSequenceClassification, AutoTokenizer | |
| import torch | |
| # Load tokenizer and model | |
| model_path = "bert-base-uncased" | |
| tokenizer = AutoTokenizer.from_pretrained(model_path) | |
| model = AutoModelForSequenceClassification.from_pretrained(model_path) | |
| # Define test sentences | |
| test_sentences = [ | |
| "Can you tell me the weather in New York?", | |
| "I want to transfer money to my friend", | |
| "Play some relaxing jazz music", | |
| ] | |
| # Tokenize and predict | |
| def predict_intent(sentences, model, tokenizer, id2label_fn, device="cpu"): | |
| if isinstance(sentences, str): | |
| sentences = [sentences] | |
| model.eval() | |
| model.to(device) | |
| inputs = tokenizer(sentences, padding=True, truncation=True, return_tensors="pt").to(device) | |
| with torch.no_grad(): | |
| outputs = model(**inputs) | |
| logits = outputs.logits | |
| predictions = torch.argmax(logits, dim=-1) | |
| return [id2label_fn(label.item()) for label in predictions] | |
| ``` | |
| --- | |
| ## Performance Metrics | |
| - **Accuracy:** 0.947097 | |
| - **Precision:** 0.949821 | |
| - **Recall:** 0.947097 | |
| - **F1 Score:** 0.945876 | |
| --- | |
| ## Fine-Tuning Details | |
| ### Dataset | |
| The CLINC150 (plus) dataset contains 151 intent classes (150 in-scope + 1 out-of-scope) for intent classification in English utterances. It includes 15k training, 3k validation, and 4.5k test examples with diverse user queries. | |
| ### Training | |
| - **Epochs:** 5 | |
| - **Batch size:** 16 | |
| - **Learning rate:** 2e-5 | |
| - **Evaluation strategy:** `epoch` | |
| --- | |
| ## Quantization | |
| Post-training quantization was applied using PyTorchβs `half()` precision (FP16) to reduce model size and inference time. | |
| --- | |
| ## Repository Structure | |
| ```python | |
| . | |
| βββ quantized-model/ # Contains the quantized model files | |
| β βββ config.json | |
| β βββ model.safetensors | |
| β βββ tokenizer_config.json | |
| β βββ vocab.txt | |
| β βββ special_tokens_map.json | |
| βββ README.md # Model documentation | |
| ``` | |
| --- | |
| ## Limitations | |
| - The model is trained specifically for multi classification on CLINIC150 Dataset. | |
| - FP16 quantization may result in slight numerical instability in edge cases. | |
| --- | |
| ## Contributing | |
| Feel free to open issues or submit pull requests to improve the model or documentation. | |