File size: 4,871 Bytes
de844e4
 
477077e
 
de844e4
 
 
 
 
 
 
 
b31728c
 
de844e4
b31728c
 
babcc93
58b3cf9
589bbef
 
0a713cc
 
 
ec036fb
 
 
 
 
 
babcc93
0a713cc
 
 
 
 
589bbef
 
 
 
 
ec036fb
b31728c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
589bbef
0a713cc
589bbef
 
 
0a713cc
 
 
 
 
ec036fb
0a713cc
 
 
 
 
 
 
babcc93
 
 
 
58b3cf9
babcc93
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
---
title: Urdu Sentiment & Emotion Analysis Engine
emoji: 🧠

colorFrom: blue
colorTo: indigo
sdk: gradio
sdk_version: 4.26.0
app_file: app.py
pinned: false
---

# Urdu Sentiment and Emotion Analysis Engine


Welcome to the Urdu Sentiment and Emotion Analysis Engine project! This repository contains the code for a multilingual NLP system that classifies sentiment (Positive, Negative, Neutral) and emotion (Joy, Anger, Fear, Sadness) from Urdu, Roman Urdu, and mixed-language text using a fine-tuned XLM-RoBERTa transformer.

## Current Progress: Phase 9 (Modal.com Deployment — In Progress)
The project has successfully completed Phases 1 through 8. The AI models are fully trained, uploaded to Hugging Face Hub (`usman-ai-dev/urdu-sentiment-xlmr` & `usman-ai-dev/urdu-emotion-xlmr`), and integrated into a production-ready **FastAPI** web server with Uvicorn. The frontend features a dark-mode Glassmorphism dashboard with an interactive 3D WebGL Three.js particle wave background, floating ambient glowing orbs, real-time cursor spotlight, Chart.js analytics, and automated live tweet feed streaming. Phase 9 deploys the full stack to **Modal.com** with a custom domain (`urdu-sentiment.hmuhammadusman.com`).

### Repository Structure
- `app.py`: FastAPI Web Server exposing all REST API routes (`/analyze`, `/analytics`, `/detect-language`, `/live-feed`, `/health`).
- `predictor.py`: Object-Oriented class handling model loading, Softmax probability scoring, and subword attention extraction.
- `lang_detector.py`: Language identification module for Urdu Script, Roman Urdu, English, and Mixed text.
- `templates/index.html`: Main dashboard HTML template.
- `static/`: Frontend visual assets:
  - `css/style.css`: Glassmorphism design system, dark theme tokens, and dynamic background glow animations.
  - `js/bg3d.js`: Three.js 3D WebGL particle wave and floating embers motion engine.
  - `js/main.js`: Interactivity handlers, GSAP timelines, Chart.js charts, and FastAPI endpoint fetch calls.
- `upload_to_hub.py`: Automated model upload script for Hugging Face Hub integration.
- `modal_app.py`: Modal.com deployment entrypoint — wraps FastAPI app for serverless cloud deployment.
- `requirements.txt`: Environment dependencies required for training and the FastAPI server.
- `Dockerfile`: Container configuration configured to run FastAPI with Uvicorn on port 7860.
- `test_models.py`: Utility script to run interactive CLI inference without starting the server.
- `training/`: Core scripts for data processing and model fine-tuning.
  - `dataset.py`: PyTorch `Dataset` implementation utilizing unified canonical label mappings.
  - `train_sentiment.py`: Training script for the sentiment classification model (Multi-GPU enabled).
  - `train_emotion.py`: Training script for the emotion classification model (Multi-GPU enabled).
- `evaluation/`: Scripts for evaluating model performance and generating attention visualizations.
- `results/`: Contains output matrices and evaluation reports.

*(Note: The `models/` directory containing the 1GB `.safetensors` files is ignored via `.gitignore` due to size constraints. The models will be hosted on Hugging Face Hub for cloud deployment.)*

### Environment Setup
To get started, create a virtual environment and install the required dependencies:

```bash
# Create a virtual environment
python -m venv urdu_env

# Activate the virtual environment
# On Windows:
urdu_env\Scripts\activate
# On Linux/Mac:
source urdu_env/bin/activate

# Install dependencies
pip install -r requirements.txt
```

### Running the API Server
To start the backend server:
```bash
python app.py
```
The server will boot up and listen on `http://127.0.0.1:5000`.

### Available API Routes:
| Method | Route | Description |
| --- | --- | --- |
| `GET` | `/` | Serves main landing dashboard HTML page |
| `POST` | `/analyze` | Main prediction endpoint — accepts `{"text": "..."}` and returns sentiment, emotion, confidence distributions, language type, and word attention |
| `GET` | `/analytics` | Returns session analytics — total texts, sentiment breakdown, emotion counts, and top keywords |
| `POST` | `/detect-language` | Accepts `{"text": "..."}` and returns detected language (`Urdu Script`, `Roman Urdu`, `English`, `Mixed`) |
| `GET` | `/live-feed` | Streams simulated real-time tweet feed predictions |
| `GET` | `/health` | Health check endpoint for Docker / deployment monitors |
| `GET` | `/docs` | Interactive Swagger API documentation UI |

### Deployment (Phase 9 — Modal.com)
- **Phase 8** ✅: Models pushed to Hugging Face Hub. `predictor.py` updated to load from Hub.
- **Phase 9**: Deploy full FastAPI stack to **Modal.com** (free $30/month credit tier).
  - Run: `modal deploy modal_app.py`
  - Custom domain: `urdu-sentiment.hmuhammadusman.com`
  - GitHub Actions auto-deploys on every push to `main`.