Restores every แธฅaraka โ fatแธฅa, แธamma, kasra, sukลซn, shadda, tanwฤซn, and case-endings (iสฟrฤb) โ directly from the audio, in a single pass.
| ๐ฏ Diacritic Accuracy | ๐ DER ยท with iสฟrฤb | ๐ DER ยท no iสฟrฤb | ๐ค Letter WER |
|---|---|---|---|
| 95.30% | 6.62% | 5.67% | 10.13% |
Diacritic accuracy = correct แธฅaraka placement on letters the model recognized correctly.
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.
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.
Evaluated on a held-out set of 260 natural Arabic speech clips.
| 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.
Fully-diacritized transcriptions produced by the model:
| # | ุงููููุตูู ุงูู ูุดููููู |
|---|---|
| ูก | ุงูุณูููููุฏู ุฃููููู ุฃููุฑูุงู ูุง ุฑูุฆููุณู ู ูุฌูููุณู ุฅูุฏูุงุฑูุฉู ุจููููู ุงูุชููููู ูููุฉู ุงููุฅูููุฑูููููู |
| ูข | ููุงููุจูุฐููุฑู ููุถูู ูุงูู ููุฌูุงุญู ุงููู ููุณูู ู ุงูุฒููุฑูุงุนูููู ุงููููุงุฏูู ู |
| ูฃ | ููุตููู ุงูุฑููุจูุญู ููุฑูุจูู ุงููู ูุงูู ุฎูุงุตููุฉู ุ ููุฃูููู ุงููู ูุถูุงุฑูุจูุฉู ููููู ููุงุณูุฏูุฉู |
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()
# load audio as 16 kHz mono
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")
# request the diacritized Arabic decoding
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).
| 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) |
| Precision | bfloat16 |
| License | Apache 2.0 |
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}
}
Restores every แธฅaraka โ fatแธฅa, แธamma, kasra, sukลซn, shadda, tanwฤซn, and case-endings (iสฟrฤb) โ directly from the audio, in a single pass.
| ๐ฏ Diacritic Accuracy | ๐ DER ยท with iสฟrฤb | ๐ DER ยท no iสฟrฤb | ๐ค Letter WER |
|---|---|---|---|
| 95.30% | 6.62% | 5.67% | 10.13% |
Diacritic accuracy = correct แธฅaraka placement on letters the model recognized correctly.
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.
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.
Evaluated on a held-out set of 260 natural Arabic speech clips.
| 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.
Fully-diacritized transcriptions produced by the model:
| # | ุงููููุตูู ุงูู ูุดููููู |
|---|---|
| ูก | ุงูุณูููููุฏู ุฃููููู ุฃููุฑูุงู ูุง ุฑูุฆููุณู ู ูุฌูููุณู ุฅูุฏูุงุฑูุฉู ุจููููู ุงูุชููููู ูููุฉู ุงููุฅูููุฑูููููู |
| ูข | ููุงููุจูุฐููุฑู ููุถูู ูุงูู ููุฌูุงุญู ุงููู ููุณูู ู ุงูุฒููุฑูุงุนูููู ุงููููุงุฏูู ู |
| ูฃ | ููุตููู ุงูุฑููุจูุญู ููุฑูุจูู ุงููู ูุงูู ุฎูุงุตููุฉู ุ ููุฃูููู ุงููู ูุถูุงุฑูุจูุฉู ููููู ููุงุณูุฏูุฉู |
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()
# load audio as 16 kHz mono
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")
# request the diacritized Arabic decoding
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).
| 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) |
| Precision | bfloat16 |
| License | Apache 2.0 |
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}
}