✨ What it does
Cohere-ar-tashkeel takes spoken Arabic and returns fully-voweled text. Instead of guessing diacritics from an unvoweled skeleton, it infers them from how the words are actually pronounced — so the output reflects the real reading, not a statistical best-guess.
It is built on Cohere Labs' cohere-transcribe-arabic-07-2026 (a ~2B-parameter Arabic/English speech model) and specialized for acoustic diacritization.
🎧 Why diacritize from speech?
Restoring tashkeel from text alone is inherently ambiguous — one consonantal skeleton (رَسْم) maps to many valid voweled readings, and text-only tools must guess which one was intended. Speech removes that ambiguity: the vowels and grammatical endings are audible. This model simply listens and writes them down.
That is exactly why it excels at the hardest part of tashkeel — case-endings / iʿrāb (إِعْرَاب) — the word-final marks that text-only systems most often get wrong.
📈 Results
Evaluated on a held-out set of 260 natural Arabic speech clips.
Table with columns: Metric, Score, What it measures| Metric | Score | What it measures |
|---|
| Diacritic accuracy | 95.30% | Correct ḥaraka on correctly-recognized letters — the purest tashkeel-quality signal. |
| DER — with case-endings | 6.62% | Diacritic Error Rate over all letters, including word-final iʿrāb. |
| DER — excluding case-endings | 5.67% | DER on word-internal diacritics only. |
| WER — undiacritized | 10.13% | Letter-level speech-recognition accuracy. |
| WER — fully diacritized | 24.35% | Strict: any single wrong ḥaraka marks the whole word wrong. |
How to read this: when the model hears a letter correctly, it places the right diacritic on it 95.3% of the time, and only ~1 diacritic in 15 is wrong even including the tricky grammatical endings. Diacritized WER is strict by design and reads high — DER and diacritic accuracy are the meaningful diacritization metrics.
📝 Example outputs
Fully-diacritized transcriptions produced by the model:
Table with columns: #, النَّصُّ المُشَكَّل| # | النَّصُّ المُشَكَّل |
|---|
| ١ | السَّيِّدْ أُوكِي أُورَامَا رَئِيسُ مَجْلِسِ إِدَارَةِ بَنْكِ التَّنْمِيَةِ الْإِفْرِيقِيّ |
| ٢ | وَالْبُذُورْ لِضَمَانِ نَجَاحِ الْمُوسِمِ الزِّرَاعِيِّ الْقَادِمْ |
| ٣ | نِصْفُ الرِّبْحِ لِرَبِّ الْمَالِ خَاصَّةً ، لِأَنَّ الْمُضَارَبَةَ فِيهِ فَاسِدَةٌ |
🚀 Usage
The model is fully self-contained — it loads and runs just like the Cohere ASR base model (the fine-tuned weights are already merged in).
import torch, soundfile as sf, librosa
from transformers import AutoProcessor, CohereAsrForConditionalGeneration
repo = "NAMAA-Space/Cohere-Speech-Tashkeel-2B"
proc = AutoProcessor.from_pretrained(repo)
model = CohereAsrForConditionalGeneration.from_pretrained(
repo, dtype=torch.bfloat16, device_map="auto"
).eval()
wav, sr = sf.read("your_audio.wav", dtype="float32")
if wav.ndim > 1:
wav = wav.mean(1)
if sr != 16000:
wav = librosa.resample(wav, orig_sr=sr, target_sr=16000)
feats = proc.feature_extractor(
[wav], sampling_rate=16000, return_tensors="pt",
padding="longest", return_attention_mask=True,
)
audio_chunk_index = feats.pop("audio_chunk_index")
prompt = proc.get_decoder_prompt_ids(language="ar", punctuation=True)
decoder_input_ids = torch.tensor([prompt], dtype=torch.long, device=model.device)
with torch.no_grad():
out = model.generate(
input_features=feats["input_features"].to(model.device, torch.bfloat16),
attention_mask=feats["attention_mask"].to(model.device),
decoder_input_ids=decoder_input_ids,
max_new_tokens=448,
)
text = proc.decode(out, skip_special_tokens=True,
audio_chunk_index=audio_chunk_index, language="ar")
print(text)
Requirements: transformers, torch, soundfile, librosa, and a CUDA GPU (bf16).
🧩 Model details
Table | |
|---|
| Base model | CohereLabs/cohere-transcribe-arabic-07-2026 |
| Parameters | ~2B |
| Architecture | Conformer encoder + Transformer decoder (attention encoder–decoder) |
| Task | Arabic speech → fully-diacritized text |
| Input | 16 kHz mono audio |
| Output | Diacritized Arabic text (with punctuation) |
|
⚠️ Intended use & limitations
- Intended use: fully-diacritized Arabic transcripts from audio — captioning, language learning, MSA/liturgical read-speech, TTS front-ends, and linguistic annotation where correct harakāt matter.
- Diacritization is inferred from pronunciation, so on noisy audio or unclear articulation the letters and their diacritics can degrade together — a VAD / noise gate is recommended for noisy input.
- Inherits the base model's constraints: optimized for a single pre-specified language, no timestamps or speaker diarization.
📜 Citation & attribution
Released under Apache 2.0. A fine-tuned derivative of CohereLabs/cohere-transcribe-arabic-07-2026 by Cohere Labs; all original terms apply.
@misc{cohere_ar_tashkeel_2026,
title = {Cohere-ar-tashkeel: Arabic Speech Diacritization},
author = {Omer Nacar},
year = {2026},
publisher = {Hugging Face},
howpublished = {\url{https://huggingface.co/NAMAA-Space/Cohere-Speech-Tashkeel-2B}},
note = {Built on CohereLabs/cohere-transcribe-arabic-07-2026}
}