Ukrainian stress combiner (combiner-v1)
0
2 commits
1 linked in READMEs
updated Sep 25, 2026
combiner-v1)A small learned scorer over the pipeline's tiers. For each candidate reading of an ambiguous word, it sees:
It overrules the tier order only when it prefers another reading by a margin.
32 features per candidate. wiki-stress/ml/src/ukstress_ml/combiner.py defines them; model.pt carries the list, and the list is part of the model:
| group | features |
|---|---|
| lexicon | rank, capitalisation |
| morphology tier | its pick; the tagger's agreement with the reading's case, number, gender and part of speech |
| cross-encoder | probability of the candidate |
| token classifier | probability of the candidate, the form's training count, how one-sided its training rows were |
| narrator prior | share of audiobook narrators who said this reading, and how many said anything |
| readings | whether the readings are told apart by sense, by grammar, or as proper nouns |
| tier order | its answer, crossed with the tier that gave it |
from ukstress_ml.combiner import Combiner, Assets
combiner = Combiner("uk-stress-combiner/model.pt")
assets = Assets.load("uk-stress-combiner") # readings.jsonl, audio_prior.json, classifier_profile.json
In the API it is off by default. A request enables it with "combiner": true.
model.pt.Held-out test splits, the tier order against the combiner:
| test | tier order | combiner |
|---|---|---|
| Common Voice test (3,001 tokens) | 92.74% | 94.77% |
| its top-200 forms (2,058) | 96.06% | 97.57% |
| lang-uk test half (748) | 83.96% | 83.96% |
Ukrainian stress combiner (combiner-v1)
0
2 commits
1 linked in READMEs
updated Sep 25, 2026
combiner-v1)A small learned scorer over the pipeline's tiers. For each candidate reading of an ambiguous word, it sees:
It overrules the tier order only when it prefers another reading by a margin.
32 features per candidate. wiki-stress/ml/src/ukstress_ml/combiner.py defines them; model.pt carries the list, and the list is part of the model:
| group | features |
|---|---|
| lexicon | rank, capitalisation |
| morphology tier | its pick; the tagger's agreement with the reading's case, number, gender and part of speech |
| cross-encoder | probability of the candidate |
| token classifier | probability of the candidate, the form's training count, how one-sided its training rows were |
| narrator prior | share of audiobook narrators who said this reading, and how many said anything |
| readings | whether the readings are told apart by sense, by grammar, or as proper nouns |
| tier order | its answer, crossed with the tier that gave it |
from ukstress_ml.combiner import Combiner, Assets
combiner = Combiner("uk-stress-combiner/model.pt")
assets = Assets.load("uk-stress-combiner") # readings.jsonl, audio_prior.json, classifier_profile.json
In the API it is off by default. A request enables it with "combiner": true.
model.pt.Held-out test splits, the tier order against the combiner:
| test | tier order | combiner |
|---|---|---|
| Common Voice test (3,001 tokens) | 92.74% | 94.77% |
| its top-200 forms (2,058) | 96.06% | 97.57% |
| lang-uk test half (748) | 83.96% | 83.96% |