Text Categorization Implementation: From TF-IDF to LLM
Imagine you automate incoming request processing, but the model confuses complaints with suggestions. Or a news categorization system consistently gets a third of headlines wrong. Standard BERT fine-tuning delivers 95% accuracy — but only if the architecture is chosen correctly, class imbalance is handled, and deployment is tuned for latency. We help you implement text categorization turnkey: from TF-IDF for quick prototypes to custom LLM pipelines. With extensive experience in NLP, we can immediately discard non-viable options. We evaluate your task in one day.
Text categorization covers ticket routing, spam filtering, content moderation, sentiment analysis, and intent detection. Each stage has its pitfalls: semantic drift, rare classes, multilingual corpora. We have solved such tasks for over 10 projects in retail, fintech, and media. We guarantee quality against agreed metrics: F1, precision, recall — and provide a detailed error analysis report.
How to Choose a Text Categorization Approach
The choice of architecture depends on task parameters:
- Number of classes: 2–5 or 20–100+ (hierarchical)
- Labeled data volume: at least 500 examples per class
- Language: English, Russian, multilingual
- Response time requirements: real-time (<100ms) or batch processing
- Need for explainability: explanation of decisions
A common mistake is automatically reaching for BERT when the task can be solved with logistic regression in 50ms. The cost of development varies, but a properly chosen pipeline pays off by saving manual processing time.
Comparison of Text Categorization Methods
| Method | Quality | Latency | Labeled Data Volume | Interpretability |
|---|---|---|---|---|
| TF-IDF + Logistic Regression | 85–92% | <10ms | 500+ per class | High |
| FastText | 88–93% | ~1ms | 10K+ | Medium |
| BERT fine-tuning | 95–98% | 20–50ms (ONNX) | 100+ per class | Low |
| LLM prompting | 90–97% | 500ms–2s | Zero-shot | Low (explanation via prompt) |
Why BERT Is Not Always Better Than Logistic Regression
On one project, we replaced BERT with TF-IDF + LightGBM and achieved the same F1, but latency dropped from 40ms to 2ms. For well-defined topics, traditional ML often delivers excellent results without GPU. Always start with a simple baseline — it saves resources and simplifies interpretation.
How to Handle Class Imbalance
Real data is almost always imbalanced. Strategies:
- Pass class weights to the loss function
- Oversampling (SMOTE on embeddings) or text augmentation
- Focal Loss for extreme imbalance (1:100+)
Monitor per-class F1, not just accuracy — 95% accuracy with 5% rare class is meaningless. For example, on a fraud detection project with a 1:1000 ratio, we used Focal Loss and achieved 0.92 F1 on the rare class, while accuracy alone was 99.8% but hid the poor performance.
Which Metrics Matter for Categorization
Key metrics: F1 Macro, confusion matrix, calibration curve.
| Metric | Description |
|---|---|
| F1 Macro | Average F1 across classes, robust to imbalance |
| Confusion matrix | Visualization of errors per class |
| KL divergence | Monitoring data drift of predicted classes |
In production, configure monitoring for drift via KL divergence: if the metric exceeds the historical corridor, trigger retraining.
How to Implement Categorization: Step-by-Step Plan
- Data analysis and architecture selection. Evaluate class distribution, volume, and annotation quality. Determine whether TF-IDF or a transformer is needed.
- Prototyping. Build a baseline (TF-IDF + ML) and compare with BERT fine-tuning. Record metrics.
- Training and optimization. For transformers, use quantization and export to ONNX. Tune hyperparameters for latency and accuracy.
- Integration via REST/gRPC. Wrap the model in a service, add drift monitoring.
- Testing and retraining plan. Run A/B tests on real traffic, configure alerts.
Multi-Class vs Multi-Label Categorization
For multi-label tasks (text has multiple labels simultaneously): replace softmax with sigmoid, use BCEWithLogitsLoss, optimize threshold by F1. In one e-commerce project, we implemented a multi-label categorizer for product attributes (size, color, brand) using a single BERT model with a sigmoid head, achieving 0.95 mean F1 across 15 labels. For example, in a recent fintech project, we achieved 0.97 F1 on a 50-class ticket routing task using a distilled BERT model with ONNX quantization, reducing inference time from 100ms to 25ms.
Deploying a Categorizer: ONNX and Quantization
Optimization for inference:
- ONNX export: speeds up CPU inference 2–4x
- Quantization (INT8): reduces memory 4x with <1% accuracy degradation
- TorchScript: for production PyTorch serving
According to ONNX Runtime documentation, exporting a model to ONNX achieves latency of 20–50ms on CPU for 512-token text. That is 2–4 times faster than the original PyTorch model.
What's Included in the Work
- Data analysis and preparation of labeled data (up to 5000 examples)
- Architecture selection and prototyping (3 options)
- Model training and optimization (GPU cluster)
- Integration via REST API or gRPC
- Documentation and team training
- Monitoring and retraining plan
Timeline
- Baseline (TF-IDF + ML): 3–5 days
- BERT fine-tuning: 1–2 weeks
- Production with monitoring: 3–5 weeks
- Cost: Baseline from $5,000; full pipeline from $15,000
Contact us — we'll evaluate your task in one day. Get a project consultation — request an assessment.







