Downloads · 30 days
48
7% of all-time downloads
ahmedsamirtarjama/Tashkeel-50M
Tashkeel-50M is a text generation model from ahmedsamirtarjama. Use it when you need the model to write or continue text. It is set up for transformers. The card lists the license as apache-2.0.
A ~50M parameter Arabic diacritization (تشكيل) model fine-tuned from oddadmix/50M-2048-Emhotob on Misraj/SadeedTashkeela.
Downloads · 30 days
48
7% of all-time downloads
All-time downloads
687
Public
Parameters
51.8M
104 MB on disk
Likes
2
Public
Click a slice to open those files.
.safetensors104 MB · 97%
From the Hugging Face model README
A ~50M parameter Arabic diacritization (تشكيل) model fine-tuned from oddadmix/50M-2048-Emhotob on Misraj/Sadeed_Tashkeela.
It is a small causal LM intended for fast, on-device / low-cost Arabic tashkeel experiments.
| Architecture | LLaMA-style (LlamaForCausalLM) |
| Parameters | ~50M |
| Context | 2048 tokens |
| Hidden size | 512 |
| Layers | 12 |
| Vocab size | 32,000 |
| Precision | bfloat16 |
| Base model | oddadmix/50M-2048-Emhotob |
| Training data | Misraj/Sadeed_Tashkeela (train split) |
Training and inference use this prompt:
قم بتشكيل هذة الجمله : {undiacritized_text}
The model should continue with the diacritized Arabic text.
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_id = "ahmedsamirtarjama/Tashkeel-50M"
device = "cuda" if torch.cuda.is_available() else "cpu"
tok = AutoTokenizer.from_pretrained(model_id)
tok.padding_side = "left"
if tok.pad_token is None:
tok.pad_token = tok.eos_token
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16 if device == "cuda" else torch.float32,
).to(device)
model.eval()
text = "اللغة العربية لغة جميلة"
prompt = f"قم بتشكيل هذة الجمله : {text}\n"
inputs = tok(prompt, return_tensors="pt").to(device)
with torch.inference_mode():
out = model.generate(
**inputs,
max_new_tokens=256,
do_sample=False,
pad_token_id=tok.pad_token_id,
)
print(tok.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
Full fine-tune (not LoRA) with Hugging Face Trainer:
| Hyperparameter | Value |
|---|---|
| Epochs | 1 |
| Learning rate | 3e-4 |
| Scheduler | cosine |
| Warmup steps | 500 |
| Batch size | 32 |
| Max sequence length | 768 (longer examples dropped) |
| Loss | next-token LM loss on the diacritized target only (prompt tokens masked with -100) |
| Precision | bfloat16 |
Approximate training recipe:
<source prompt> + <diacritized target> + </s>
Evaluated on Misraj/SadeedDiac-25 with standard Morph/Total DER & WER (missing GT diacritics skipped).
Mapping used below: Total ≈ (CE) (with case endings), Morph ≈ (w/o CE) (without case endings). Hallucinations ≈ share of examples skipped due to word-count mismatch.
| Model | DER (CE) | WER (CE) | DER (w/o CE) | WER (w/o CE) | Hallucinations |
|---|---|---|---|---|---|
| Claude-3-7-Sonnet | 1.39 | 4.67 | 0.77 | 2.31 | 0.82 |
| Tashkeel-50M | 3.08* | 9.56* | 2.26* | 6.77* | ~99 |
| GPT-4 | 3.86 | 5.27 | 3.86 | 10.93 | 1.02 |
| Gemini-Flash-2.0 | 3.19 | 7.99 | 2.38 | 5.50 | 1.17 |
| Sadeed | 7.29 | 13.74 | 5.26 | 9.92 | 7.19 |
*Tashkeel-50M DER/WER are computed only on examples where the prediction and reference have the same word count. Because most generations change length (truncation / repetition / insertions), they are skipped by the length-matching evaluator — hence the high hallucination rate. Treat the starred numbers as optimistic and not a full apples-to-apples comparison with systems that preserve word identity on nearly all examples.
For production tashkeel, prefer stronger constrained models or add decoding constraints that keep the undiacritized skeleton fixed.
If you use this model, please also cite the base model and dataset:
@misc{tashkeel50m,
title = {Tashkeel-50M},
author = {Ahmed Samir},
year = {2026},
howpublished = {\url{https://huggingface.co/ahmedsamirtarjama/Tashkeel-50M}}
}
oddadmix/50M-2048-EmhotobMisraj/Sadeed_Tashkeela