Transformers
Safetensors
Arabic
t5
text2text-generation
saudi
nlp
error-correction
text-generation-inference
Instructions to use NAMAA-Space/SaudiSpell-AraT5 with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use NAMAA-Space/SaudiSpell-AraT5 with Transformers:
# pip install -U transformers accelerate # Load model directly from transformers import AutoTokenizer, AutoModelForSeq2SeqLM tokenizer = AutoTokenizer.from_pretrained("NAMAA-Space/SaudiSpell-AraT5") model = AutoModelForSeq2SeqLM.from_pretrained("NAMAA-Space/SaudiSpell-AraT5", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Update README.md
Browse files
README.md
CHANGED
|
@@ -1,3 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
---
|
| 2 |
license: apache-2.0
|
| 3 |
datasets:
|
|
@@ -6,72 +10,143 @@ language:
|
|
| 6 |
- ar
|
| 7 |
metrics:
|
| 8 |
- wer
|
|
|
|
| 9 |
base_model:
|
| 10 |
- UBC-NLP/AraT5-base
|
| 11 |
tags:
|
| 12 |
- auto-correction
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
---
|
| 14 |
|
|
|
|
| 15 |
|
|
|
|
| 16 |
|
| 17 |
-
#
|
|
|
|
| 18 |
|
| 19 |
-
*
|
|
|
|
|
|
|
| 20 |
|
| 21 |
-
##
|
|
|
|
| 22 |
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
- 🇸🇦 **Standard Saudi** (33% of training data)
|
| 29 |
|
| 30 |
-
|
|
|
|
|
|
|
| 31 |
|
| 32 |
-
|
| 33 |
|
| 34 |
-
###
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
2. **🗣️ Phonetic Substitutions:** Common dialectal sound-alike errors (e.g., Qaf variations).
|
| 38 |
-
3. **👁️ Visual Substitutions:** Look-alike character errors.
|
| 39 |
-
4. **❌ Deletions & Insertions:** Random character noise mimicking fast typing.
|
| 40 |
-
5. **✂️ Space Stripping:** Merged words mimicking ASR artifacts or missing spaces.
|
| 41 |
|
| 42 |
-
|
| 43 |
|
| 44 |
-
|
| 45 |
|
| 46 |
```python
|
| 47 |
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
|
| 48 |
|
|
|
|
| 49 |
model_name = "FatimahEmadEldin/SaudiSpell-AraT5"
|
| 50 |
-
|
| 51 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 52 |
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
|
| 53 |
|
| 54 |
def correct_text(text):
|
| 55 |
-
#
|
| 56 |
input_text = "correct: " + text
|
| 57 |
|
| 58 |
inputs = tokenizer(input_text, return_tensors="pt", max_length=128, truncation=True)
|
| 59 |
|
|
|
|
| 60 |
outputs = model.generate(
|
| 61 |
**inputs,
|
| 62 |
max_new_tokens=128,
|
| 63 |
-
num_beams=5, # Beam search
|
| 64 |
early_stopping=True
|
| 65 |
)
|
| 66 |
return tokenizer.decode(outputs[0], skip_special_tokens=True)
|
| 67 |
|
| 68 |
-
#
|
| 69 |
-
|
| 70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
|
| 72 |
```
|
| 73 |
|
| 74 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
|
| 76 |
-
* The model is optimized for short-to-medium length sentences (social media, chat).
|
| 77 |
-
* While robust to some Arabizi (Latin script Arabic), it performs best on Arabic script input.
|
|
|
|
| 1 |
+
|
| 2 |
+
### **Updated README.md Content**
|
| 3 |
+
|
| 4 |
+
|
| 5 |
---
|
| 6 |
license: apache-2.0
|
| 7 |
datasets:
|
|
|
|
| 10 |
- ar
|
| 11 |
metrics:
|
| 12 |
- wer
|
| 13 |
+
- cer
|
| 14 |
base_model:
|
| 15 |
- UBC-NLP/AraT5-base
|
| 16 |
tags:
|
| 17 |
- auto-correction
|
| 18 |
+
- gec
|
| 19 |
+
- saudi-dialect
|
| 20 |
+
- nlp
|
| 21 |
+
library_name: transformers
|
| 22 |
+
---
|
| 23 |
+
|
| 24 |
+
# SaudiSpell-AraT5: Comprehensive Saudi Dialect Spelling Correction
|
| 25 |
+
|
| 26 |
+
**SaudiSpell-AraT5** is a state-of-the-art sequence-to-sequence spelling correction model fine-tuned on a massive, balanced corpus of Saudi Dialectal Arabic. Unlike generic Arabic correctors, this model is engineered to handle the specific orthographic and phonetic nuances of **Najdi**, **Hijazi**, and **Standard Saudi** dialects alongside Modern Standard Arabic (MSA).
|
| 27 |
+
|
| 28 |
+
## 📊 Model Performance & Training Insights
|
| 29 |
+
|
| 30 |
+
The model achieved **exceptional convergence**, reaching a final training loss of **0.0729**, indicating high confidence in correcting complex dialectal errors.
|
| 31 |
+
|
| 32 |
+
| Metric | Value | Description |
|
| 33 |
+
| :--- | :--- | :--- |
|
| 34 |
+
| **Final Training Loss** | **0.0729** | Low loss indicates high precision in error detection. |
|
| 35 |
+
| **Training Steps** | 45,000 | Fully converged over ~3 million samples. |
|
| 36 |
+
| **Base Architecture** | AraT5-Base | Specialized T5 model pre-trained on Arabic. |
|
| 37 |
+
|
| 38 |
+
### Training Loss Curve
|
| 39 |
+
|
| 40 |
+
|
| 41 |
+

|
| 42 |
+
|
| 43 |
+
## 🛠️ Training Configuration & Hyperparameters
|
| 44 |
+
|
| 45 |
+
Transperency is key for reproducibility. The model was fine-tuned using the following configuration on NVIDIA A100 GPUs:
|
| 46 |
+
|
| 47 |
+
* **Batch Size:** 64
|
| 48 |
+
* **Learning Rate:** 5e-5
|
| 49 |
+
* **Optimizer:** AdamW
|
| 50 |
+
* **Precision:** bf16 (Bfloat16)
|
| 51 |
+
* **Max Sequence Length:** 128 tokens
|
| 52 |
+
* **Num Epochs:** 1 (Full pass over 3M balanced rows)
|
| 53 |
+
* **Checkpoint Strategy:** Saved at step 45,000.
|
| 54 |
+
|
| 55 |
---
|
| 56 |
|
| 57 |
+
## 📚 Dataset & Methodology
|
| 58 |
|
| 59 |
+
The training data consists of **3 Million sentences**, strictly balanced to prevent the "majority dialect problem."
|
| 60 |
|
| 61 |
+
### 1. The "Balanced 33%" Strategy
|
| 62 |
+
Real-world data is often dominated by Najdi dialect. We employed an aggressive **oversampling strategy (50x)** for rare dialects to ensure the model treats all regions equally.
|
| 63 |
|
| 64 |
+
* 🛡️ **Najdi:** 33% (Central Region)
|
| 65 |
+
* 🕋 **Hijazi:** 33% (Western Region)
|
| 66 |
+
* 🇸🇦 **Standard Saudi:** 33% (Formal/Media)
|
| 67 |
|
| 68 |
+
### 2. Synthetic Error Injection Protocol
|
| 69 |
+
To mimic real-world typing behavior, we developed a "Saudi-Calibrated" error injector. Every sample has a **20% probability** of containing one of the following error types:
|
| 70 |
|
| 71 |
+
1. **⌨️ Keyboard Typos:** Adjacency errors based on the specific Arabic keyboard layout (e.g., hitting 'ث' instead of 'ص').
|
| 72 |
+
2. **🗣️ Phonetic Substitutions:** Dialectal sound-alikes (e.g., 'ق' vs 'غ' or 'ذ' vs 'ز').
|
| 73 |
+
3. **👁️ Visual Substitutions:** Shape-based errors (e.g., 'ه' vs 'ة').
|
| 74 |
+
4. **❌ Deletions & Insertions:** Simulating fast typing/missed keystrokes.
|
| 75 |
+
5. **✂️ Space Stripping:** Merged words (e.g., "ياخي" instead of "يا اخي").
|
|
|
|
| 76 |
|
| 77 |
+
---
|
| 78 |
+
|
| 79 |
+
## 🚀 Usage
|
| 80 |
|
| 81 |
+
You can use this model directly with the Hugging Face `transformers` library.
|
| 82 |
|
| 83 |
+
### Installation
|
| 84 |
+
```bash
|
| 85 |
+
pip install transformers torch
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
|
| 87 |
+
```
|
| 88 |
|
| 89 |
+
### Inference Code
|
| 90 |
|
| 91 |
```python
|
| 92 |
from transformers import AutoTokenizer, AutoModelForSeq2SeqLM
|
| 93 |
|
| 94 |
+
# 1. Load Model
|
| 95 |
model_name = "FatimahEmadEldin/SaudiSpell-AraT5"
|
|
|
|
| 96 |
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 97 |
model = AutoModelForSeq2SeqLM.from_pretrained(model_name)
|
| 98 |
|
| 99 |
def correct_text(text):
|
| 100 |
+
# IMPORTANT: The model was trained with the prefix "correct: "
|
| 101 |
input_text = "correct: " + text
|
| 102 |
|
| 103 |
inputs = tokenizer(input_text, return_tensors="pt", max_length=128, truncation=True)
|
| 104 |
|
| 105 |
+
# Generate correction
|
| 106 |
outputs = model.generate(
|
| 107 |
**inputs,
|
| 108 |
max_new_tokens=128,
|
| 109 |
+
num_beams=5, # Beam search ensures higher quality
|
| 110 |
early_stopping=True
|
| 111 |
)
|
| 112 |
return tokenizer.decode(outputs[0], skip_special_tokens=True)
|
| 113 |
|
| 114 |
+
# --- Examples ---
|
| 115 |
+
|
| 116 |
+
# 1. Hijazi Example (Phonetic & Typos)
|
| 117 |
+
# Input: "ya wad ishbk mst3jl kda" (Arabizi/Typos)
|
| 118 |
+
print(correct_text("يا واد اشبك مستعجل كدا"))
|
| 119 |
+
# Expected: "يا واد اشبك مستعجل كذا"
|
| 120 |
+
|
| 121 |
+
# 2. Najdi Example (Space Stripping)
|
| 122 |
+
# Input: "ياخي وراك مارديت"
|
| 123 |
+
print(correct_text("ياخي وراك مارديت"))
|
| 124 |
+
# Expected: "يا أخي وراك ما رديت"
|
| 125 |
|
| 126 |
```
|
| 127 |
|
| 128 |
+
---
|
| 129 |
+
|
| 130 |
+
## ⚠️ Limitations
|
| 131 |
+
|
| 132 |
+
* **Context Length:** Optimized for sentences up to 128 tokens (tweets, chat messages). Longer texts should be split.
|
| 133 |
+
* **Arabizi:** While it has some capability to handle Latin-script Arabic (Arabizi), it is primarily optimized for Arabic script.
|
| 134 |
+
* **Ultra-Local Slang:** Extremely niche slang words not present in the training corpus may be normalized to MSA or Standard Saudi.
|
| 135 |
+
|
| 136 |
+
---
|
| 137 |
+
|
| 138 |
+
## 📜 Citation
|
| 139 |
+
|
| 140 |
+
If you use this model in your research, please cite:
|
| 141 |
+
|
| 142 |
+
```bibtex
|
| 143 |
+
@misc{SaudiSpell2025,
|
| 144 |
+
author = {Fatimah EmadEldin},
|
| 145 |
+
title = {SaudiSpell-AraT5: A Balanced Saudi Dialect Error Correction Model},
|
| 146 |
+
year = {2025},
|
| 147 |
+
publisher = {Hugging Face},
|
| 148 |
+
howpublished = {\url{[https://huggingface.co/FatimahEmadEldin/SaudiSpell-AraT5](https://huggingface.co/FatimahEmadEldin/SaudiSpell-AraT5)}}
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
```
|
| 152 |
|
|
|
|
|
|