Automated Multi-Signal Arabic and Urdu Transcription Quality Pipeline
A production-grade system for automatically selecting the most accurate transcription from multiple candidate transcriptions of the same audio, designed specifically for Arabic and Urdu speech.
When multiple transcriptions exist for the same audio sample (from different annotators or ASR systems), identifying the most accurate one requires manual expert review. GTSS automates this process using a multi-signal ensemble approach that evaluates:
Audio + Transcription Candidates
↓
[Stage 1] Audio Preprocessing + Arabic/Urdu Text Normalization
↓
[Stage 2] Multi-Signal Scoring (4 independent signals)
↓
[Stage 3] Ensemble Fusion + Golden Selection
↓
[Stage 4] WER Computation + Export
↓
predictions.csv (Golden labels + WER metrics)
| Signal | Weight | Purpose |
|---|---|---|
| ASR Confidence | 35% | Whisper re-transcription + word overlap |
| Consensus Voting | 30% | Cross-candidate agreement (ROVER-inspired) |
| LM Perplexity | 20% | AraGPT2/mGPT linguistic quality |
| Structural Quality | 15% | Length, repetition, filler detection |
# Clone the repository
git clone https://github.com/your-team/gtss.git
cd gtss
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Download models (first run only)
python scripts/download_models.py
# Process a dataset
python main.py \
--input data/transcriptions.csv \
--audio_dir data/audio/ \
--output output/ \
--language auto
# With specific language
python main.py \
--input data/transcriptions.csv \
--audio_dir data/audio/ \
--output output/ \
--language ar # or 'ur' for Urdu
CSV with columns:
audio_id, audio_filename, option_1, option_2, option_3, option_4, option_5
Or flexible column naming:
audio_id, filename, transcription_1, transcription_2, ...
predictions.csv:
audio_id, language, audio_filename, option_1, ..., option_5, golden_ref,
wer_option1, ..., wer_option5, asr_score, consensus_score, lm_score,
structural_score, ensemble_score, selection_margin
gtss/
├── main.py # CLI entry point
├── pipeline/
│ ├── __init__.py
│ ├── arabic_normalize.py # Arabic/Urdu text normalization (zero dependencies)
│ ├── asr_scoring.py # Whisper-based audio-text alignment
│ ├── consensus_scoring.py # ROVER-inspired cross-candidate voting
│ ├── lm_scoring.py # AraGPT2/mGPT perplexity computation
│ ├── structural.py # Heuristic quality signals
│ ├── ensemble.py # Weighted fusion + golden selection
│ └── wer_compute.py # Arabic-aware WER calculation
├── tests/
│ ├── test_arabic_normalize.py
│ ├── test_asr_scoring.py
│ ├── test_consensus.py
│ └── test_integration.py
├── scripts/
│ ├── download_models.py # Pre-download Whisper, AraGPT2, mGPT
│ └── run_ablation.py # Automated ablation study
├── data/
│ ├── train/ # Training data (if applicable)
│ ├── test/ # Test CSV goes here
│ └── audio/ # Audio files directory
├── output/ # predictions.csv + diagnostics.json
├── docs/
│ ├── PROPOSAL.pdf # Full technical proposal
│ ├── TECHNICAL_REPORT.pdf # Results and analysis
│ └── API.md # Module API documentation
├── requirements.txt
├── .gitignore
└── README.md # This file
# Run all tests
pytest tests/ -v
# Test specific modules
pytest tests/test_arabic_normalize.py -v
pytest tests/test_integration.py -v
# With coverage
pytest tests/ --cov=pipeline --cov-report=html
| Metric | Target | Notes |
|---|---|---|
| Golden Selection Accuracy | ≥ 85% | On held-out eval split |
| Mean WER (non-golden) | ≤ 0.25 | Normalized WER |
| Inference Speed | < 2× real-time | Per audio minute on CPU |
python main.py \
--input data/test.csv \
--audio_dir data/audio/ \
--output output/ \
--weight_asr 0.35 \
--weight_consensus 0.30 \
--weight_lm 0.20 \
--weight_structural 0.15
# Force Whisper base (faster)
python main.py --input data/test.csv --whisper_model base
# Force Whisper large-v3 (more accurate)
python main.py --input data/test.csv --whisper_model large-v3
# Auto-select based on hardware (default)
python main.py --input data/test.csv --whisper_model auto
Implemented in pipeline/arabic_normalize.py with zero external dependencies:
Uses langdetect to route each sample to:
ar or ur)Four variants for comparison:
Run ablation:
python scripts/run_ablation.py --input data/test.csv --audio_dir data/audio/
Language scope: Designed for Arabic and Urdu. Other languages require updating normalization rules and LM models.
Dialectal Arabic: Covers MSA orthographic variants. Dialectal transliterations may introduce residual WER inflation.
Whisper errors: Signal 1 uses Whisper as reference. Whisper mistakes on proper nouns/domain vocabulary can penalize correct candidates. Partially offset by Signals 2-4.
Consensus assumptions: Assumes independent annotator errors. Correlated errors (same ASR pre-fill tool) can reward incorrect majority.
Hardware requirements:
BITS Pilani, Goa Campus
MIT License - see LICENSE for details.
If you use this system in your research, please cite:
@misc{gtss2026,
title={Golden Transcription Selection System: Multi-Signal Ensemble for Arabic and Urdu Transcription Quality Evaluation},
author={Joshi, Mayank and Kumar, Saurabh and Rana, Krutik and Singh, Kushagra},
year={2026},
institution={BITS Pilani, Goa Campus}
}
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
Hackathon 2026 | Speech & Language Processing Track
Automated Multi-Signal Arabic and Urdu Transcription Quality Pipeline
A production-grade system for automatically selecting the most accurate transcription from multiple candidate transcriptions of the same audio, designed specifically for Arabic and Urdu speech.
When multiple transcriptions exist for the same audio sample (from different annotators or ASR systems), identifying the most accurate one requires manual expert review. GTSS automates this process using a multi-signal ensemble approach that evaluates:
Audio + Transcription Candidates
↓
[Stage 1] Audio Preprocessing + Arabic/Urdu Text Normalization
↓
[Stage 2] Multi-Signal Scoring (4 independent signals)
↓
[Stage 3] Ensemble Fusion + Golden Selection
↓
[Stage 4] WER Computation + Export
↓
predictions.csv (Golden labels + WER metrics)
| Signal | Weight | Purpose |
|---|---|---|
| ASR Confidence | 35% | Whisper re-transcription + word overlap |
| Consensus Voting | 30% | Cross-candidate agreement (ROVER-inspired) |
| LM Perplexity | 20% | AraGPT2/mGPT linguistic quality |
| Structural Quality | 15% | Length, repetition, filler detection |
# Clone the repository
git clone https://github.com/your-team/gtss.git
cd gtss
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Download models (first run only)
python scripts/download_models.py
# Process a dataset
python main.py \
--input data/transcriptions.csv \
--audio_dir data/audio/ \
--output output/ \
--language auto
# With specific language
python main.py \
--input data/transcriptions.csv \
--audio_dir data/audio/ \
--output output/ \
--language ar # or 'ur' for Urdu
CSV with columns:
audio_id, audio_filename, option_1, option_2, option_3, option_4, option_5
Or flexible column naming:
audio_id, filename, transcription_1, transcription_2, ...
predictions.csv:
audio_id, language, audio_filename, option_1, ..., option_5, golden_ref,
wer_option1, ..., wer_option5, asr_score, consensus_score, lm_score,
structural_score, ensemble_score, selection_margin
gtss/
├── main.py # CLI entry point
├── pipeline/
│ ├── __init__.py
│ ├── arabic_normalize.py # Arabic/Urdu text normalization (zero dependencies)
│ ├── asr_scoring.py # Whisper-based audio-text alignment
│ ├── consensus_scoring.py # ROVER-inspired cross-candidate voting
│ ├── lm_scoring.py # AraGPT2/mGPT perplexity computation
│ ├── structural.py # Heuristic quality signals
│ ├── ensemble.py # Weighted fusion + golden selection
│ └── wer_compute.py # Arabic-aware WER calculation
├── tests/
│ ├── test_arabic_normalize.py
│ ├── test_asr_scoring.py
│ ├── test_consensus.py
│ └── test_integration.py
├── scripts/
│ ├── download_models.py # Pre-download Whisper, AraGPT2, mGPT
│ └── run_ablation.py # Automated ablation study
├── data/
│ ├── train/ # Training data (if applicable)
│ ├── test/ # Test CSV goes here
│ └── audio/ # Audio files directory
├── output/ # predictions.csv + diagnostics.json
├── docs/
│ ├── PROPOSAL.pdf # Full technical proposal
│ ├── TECHNICAL_REPORT.pdf # Results and analysis
│ └── API.md # Module API documentation
├── requirements.txt
├── .gitignore
└── README.md # This file
# Run all tests
pytest tests/ -v
# Test specific modules
pytest tests/test_arabic_normalize.py -v
pytest tests/test_integration.py -v
# With coverage
pytest tests/ --cov=pipeline --cov-report=html
| Metric | Target | Notes |
|---|---|---|
| Golden Selection Accuracy | ≥ 85% | On held-out eval split |
| Mean WER (non-golden) | ≤ 0.25 | Normalized WER |
| Inference Speed | < 2× real-time | Per audio minute on CPU |
python main.py \
--input data/test.csv \
--audio_dir data/audio/ \
--output output/ \
--weight_asr 0.35 \
--weight_consensus 0.30 \
--weight_lm 0.20 \
--weight_structural 0.15
# Force Whisper base (faster)
python main.py --input data/test.csv --whisper_model base
# Force Whisper large-v3 (more accurate)
python main.py --input data/test.csv --whisper_model large-v3
# Auto-select based on hardware (default)
python main.py --input data/test.csv --whisper_model auto
Implemented in pipeline/arabic_normalize.py with zero external dependencies:
Uses langdetect to route each sample to:
ar or ur)Four variants for comparison:
Run ablation:
python scripts/run_ablation.py --input data/test.csv --audio_dir data/audio/
Language scope: Designed for Arabic and Urdu. Other languages require updating normalization rules and LM models.
Dialectal Arabic: Covers MSA orthographic variants. Dialectal transliterations may introduce residual WER inflation.
Whisper errors: Signal 1 uses Whisper as reference. Whisper mistakes on proper nouns/domain vocabulary can penalize correct candidates. Partially offset by Signals 2-4.
Consensus assumptions: Assumes independent annotator errors. Correlated errors (same ASR pre-fill tool) can reward incorrect majority.
Hardware requirements:
BITS Pilani, Goa Campus
MIT License - see LICENSE for details.
If you use this system in your research, please cite:
@misc{gtss2026,
title={Golden Transcription Selection System: Multi-Signal Ensemble for Arabic and Urdu Transcription Quality Evaluation},
author={Joshi, Mayank and Kumar, Saurabh and Rana, Krutik and Singh, Kushagra},
year={2026},
institution={BITS Pilani, Goa Campus}
}
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
Hackathon 2026 | Speech & Language Processing Track