File size: 4,802 Bytes
52ba464
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
---
library_name: peft
base_model: aubmindlab/bert-base-arabertv2
tags:
  - text-classification
  - sentiment-analysis
  - arabic
  - lora
  - peft
  - mlflow
language:
  - ar
license: mit
pipeline_tag: text-classification
---

# arabic-sentiment-lora-deploy

**Deploy bundle for the [`arabic-sentiment-mlops`](https://github.com/psjprajna/arabic-sentiment-mlops)
LoRA sentiment classifier.** Not a standalone model card — this repo
holds the *artifacts* that the FastAPI serving container fetches at
build time. The model card lives on the [running Space](https://huggingface.co/spaces/PrajnaShetty/arabic-sentiment-lora).

**Live demo:** https://prajnashetty-arabic-sentiment-lora.hf.space — try
`GET /health` and `POST /predict` (Arabic text in; positive / negative /
neutral + confidence out).

## What's in this repo

| Path                                                                  | Size    | Purpose                                                                                                            |
|-----------------------------------------------------------------------|---------|--------------------------------------------------------------------------------------------------------------------|
| `models/arabert-lora-v1/`                                             | 2.8 MB  | LoRA adapter weights + tokenizer + labels. Used as the filesystem fallback if registry resolution fails in-container. |
| `mlflow.db`                                                           | 892 KB  | SQLite-backed MLflow registry. Holds the `arabert-lora` v1 registered model + its run lineage.                      |
| `mlruns/1/models/m-f9cac40424504a5a91d9449f38f5bd7c/`                  | 523 MB  | MLflow 3.x logged-model artefacts — the pyfunc bundle (`MLmodel`, `python_model.pkl`, nested LoRA weights).         |

Total: **27 files, ~525 MB**. LFS-tracked binaries handled by HF Hub
automatically.

## How it's consumed

The container's Dockerfile (cache-warm stage) fetches the whole repo
via `huggingface_hub.snapshot_download`:

```python
from huggingface_hub import snapshot_download

snapshot_download(
    "PrajnaShetty/arabic-sentiment-lora-deploy",
    repo_type="model",
    local_dir="/opt/deploy",
)
```

The runtime stage `COPY`s `/opt/deploy` into `/app/`, applies a
build-time SQL rewrite over six columns in `mlflow.db` (the absolute
build-host paths get retargeted to `/app/…`), and ships a torch
compatibility shim that maps MPS-tagged tensor storage to CPU at
deserialize time (the LoRA was logged on Apple Silicon; the runtime
torch wheel is Linux CPU-only).

See [`Dockerfile`](https://github.com/psjprajna/arabic-sentiment-mlops/blob/main/Dockerfile)
and [ADR-0008](https://github.com/psjprajna/arabic-sentiment-mlops/blob/main/.claude/docs/adrs/0008-hf-hub-pull-on-build.md)
in the source repo for the full mechanics.

## Model card

The model itself is an [AraBERT v2](https://huggingface.co/aubmindlab/bert-base-arabertv2)
classifier fine-tuned with LoRA on the [HARD dataset](https://github.com/elnagara/HARD-Arabic-Dataset)
for 3-class sentiment (positive / negative / neutral). Macro F1 on the
held-out test split: **0.838** (positive 0.91, negative 0.85, neutral
0.76). Dialect breakdown (per Phase 5 in the source repo): **0.80
macro F1 on Gulf** vs **0.85 on MSA** — a ~5-point gap the repo
documents rather than hides.

Hardware constraints: trained on Apple Silicon MPS (~80 min wall);
served on CPU at ~600 ms per `/predict` call on HF Spaces' free tier
(2 vCPU / 16 GB RAM).

## Loading the LoRA outside the Space

If you want to use just the LoRA adapter without the FastAPI container:

```python
from peft import PeftModel
from transformers import AutoTokenizer, AutoModelForSequenceClassification
from huggingface_hub import snapshot_download

bundle = snapshot_download(
    "PrajnaShetty/arabic-sentiment-lora-deploy",
    repo_type="model",
    allow_patterns="models/arabert-lora-v1/*",
)
base = AutoModelForSequenceClassification.from_pretrained(
    "aubmindlab/bert-base-arabertv2", num_labels=3
)
model = PeftModel.from_pretrained(base, f"{bundle}/models/arabert-lora-v1")
tokenizer = AutoTokenizer.from_pretrained(f"{bundle}/models/arabert-lora-v1")
```

## Source

- **App code + Dockerfile + ADRs:** https://github.com/psjprajna/arabic-sentiment-mlops
- **Running Space:** https://huggingface.co/spaces/PrajnaShetty/arabic-sentiment-lora
- **Live API:** https://prajnashetty-arabic-sentiment-lora.hf.space

## License

MIT. The base model ([`aubmindlab/bert-base-arabertv2`](https://huggingface.co/aubmindlab/bert-base-arabertv2))
and the [HARD dataset](https://github.com/elnagara/HARD-Arabic-Dataset)
are under their own licenses; please check there if you intend to use
this bundle outside personal / academic contexts.