Downloads · 30 days
12
29% of all-time downloads
pistachio7/bert-base-banking77-pt2
bert-base-banking77-pt2 is a text classification model from pistachio7. Use it when you need a label for a piece of text. It is set up for transformers. The card lists the license as apache-2.0.
A fine-tuned version of bert-base-uncased for customer-intent classification on banking queries, trained on the PolyAI/banking77 dataset.
Downloads · 30 days
12
29% of all-time downloads
All-time downloads
42
Public
Parameters
110M
438 MB on disk
Likes
1
Public
Click a slice to open those files.
.safetensors438 MB · 100%
From the Hugging Face model README
A fine-tuned version of bert-base-uncased for customer-intent classification on banking queries, trained on the PolyAI/banking77 dataset.
On the evaluation set it achieves:
BANKING77 is a fine-grained intent detection benchmark: 13,083 real online-banking customer queries labelled across 77 intents (e.g. card_arrival, exchange_rate, pending_top_up). The label space is intentionally hard — many intents are near-duplicates in wording but differ in meaning, which is exactly where bag-of-words baselines break down.
This model puts a linear classification head on top of bert-base-uncased and fine-tunes the full encoder for 10 epochs. The full id2label mapping for all 77 intents is stored in config.json, so predictions come back as readable intent names rather than integer indices.
Intended use. Routing or triaging short, English, first-person banking queries — chatbot intent detection, support-ticket tagging, analytics over customer messages.
Limitations.
bert-base-uncased. Do not use it as a sole automated decision-maker on anything consequential to a customer.PolyAI/banking77, used with its standard split — 10,003 training examples and 3,080 test examples over 77 intent labels. Evaluation metric is weighted F1, which accounts for the mild class imbalance across intents.
| Training Loss | Epoch | Step | Validation Loss | F1 |
|---|---|---|---|---|
| 3.261 | 1.0 | 313 | 1.0894 | 0.7969 |
| 0.5499 | 2.0 | 626 | 0.4196 | 0.9103 |
| 0.305 | 3.0 | 939 | 0.3403 | 0.9157 |
| 0.1277 | 4.0 | 1252 | 0.3020 | 0.9251 |
| 0.0857 | 5.0 | 1565 | 0.2911 | 0.9306 |
| 0.0347 | 6.0 | 1878 | 0.2865 | 0.9333 |
| 0.0251 | 7.0 | 2191 | 0.2994 | 0.9362 |
| 0.0111 | 8.0 | 2504 | 0.2970 | 0.9365 |
| 0.0075 | 9.0 | 2817 | 0.3102 | 0.9364 |
| 0.0058 | 10.0 | 3130 | 0.3089 | 0.9362 |
Validation F1 plateaus around epoch 7 (0.9362) while training loss keeps falling — the last few epochs are mostly overfitting. Epoch 7–8 is the sweet spot if you retrain.
from transformers import AutoTokenizer, AutoModelForSequenceClassification, pipeline
ckpt = 'pistachio7/bert-base-banking77-pt2'
tokenizer = AutoTokenizer.from_pretrained(ckpt)
model = AutoModelForSequenceClassification.from_pretrained(ckpt)
classifier = pipeline('text-classification', tokenizer=tokenizer, model=model)
classifier('What is the base of the exchange rates?')
# Output: [{'label': 'exchange_rate', 'score': 0.9961327314376831}]
To get the full ranked list of intents instead of just the top one:
classifier('My card still has not turned up', top_k=3)