GitPedia

Klaam

Arabic speech recognition, classification and text-to-speech.

From ARBML·Updated June 14, 2026·View on GitHub·

Arabic speech recognition, classification and text-to-speech using many advanced models like wave2vec and fastspeech2. This repository allows training and prediction using pretrained models. The project is written primarily in Jupyter Notebook, distributed under the MIT License license, first published in 2021. Key topics include: arabic, arabic-speech-recognition, asr, tts.

klaam

Arabic speech recognition, classification and text-to-speech using many advanced models like wave2vec and fastspeech2. This repository allows training and prediction using pretrained models.

<p align="center"> <img src="https://raw.githubusercontent.com/ARBML/klaam/main/misc/klaam_logo.png" width="250px"/> </p>

1. Usage

1.1 Speech Classification

python
from klaam import SpeechClassification model = SpeechClassification() model.classify(wav_file)

1.2 Speech Recongnition

python
from klaam import SpeechRecognition model = SpeechRecognition() model.transcribe(wav_file)

1.3 Text To Speech

python
from klaam import TextToSpeech prepare_tts_model_path = "../cfgs/FastSpeech2/config/Arabic/preprocess.yaml" model_config_path = "../cfgs/FastSpeech2/config/Arabic/model.yaml" train_config_path = "../cfgs/FastSpeech2/config/Arabic/train.yaml" vocoder_config_path = "../cfgs/FastSpeech2/model_config/hifigan/config.json" speaker_pre_trained_path = "../data/model_weights/hifigan/generator_universal.pth.tar" model = TextToSpeech(prepare_tts_model_path, model_config_path, train_config_path, vocoder_config_path, speaker_pre_trained_path) model.synthesize(sample_text)

There are two avilable models for recognition trageting Modern Standard Arabic (MSA) and Egyptian dialect (EGY) . You can set any of them using the lang attribute.

python
from klaam import SpeechRecognition model = SpeechRecognition(lang = 'msa') model.transcribe('file.wav')

2. Datasets

DatasetDescriptionLink
MGB-3Egyptian Arabic Speech recognition in the wild. Every sentence was annotated by four annotators. More than 15 hours have been collected from YouTube.here [Registeration required]
ADI-5More than 50 hours collected from Aljazeera TV. 4 regional dialectal: Egyptian (EGY), Levantine (LAV), Gulf (GLF), North African (NOR), and Modern Standard Arabic (MSA). This dataset is a part of the MGB-3 challenge.here [Registeration required]
Common voiceMultlilingual dataset avilable on huggingfacehere.
Arabic Speech CorpusArabic dataset with alignment and transcriptionshere.

3. Models

Our project currently supports four models, three of them are avilable on transformers.

LanguageDescriptionSource
EgyptianSpeech recognitionwav2vec2-large-xlsr-53-arabic-egyptian
Standard ArabicSpeech recognitionwav2vec2-large-xlsr-53-arabic
EGY, NOR, LAV, GLF, MSASpeech classificationwav2vec2-large-xlsr-dialect-classification
Standard ArabicText-to-Speechfastspeech2

4. Example Notebooks

<table> <tr> <th><b>Name</b></th> <th><b>Description</b></th> <th><b>Notebook</b></th> </tr> <tr> <td>Demo</td> <td>Classification, Recongition and Text-to-speech in a few lines of code.</td> <td><a href="https://colab.research.google.com/github/ARBML/klaam/blob/main/notebooks/demo.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg" > </a></td> </tr> <tr> <td>Demo with mic</td> <td>Audio Recongition and classification with recording.</td> <td><a href="https://colab.research.google.com/github/ARBML/klaam/blob/main/notebooks/demo_with_mic.ipynb"> <img src="https://colab.research.google.com/assets/colab-badge.svg"> </a></td> </tr> <table>

5. Training

The scripts are a modification of jqueguiner/wav2vec2-sprint.

5.1. Classification

This script is used for the classification task on the 5 classes.

sh
python run_classifier.py \ --model_name_or_path="facebook/wav2vec2-large-xlsr-53" \ --output_dir=/path/to/output \ --cache_dir=/path/to/cache/ \ --freeze_feature_extractor \ --num_train_epochs="50" \ --per_device_train_batch_size="32" \ --preprocessing_num_workers="1" \ --learning_rate="3e-5" \ --warmup_steps="20" \ --evaluation_strategy="steps"\ --save_steps="100" \ --eval_steps="100" \ --save_total_limit="1" \ --logging_steps="100" \ --do_eval \ --do_train \

5.2. Recognition

This script is for training on the dataset for pretraining on the egyption dialects dataset.

sh
python run_mgb3.py \ --model_name_or_path="facebook/wav2vec2-large-xlsr-53" \ --output_dir=/path/to/output \ --cache_dir=/path/to/cache/ \ --freeze_feature_extractor \ --num_train_epochs="50" \ --per_device_train_batch_size="32" \ --preprocessing_num_workers="1" \ --learning_rate="3e-5" \ --warmup_steps="20" \ --evaluation_strategy="steps"\ --save_steps="100" \ --eval_steps="100" \ --save_total_limit="1" \ --logging_steps="100" \ --do_eval \ --do_train \

This script can be used for Arabic common voice training

sh
python run_common_voice.py \ --model_name_or_path="facebook/wav2vec2-large-xlsr-53" \ --dataset_config_name="ar" \ --output_dir=/path/to/output/ \ --cache_dir=/path/to/cache \ --overwrite_output_dir \ --num_train_epochs="1" \ --per_device_train_batch_size="32" \ --per_device_eval_batch_size="32" \ --evaluation_strategy="steps" \ --learning_rate="3e-4" \ --warmup_steps="500" \ --fp16 \ --freeze_feature_extractor \ --save_steps="10" \ --eval_steps="10" \ --save_total_limit="1" \ --logging_steps="10" \ --group_by_length \ --feat_proj_dropout="0.0" \ --layerdrop="0.1" \ --gradient_checkpointing \ --do_train --do_eval \ --max_train_samples 100 --max_val_samples 100

5.3. Text To Speech

We use the pytorch implementation of fastspeech2 by ming024.

The procedure is as the following:

  1. Download the dataset and unzip it.
wget http://en.arabicspeechcorpus.com/arabic-speech-corpus.zip
unzip arabic-speech-corpus.zip
  1. Create multiple directories for data
mkdir -p raw_data/Arabic/Arabic preprocessed_data/Arabic/TextGrid/Arabic
cp arabic-speech-corpus/textgrid/* preprocessed_data/Arabic/TextGrid/Arabic
  1. Prepare metadata
python
import os base_dir = '/content/arabic-speech-corpus' lines = [] for lab_file in os.listdir(f'{base_dir}/lab'): lines.append(lab_file[:-4]+'|'+open(f'{base_dir}/lab/{lab_file}', 'r').read()) open(f'{base_dir}/metadata.csv', 'w').write(('\n').join(lines))
  1. Clone my repository (FastSpeech2) and installl the dependencies required.
bash
git clone --depth 1 https://github.com/zaidalyafeai/FastSpeech2 cd FastSpeech2 pip install -r requirements.txt
  1. Prepare alignments and prepreocessed data.
python3 prepare_align.py config/Arabic/preprocess.yaml
python3 preprocess.py config/Arabic/preprocess.yaml
  1. Unzip vocoders.
unzip hifigan/generator_LJSpeech.pth.tar.zip -d hifigan
unzip hifigan/generator_universal.pth.tar.zip -d hifigan
  1. Start the training.
python3 train.py -p config/Arabic/preprocess.yaml -m config/Arabic/model.yaml -t config/Arabic/train.yaml

This repository was created by the ARBML team. If you have any suggestion or contribution feel free to make a pull request.

Contributors

Showing top 5 contributors by commit count.

View all contributors on GitHub →

This article is auto-generated from ARBML/klaam via the GitHub API.Last fetched: 6/19/2026