Veyra-50M is a compact, encoder-only text classification model developed by Dl26. It is designed for fast English classification across intents, banking support requests, news topics, encyclopedia-style topics, emotion categories, sentiment labels, and broad question topics.
The model uses a BERT-style bidirectional Transformer encoder and the standard Hugging Face Transformers bert model type. It loads directly with AutoModelForSequenceClassification and does not require custom architecture files or trust_remote_code=True.
Veyra-50M is built for practical classification workflows where speed, simple deployment, and a wide label taxonomy matter. It can be used for routing user messages, classifying support requests, enriching metadata, triaging documents, filtering datasets, and building lightweight classifier services.
Why this model
Compact encoder-only classifier
267-label multi-domain taxonomy
Standard Hugging Face Transformers compatibility
No custom Python architecture files
Fast CPU and GPU batch inference
Strong fit for routing, triage, metadata enrichment, and query classification
Supports intent, topic, sentiment, emotion, and support-style labels in one model
Model details
Property
Value
Model name
Veyra-50M
Developer
Dl26
Model type
Encoder-only sequence classifier
Transformers model type
bert
Architecture
BertForSequenceClassification
Parameters
47,814,923
Hidden size
512
Layers
10
Attention heads
8
Intermediate size
2,048
Max positions
512
Number of labels
267
Training objective
Supervised single-label classification
License
Apache 2.0
Label taxonomy
Veyra-50M predicts one label from a namespaced taxonomy. The namespace indicates the task family or source label space.
Family
Labels
Purpose
clinc_oos
151
General assistant intent routing and out-of-scope detection
banking77
77
Banking and financial support intent classification
dbpedia_14
14
Broad entity and encyclopedia topic classification
The full label map is stored in config.json as id2label and label2id.
Training data
Veyra-50M was trained on a multi-domain English classification mixture. The training setup combines short user utterances, customer-support style messages, news snippets, topic classification examples, question categories, emotion labels, and sentiment examples.
Source
Train
Validation
Test
clinc_oos
15,250
3,100
5,500
banking77
9,993
3,076
3,076
ag_news
120,000
7,600
7,600
dbpedia_14
220,000
8,000
8,000
yahoo_answers_topics
220,000
8,000
8,000
emotion
16,000
2,000
2,000
sst5
8,544
1,101
2,210
The labels are namespaced so that labels from different tasks remain distinct. For example, a banking support label and a general assistant intent label can both describe payments or account activity, but they remain separate targets.
Installation
pip install -U transformers torch accelerate
For CPU-only inference, accelerate is optional:
pip install -U transformers torch
Quick start
python
1from transformers import AutoTokenizer, AutoModelForSequenceClassification
2import torch
34model_id ="Dl26/Veyra-50M"56tokenizer = AutoTokenizer.from_pretrained(model_id)7model = AutoModelForSequenceClassification.from_pretrained(model_id)8model.eval()910text ="Can you help me reset my password?"11inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=64)1213with torch.no_grad():14 logits = model(**inputs).logits
1516label_id =int(logits.argmax(dim=-1))17print(model.config.id2label[label_id])
Batch inference
python
1from transformers import AutoTokenizer, AutoModelForSequenceClassification
2import torch
34model_id ="Dl26/Veyra-50M"5device ="cuda"if torch.cuda.is_available()else"cpu"67tokenizer = AutoTokenizer.from_pretrained(model_id)8model = AutoModelForSequenceClassification.from_pretrained(model_id).to(device)9model.eval()1011texts =[12"Please freeze my card, I think it was stolen.",13"The company announced a new processor for its laptops.",14"I feel really happy about the result today.",15"Who won the match last night?",16]1718inputs = tokenizer(19 texts,20 return_tensors="pt",21 truncation=True,22 padding=True,23 max_length=64,24).to(device)2526with torch.no_grad():27 logits = model(**inputs).logits
2829for text, label_id inzip(texts, logits.argmax(dim=-1).tolist()):30print(model.config.id2label[label_id],"-", text)
Confidence scores are useful for routing and fallback behavior. For production systems, calibrate thresholds on data from the target application.
Evaluation highlights
Evaluation
Result
Validation accuracy
83.15%
Validation macro-F1
85.28%
Test accuracy
80.65%
Test macro-F1
83.31%
Remote code required
No
Intended use
Veyra-50M is intended for:
intent classification
support request routing
customer-service triage
topic classification
emotion and sentiment classification
metadata enrichment
dataset filtering
search and recommendation labeling
lightweight classification APIs
encoder model research
Input formatting
The model works best with short to medium English text. For records with multiple fields, combine the fields into a single natural-language string before classification.