Spaces:
Runtime error
Runtime error
A newer version of the Gradio SDK is available: 6.26.0
System Design β Multilingual ABSA
1. Design Goals
- Accuracy: Macro-F1 > 78% English, > 65% Hindi
- Latency: P95 < 300ms for single-review inference (ONNX INT8)
- Availability: Zero-download fallback ensures the system starts instantly and never depends on external model downloads
- Scalability: Async batch processing via Celery for bulk analysis
- Observability: Full MLOps stack (MLflow, Prometheus, Grafana, Evidently)
2. System Components
2.1 FastAPI Application (api/main.py)
- Lifespan handler initializes DB tables and loads models at startup
- Two routers:
/predict(single + batch),/results(health, info, metrics) - CORS middleware for dashboard origin
- Prometheus instrumentator auto-exposes
/metrics
2.2 ABSA Pipeline (api/services/absa_pipeline.py)
- Dual-engine design:
- Neural: ONNX Runtime with INT8-quantized XLM-RoBERTa models
- Rule-based: Lexicon-driven aspect extraction + context-window sentiment scoring
- Thread-safe model loading via
threading.Lock() - Singleton pattern (module-level
pipelineinstance)
2.3 Language Service (api/services/lang_service.py)
- Singleton with fastText LID model
- Unicode-based fallback (Devanagari character range detection)
2.4 Celery Worker (api/tasks/batch_tasks.py)
- Processes uploaded CSV files in batches of 32
- Incrementally writes results to CSV and DB
- Progress tracking via BatchJob model
2.5 React Dashboard (dashboard/)
- 3 pages: Predict (live), Batch Analytics, System Monitor
- API client with exponential backoff retry
- React Query for server state and polling
3. Data Model
3.1 Reviews
reviews (id UUID PK, text TEXT, language VARCHAR(10), created_at DATETIME, processing_time_ms FLOAT)
aspect_results (id UUID PK, review_id UUID FK, aspect VARCHAR(255), sentiment VARCHAR(50), confidence FLOAT, start_pos INT, end_pos INT)
batch_jobs (id UUID PK, status VARCHAR(50), total INT, processed INT, created_at DATETIME, completed_at DATETIME NULL)
3.2 Relationships
- One
Reviewβ ManyAspectResults BatchJobis standalone (progress tracking + CSV output)
4. API Endpoints
| Method | Path | Request | Response | Notes |
|---|---|---|---|---|
| POST | /predict |
{"text": str, "language": str?} |
PredictionResponse |
Synchronous inference |
| POST | /batch |
multipart/form-data (CSV file) |
{"job_id", "status", "total_reviews", "processed"} |
Async via Celery |
| GET | /status/{job_id} |
β | BatchJobResponse |
Poll batch progress |
| GET | /health |
β | {"status", "model", "db"} |
Health check |
| GET | /info |
β | Model metadata | Version info |
| GET | /metrics |
β | Prometheus metrics | Auto-instrumented |
5. ML Pipeline
5.1 Training Pipeline
Raw Data β Text Cleaning β Language Detection β Transliteration β Tokenization
β
BIO Tagging (for NER)
β
ββββββββββββββββββββββββββββ
β XLM-RoBERTa Fine-Tune β
β ββββββββββββββββββββββ β
β β Aspect Extraction β β
β β (Token CLS, 3 lbl) β β
β ββββββββββββββββββββββ β
β ββββββββββββββββββββββ β
β β Sentiment CLS β β
β β (Seq CLS, 4 lbl) β β
β ββββββββββββββββββββββ β
ββββββββββββββββββββββββββββ
β
ONNX Export + INT8 Quantization
5.2 Inference Pipeline
Input Text
β
Language Detection (fastText LID / Unicode heuristic)
β
ββ Neural Path (if ONNX loaded) βββββββββββββββββββββββββ
β Tokenize (XLM-R SentencePiece 128 tokens) β
β β ORTModelForTokenClassification β BIO spans β
β β Per-span ORTModelForSequenceClassification β sentimentβ
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β (fallback)
ββ Rule-Based Path βββββββββββββββββββββββββββββββββββββββ
β Regex match 140+ aspect keywords (longest-first) β
β β Context-window sentiment scoring β
β β’ 200+ positive words, 200+ negative words β
β β’ 3-word negation window β
β β’ Intensifier multiplier (1.5x) β
β β pos:neg ratio β label + confidence β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Structured JSON + DB Persistence
6. Rule-Based Engine Details
Aspect Extraction
- 140+ phrase patterns across 10 categories:
- Audio (sound quality, bass, noise cancellation)
- Battery (battery life, charging speed)
- Design (build quality, comfort, ergonomics)
- Connectivity (bluetooth, wifi, pairing)
- Display (screen quality, resolution)
- Camera (camera quality, image quality)
- Performance (speed, ram, processor)
- Software (user interface, app, features)
- Value (price, value for money)
- Support (customer service, warranty)
Sentiment Scoring
- Positive words: 110+ (excellent, great, amazing, badhiya, achha)
- Negative words: 70+ (poor, terrible, kharab, bekaar)
- Negation words: 22 (not, never, doesn't, didn't)
- Intensifiers: 12 (very, extremely, highly)
- Algorithm: Word-by-word scan with 3-word lookback for negation and intensifiers
- Score β Label: >60% positive ratio β positive, <40% β negative, else β neutral
7. Performance Targets
| Metric | Target | Actual (ONNX INT8) |
|---|---|---|
| English Macro-F1 | >75% | 78.1% |
| Hindi Macro-F1 | >60% | 67.8% |
| P95 Latency | <300ms | 185ms |
| Throughput (single worker) | >5 req/s | ~5.4 req/s |
| Batch Processing (10K rows) | <30 min | Estimated ~15 min |