A robust forced alignment tool for low-resource languages using multiple ASR models and CER-based matching. Built for noisy data and imperfect transcripts.
# Mana Forced Aligner: Robust Forced Alignment for Low-Resource Languages
**Want to create a speech dataset, but current forced alignment tools don’t work for your setup?**
**Mana Forced Aligner** is a robust, language-agnostic forced alignment module designed specifically for **low-resource languages** and imperfect audio-text matches. Unlike traditional tools like Aeneas, our method **does not require a perfect match between audio and text**. It tolerates skipped words, repetitions, or inconsistencies, using **multiple ASR models** and **character-level text similarity** with predefined thresholds.
## Why Use Mana Forced Aligner?
🧠 **ASR-Agnostic and Scalable**: Use *one or more automatic speech recognition (ASR) models*, regardless of their quality.
The aligner is designed to work even with imperfect ASRs. However, **the more ASR models you provide, the more robust and accurate the alignment becomes**, thanks to majority-voting and fallback mechanisms.
🧩 **Mismatch-Tolerant**: Handles skipped or added phrases, word reorderings, and slight transcription errors.
🧪 **Flexible Scoring**: Matches based on character error rate (CER), with configurable thresholds.
🔓 **Open and Extendable**: Built in Python, licensed under MIT, and ready to adapt to your language and ASR tools.
🌍 **Proven in Practice**: Successfully used to generate **102+ hours** of aligned speech-text data for the Persian ManaTTS corpus.
---
## How It Works
The alignment process consists of two key components:
### 1. Transcription Module
* Runs multiple ASR models on each audio chunk
* Discards unreliable transcripts (e.g., truncated outputs)
* Sorts by reliability and returns top transcripts
Figure: Architecture of the transcription module, showing multiple ASRs and reliability filtering.
### 2. Forced Alignment
* Splits audio into 2–12 second segments based on silence
* Uses the transcription module to hypothesize possible texts
* Finds best-matching substrings in the reference tex …