Glossary

Forced alignment

Forced alignment is the process of taking audio together with a transcript of what was said, and determining the exact start and end time of each word and each phoneme within that audio. Unlike speech recognition, which has to work out what was said, forced alignment already knows the words — it is "forced" to fit that specific transcript, and its only job is to decide where each piece of it lands in time.

How forced alignment works

The aligner converts the known transcript into a sequence of expected phonemes using a pronunciation dictionary, then searches for the time boundaries that make that exact sequence the best possible explanation of the audio.

Because the word sequence is fixed, the search space is dramatically smaller than in open-ended recognition. The aligner is not choosing between millions of possible sentences — it is choosing between the possible ways of stretching and compressing one known sentence across the available milliseconds.

Classically this was done with Hidden Markov Models and the Viterbi algorithm. Modern systems more often align using the frame-level outputs of a neural acoustic model, but the principle is the same: fit the known sequence to the timeline.

Why pronunciation scoring depends on it

You cannot score a phoneme until you know which milliseconds of audio to score. Forced alignment is what makes per-phoneme scoring possible at all — it produces the spans that Goodness of Pronunciation is then computed over.

It is also what lets an API return timing information alongside each score, so an application can highlight the exact moment in a recording where a sound went wrong, or play back just that fragment.

This dependency is also a vulnerability. If the alignment puts the boundary in the wrong place, the score computed over that span is measuring the wrong audio, and the error is invisible in the output — the score still looks like a score.

Why alignment is harder on child speech

Children speak with more variable timing than adults: longer and more irregular pauses, unsteady rate within a single word, and false starts. All of that makes boundary placement less certain.

Disordered speech compounds the problem. When a sound is omitted entirely there is no audio for the aligner to assign to it, and the surrounding phonemes tend to absorb the span — which is one reason omissions can be both detectable and hard to localise precisely.

In our own benchmark run, 100% of words aligned one-to-one against the reference, but 7.6% of words had a differing phoneme count and 0.8% of reference phones had no counterpart at all. Alignment is very good and it is not perfect, and a scoring product should be built on the assumption that a small fraction of spans are wrong.

Forced alignment — questions

What is forced alignment in speech processing?
Forced alignment is the process of determining the precise start and end time of each word and phoneme in an audio recording, given a transcript of what was said. It already knows the words; it only has to place them in time.
How is forced alignment different from speech recognition?
Speech recognition has to determine what was said from the audio alone. Forced alignment is given the transcript in advance and only has to determine when each part of it occurred. That makes alignment far more constrained and far more accurate than recognition on the same audio — which is exactly why pronunciation scoring uses a known target word rather than trying to recognise free speech.
Does forced alignment work on children's speech?
Yes, but less reliably than on adult speech. Children have more variable speaking rates, more irregular pausing, and — in the case of speech sound disorders — sounds that are missing or substituted, all of which make boundary placement harder. In our own benchmark every word aligned one-to-one, but around 8% of words had a differing phoneme count against the reference.
Do I need to run forced alignment myself to use a pronunciation scoring API?
No. Alignment happens inside the API. You send audio and the target text, and the service handles conversion to phonemes, alignment, and scoring, returning per-phoneme results with their time spans already attached.