obadx's picture
refine citations
5ee9036 verified
---
base_model: facebook/w2v-bert-2.0
library_name: transformers
license: mit
metrics:
- accuracy
- f1
- precision
- recall
tags:
- generated_from_trainer
- arabic
- quran
- speech-segmentation
model-index:
- name: recitation-segmenter-v2
results: []
pipeline_tag: automatic-speech-recognition
language: ar
---
# recitation-segmenter-v2: Quranic Recitation Segmenter
This model is a fine-tuned version of [facebook/w2v-bert-2.0](https://huggingface.co/facebook/w2v-bert-2.0) for segmenting Holy Quran recitations based on pause points (waqf). It was presented in the paper [Automatic Pronunciation Error Detection and Correction of the Holy Quran's Learners Using Deep Learning](https://huggingface.co/papers/2509.00094).
Project Page: https://obadx.github.io/prepare-quran-dataset/
GitHub Repository: https://github.com/obadx/recitations-segmenter
It achieves the following results on the evaluation set:
- Accuracy: 0.9958
- F1: 0.9964
- Loss: 0.0132
- Precision: 0.9976
- Recall: 0.9951
## Model description
The `recitation-segmenter-v2` model is an enhanced AI model capable of segmenting Holy Quran recitations based on pause points (`waqf`) with high accuracy. It is built upon a fine-tuned [Wav2Vec2Bert](https://huggingface.co/docs/transformers/model_doc/wav2vec2-bert) model, performing Sequence Frame Level Classification with a 20-millisecond resolution. This model and its accompanying Python library are designed for high-performance processing of any number and length of Quranic recitations, from a few seconds to several hours, without performance degradation.
Key Features:
* Segments Quranic recitations according to `waqf` (pause rules).
* Specifically trained for Quranic recitations.
* High accuracy, up to 20 milliseconds precision.
* Requires only ~3 GB of GPU memory.
* Capable of processing recitations of any duration without performance loss.
The model is part of a larger effort described in the associated paper, aiming to bridge gaps in assessing spoken language for the Holy Quran. This includes an automated pipeline to produce high-quality Quranic datasets and a novel ASR-based approach for pronunciation error detection using a custom Quran Phonetic Script (QPS).
## Intended uses & limitations
This model is primarily intended for:
* Automatic segmentation of Holy Quran recitations for educational purposes or content analysis.
* Building high-quality Quranic audio databases.
* As a foundational component for larger systems focused on pronunciation error detection and correction for Quran learners.
**Limitations**:
* The segmenter currently considers `sakt` (a very short pause without breath) as a full `waqf` (stop), which might be a nuance for advanced Tajweed analysis.
* The model is specifically trained and optimized for Quranic recitations and might not generalize well to other forms of spoken Arabic.
## Training and evaluation data
The model was fine-tuned on a meticulously collected dataset of Quranic recitations. The data collection process, described in the associated paper, involved a 98% automated pipeline including collection from expert reciters, segmentation at pause points (`waqf`) using a fine-tuned `wav2vec2-BERT` model, transcription of segments, and transcript verification via a novel Tasmeea algorithm. The dataset comprises over 850 hours of audio (~300K annotated utterances).
The data preparation involved:
1. Downloading Quranic recitations and converting them to Hugging Face Audio Dataset format at 16000 Hz sample rate.
2. Pre-segmenting verses based on pauses using `sliero-vad-v4` from [everyayah.com](https://everyayah.com).
3. Applying post-processing (e.g., `min_silence_duration_ms`, `min_speech_duration_ms`, `pad_duration_ms`) to refine segments and manual verification for high-quality divisions.
4. Applying data augmentation techniques, including time stretching (speeding up/slowing down 40% of recitations) and various audio effects (Aliasing, AddGaussianNoise, BandPassFilter, PitchShift, RoomSimulator, etc.) using the `audiomentations` library.
5. Normalizing audio segments to 16000 Hz and chunking them, with a maximum length of 20 seconds, using a sliding window approach for longer segments.
The training dataset and its augmented version are available on Hugging Face:
* [Training Data](https://huggingface.co/datasets/obadx/recitation-segmentation)
* [Augmented Training Data](https://huggingface.co/datasets/obadx/recitation-segmentation-augmented)
## Usage
You can use this model with its accompanying Python library, `recitations-segmenter`, which integrates with Hugging Face `transformers`.
First, ensure `ffmpeg` and `libsoundfile` are installed system-wide.
### Requirements
Install `ffmpeg` and `libsoundfile` system-wide.
#### Linux
```bash
sudo apt-get update
sudo apt-get install -y ffmpeg libsndfile1 portaudio19-dev
```
#### Windows & Mac
You can create an `anaconda` environment and then install these libraries:
```bash
conda create -n segment python=3.12
conda activate segment
conda install -c conda-forge ffmpeg libsndfile
```
### Via pip
```bash
pip install recitations-segmenter
```
### Sample usage (Python API)
Here's a complete example for using the library in Python. A Google Colab example is also available: [Open in Colab](https://colab.research.google.com/drive/1-RuRQOj4l2MA_SG2p4m-afR7MAsT5I22?usp=sharing)
```python
from pathlib import Path
from recitations_segmenter import segment_recitations, read_audio, clean_speech_intervals
from transformers import AutoFeatureExtractor, AutoModelForAudioFrameClassification
import torch
if __name__ == '__main__':
device = torch.device('cuda')
dtype = torch.bfloat16
processor = AutoFeatureExtractor.from_pretrained(
"obadx/recitation-segmenter-v2")
model = AutoModelForAudioFrameClassification.from_pretrained(
"obadx/recitation-segmenter-v2",
)
model.to(device, dtype=dtype)
# Change this to the file pathes of Holy Quran recitations
# File pathes with the Holy Quran Recitations
file_pathes = [
'./assets/dussary_002282.mp3',
'./assets/hussary_053001.mp3',
]
waves = [read_audio(p) for p in file_pathes]
# Extracting speech inervals in samples according to 16000 Sample rate
sampled_outputs = segment_recitations(
waves,
model,
processor,
device=device,
dtype=dtype,
batch_size=8,
)
for out, path in zip(sampled_outputs, file_pathes):
# Clean The speech intervals by:
# * merging small silence durations
# * remove small speech durations
# * add padding to each speech duration
# Raises:
# * NoSpeechIntervals: if the wav is complete silence
# * TooHighMinSpeechDruation: if `min_speech_duration` is too high which
# resuls for deleting all speech intervals
clean_out = clean_speech_intervals(
out.speech_intervals,
out.is_complete,
min_silence_duration_ms=30,
min_speech_duration_ms=30,
pad_duration_ms=30,
return_seconds=True,
)
print(f'Speech Intervals of: {Path(path).name}: ')
print(clean_out.clean_speech_intervals)
print(f'Is Recitation Complete: {clean_out.is_complete}')
print('-' * 40)
```
## Training procedure
The model was trained on `Wav2Vec2BertForAudioFrameClassification` using the `transformers` library. More detailed motivations, methodology, and setup can be found in the GitHub repository's "تفاصيل التدريب" section.
### Training hyperparameters
The following hyperparameters were used during training:
- learning_rate: 5e-05
- train_batch_size: 50
- eval_batch_size: 64
- seed: 42
- optimizer: Use adamw_torch with betas=(0.9,0.999) and epsilon=1e-08 and optimizer_args=No additional optimizer arguments
- lr_scheduler_type: constant
- lr_scheduler_warmup_ratio: 0.2
- num_epochs: 1
### Training results
| Training Loss | Epoch | Step | Accuracy | F1 | Validation Loss | Precision | Recall |
|:-------------:|:------:|:----:|:--------:|:------:|:---------------:|:---------:|:------:|
| 0.0701 | 0.2507 | 275 | 0.9953 | 0.9959 | 0.0249 | 0.9947 | 0.9971 |
| 0.0234 | 0.5014 | 550 | 0.9953 | 0.9959 | 0.0185 | 0.9940 | 0.9977 |
| 0.0186 | 0.7521 | 825 | 0.9958 | 0.9964 | 0.0132 | 0.9976 | 0.9951 |
### Framework versions
- Transformers 4.51.3
- Pytorch 2.2.1+cu121
- Datasets 3.5.0
- Tokenizers 0.21.1
## Citation
If you find our work helpful or inspiring, please feel free to cite it.
```bibtex
@article{ibrahim2025automatic,
title={Automatic Pronunciation Error Detection and Correction of the Holy Quran's Learners Using Deep Learning},
author={Abdullah Abdelfattah, Mahmoud I.Khalil, Hazem M.Abbas},
journal={arXiv preprint arXiv:2509.00094},
year={2025}
}
```