934 TextGrids came back. How many were clean?
509.5 hours were exported for alignment; 934 of a 1,000-row held-out test came back with a TextGrid; and as of the last recorded review pass, zero of those rows had been promoted to clean training data.
mfa_clean_seed in the same run// the current ampixa.com homepage lists "about 509 hours of MFA-prepared source data exported so far" and links only to this GitHub repo — it does not yet show the 934/1,000 figure or the zero-clean-seed result below (checked 2026-11-06).
Say you want to build a speech recognizer for Nepali. You need audio paired with text, and not just paired — lined up. The model has to know exactly which stretch of sound is the word "नमस्ते," not just that the word appears somewhere in the clip. That line-up is called forced alignment, and the tool that does it is the Montreal Forced Aligner, MFA. It eats audio and a rough transcript and gives back a TextGrid: a file that says which seconds belong to which word and which phoneme.
That sounds solved. It mostly is, for English. For Nepali, you first have to find audio with transcripts at all, and almost none of what exists was recorded for this purpose. We pulled together five pools: a clean read-speech set from OpenSLR, a podcast, YouTube captions, and two slices where a Google ASR pass stood in for the transcript and got kept or sent to review depending on how trustworthy it looked. Add it up and you get about 509.5 hours — the number on the website right now: "about 509 hours of MFA-prepared source data exported so far."
A TextGrid can carry several tiers over the same stretch of audio, each with its own boundaries that don't have to line up. These two tiers describe the exact same 1,000 held-out rows — one tier is whether the aligner finished, the other is whether a human or a rule actually trusts the result. The record does not say how the 66 rows that never produced a TextGrid map onto the three review tiers below; they are two different partitions of the same 1,000, not a funnel.
// scroll to see the full axis →The "aligned" boundary sits at 934. The "reviewed" boundary sits at 752. They are one and the same axis — the same 1,000 rows — and they do not meet. The crimson block is a single bulk decision (248 rows sampled, found to contain background audio, labeled in one pass on 2026-05-27), not 248 individual judgments. The outlined bar is 752 rows still waiting on an actual person. The small crimson tile at the right edge is the entire mfa_clean_seed tier for this run — it is the only clickable thing on this page, and clicking it does nothing, because there is nothing there.
It's a real number, and it undersells the problem, because "exported" doesn't mean usable. We trained an aligner on a 5,000-row mix of all five pools, then tested it on a held-out 1,000 rows it hadn't seen. 934 of those 1,000 came back with a TextGrid. That's the second number people reach for: 934 out of 1,000, over 93%.
Except a TextGrid isn't a grade. It just means the aligner finished without giving up. So we ran a failure audit on this same held-out set to see which rows were actually trustworthy, and the answer surprised us: zero. Not low — zero. 752 of the 1,000 held-out rows passed the aligner's own risk checks, which only means the aligner didn't flag them, not that a person looked at them. The other 248 got sampled, found to have music or background noise under the speech, and — because checking each one by hand would take too long — all 248 got bulk-labeled "background audio" in one pass: correct speech routed to a noisy bucket, not the clean one. The actual tiers that week: 248 noisy, 752 still waiting on a human, 0 clean. That's the real yield of 509.5 hours and 934 TextGrids on that held-out set: nothing yet clean enough to train on.
एक हजार नौ सय पन्चानब्बे
उन्नाइस सय पन्चानब्बे
The transcript form on top and the audio's own year-style speech on the bottom are the one documented repair case in the project's run record — the same year, said two different ways. A forced aligner matches audio to the exact transcript it is given, not to what the transcript means, so a mismatch like this is enough on its own to keep a row out of the clean tier.
The podcast pool, a separate 37 hours, got further than the others, but not as far as "reviewed." Of its roughly ten thousand rows, 440 were actually listened to and labeled by a person. The rest were waved through by rule — duration and text checks only, on the reasoning that the source as a whole was already trusted. The output, about 36.8 of the 37.1 hours, is now counted as usable training data for the speech recognizer itself — not the same thing as a clean seed for the aligner. Four hundred and forty real listens plus a trust assumption on the rest is a real result, and a smaller one than "the podcast got reviewed."
We also went looking for the dashboard that turned the podcast listening into decisions — a public site where a reviewer could click keep, minor, background, bad. As of this week it's not reachable: the domain now points somewhere else, and the page returns a 404.
10,214 rows, 37.1 hours — its own axis entirely, pulled from the 5,000-row training slice, not the 1,000-row held-out set above. A public dashboard sampled 1,000 of its chunks and reached 200 labeled before the domain died.
The dashboard that fed the 440 human labels, tts.ampixa.com/mfa/review/, redirects to a different domain and 404s there — checked 2026-11-06. It sampled a 1,000-chunk slice of this same podcast pool and reached 200 of 1,000 labeled before going dark; no TSV from it has been applied to any tier manifest.
Then there's the question nobody asks first but should: who owns this audio? Only one of the five pools has a license we can point to — the OpenSLR read-speech set, under CC BY-SA, about 154 of the 509.5 hours. The podcast, the YouTube captions, and the two ASR-filtered pools — nearly 355 hours, about 70% of what we exported — have no documented redistribution rights, and for the two ASR-filtered pools we don't even have a record of what the underlying audio is. "Exported" is a technical fact. It is not permission. We have no business calling most of this released or ready for a public bundle, because we haven't asked the people who made it, and in two of the five pools we don't know who to ask.
Bar width is hours per pool. All five pools contribute exactly 200 of the 1,000 held-out rows, and each has its own documented coverage figure.
"Chirp2" names a Google ASR pass used to generate or filter transcripts, not a rights source — the reviewed records don't say where its underlying audio comes from, for either chirp2 pool.
What's next isn't training a bigger model. It's finishing the review that's already half-started: get a dashboard back up, push the 752 still-waiting held-out rows through to an actual human decision instead of a bulk guess, build a real clean MFA seed out of the SLR54 hours and whatever the podcast review genuinely cleared, then retrain and re-check against the 934-of-1,000 we already have — asking what fraction is real, not just what fraction returned a file. And before any of this audio goes near a public release, someone needs to call the people who made the podcast and the YouTube channels and ask.
- SLR54 has a second, separate training-slice export on its own 5,000-row smoke model: 4,996/5,000 TextGrids (99.9%) — the easy case, read speech only. The main mixed-5000 model used for the held-out test above is a different model, 4,922/5,000 on its own training rows.
- The mixed 5,000-row model behind the 934/1,000 result is explicitly "not final" — trained on a mix that includes noisy domains.
chirp2_gt1_reviewedis named directly as "the main weak spot" / "weakest reviewed source."- The repo's own doc lists what not to claim yet: the model is not production final;
machine_pass_candidatesare not human-clean; the podcast source is not "reviewed" until a TSV export is applied; background-audio detection is not automatic or solved; don't train a clean MFA v2 from YouTube/Chirp2 data without review. - Documented next steps, not completed as of 2026-05-31: export the source-review TSV, apply labels, build a clean seed from reviewed podcast plus SLR54, train MFA v2, and re-align the held-out 1,000 to try to beat 934/1,000 with no source below 90%.
A flat stencil — a waveform over two tier bars whose boundaries don't meet, the same shape the panel above draws with real numbers — tiled with this project's own vocabulary. No live audio exists for this page to sample; GitHub stores no audio, TextGrids or models by design.
