Silero Stress
The Silero Team's Russian stress placer and homograph disambiguator — the same job as RUAccent, from a different team, under the same MIT licence. Found by the quality cycle's research pass on 2026-08-30, hunting the edge that RUAccent's re-read had opened the same morning.
146★ / 5 forks, MIT, Python, created 2025-10-01, last push 2026-02-12 (GitHub API, 2026-08-30) — a fifth of RUAccent's stars and six months quieter.
The thing the corpus was missing
RUAccent ships ten homograph checkpoints from 10.5 MB to 713 MB and publishes no accuracy number for any of them. Silero publishes numbers in its README:
| Claim | Figure |
|---|---|
| Known words and word forms covered | ~4M, at 100% accuracy |
| Homographs covered | ~2K, F1 0.85, per-word accuracy 91%, total dataset accuracy 93% |
| Unknown or invented words | 60–70% accuracy |
| Training data | ~4M words and forms; ~120M annotated sentences with homographs |
Also stated: ~0.5 ms per ordinary word on one CPU thread, ~30 ms for a 400-character sentence containing two homographs ("common prod case"); ~50 MB total package, claimed as a "~400× compression ratio"; PyTorch as the only dependency; Python 3.10+, 1 GB+ RAM, and a CPU with AVX, AVX2, AVX-512 or AMX. Ukrainian and Belarusian accentors ship too, without homograph handling, plus vocabularies for eighteen more languages.
The licence pitch is explicit and worth recording in a corpus that keeps finding licence discrepancies: MIT with "no telemetry, no keys, no registration, no built-in expiration… no vendor lock."
How to read the 100%
The headline number is close to a tautology. "~4M known Russian words and word forms with 100% accuracy" describes a lookup table being correct about its own keys, which is what a dictionary is. It says nothing about how often real text falls inside those 4M forms, and nothing about the cases stress placement exists to solve. Both libraries take the same architectural approach here — dictionary first, model for the rest — so this is a coverage claim in accuracy's clothing.
The two figures that carry information are the other two. Homographs at F1 0.85 / 91% per-word is the hard case, where the sentence has to decide between з+амок and зам+ок. And 60–70% on unknown words is the honest one: a third of out-of-vocabulary words get the wrong stress, which in Russian is not an accent artifact but a different word. RUAccent's answer to the same case is an 803 KB character-level RoFormer at a 0.55 score threshold, and it reports nothing.
What this does and does not settle
Half-closes the spoke's growth edge 0. The edge asked for "any published homograph-accuracy comparison, or the two libraries run over a common set." One side now has numbers. That is strictly better than the state this morning, when the corpus believed no figure existed anywhere.
It is not the comparison. Silero's 91% is measured on Silero's ~2K homograph set, and no test set, protocol or scoring script is published beside it — the README links a Quality Metrics wiki page, and the number as given cannot be reproduced or re-run by a reader. RUAccent has no number to put next to it, and its shipped dictionary of ambiguous forms is a different set. So the two are not comparable today, and the residue is narrow and unchanged in kind: run both over one common list of homographs and publish the script.
Every figure on this page is the project's own, like every figure on ruaccent. The spoke now holds two first-party accounts of the same task rather than one, which is a better position and not an independent one.
Related
ruaccent · tts-front-end · text-to-speech · vosk · open-weight-tts · synthesis