lt-stress-detector v1 (2026-10-26)

Lithuanian lexical stress and pitch accent (priegaidė) detector from speech. A Wav2Vec2BertForAudioFrameClassification model labels every 20 ms frame as one of 4 classes:

id label meaning
0 unstressed unstressed
1 short stressed short vowel
2 acute stressed, acute (tvirtapradė, falling)
3 circumflex stressed, circumflex (tvirtagalė, rising)

Purpose: to check auto-accented TTS training transcripts against the recordings. For every word, the pipeline scores all possible stress variants of the word against the frame posteriors. If the variant that best matches the audio differs from the mark in the text, the word goes to human listening. The same model can also annotate stress in recordings that have no accented text.

The frame classifier alone does not produce word-level verdicts. That needs the companion code, ltstress (Apache-2.0), which does three things:

  • aligns text to audio with CTC forced alignment (sammy786/wav2vec2-xlsr-lithuanian);
  • finds syllable nuclei;
  • runs forced-choice scoring over the candidate variants.

The decision thresholds that go with this model are in thresholds.json.

pip install git+https://github.com/rzajanckauskas/lt-stress-detector
ltstress check --input manifest.jsonl --output result.jsonl   # downloads this model and its thresholds

Training

  • Initialised from: classla/Wav2Vec2BertPrimaryStressAudioFrameClassifier (w2v-BERT 2.0, Croatian/Serbian/Slovenian primary stress; Rupnik, Ljubešić, Porupski, arXiv:2505.24571).
  • Data: LIEPA-TTS (VDU, CC BY 4.0), with stress and pitch-accent labels from linguists. These labels are at text level, so they are the same for all 4 speakers.
    • Split: train 12 658, dev 845. One speaker (Aistė, 487 utterances) was held out completely for testing.
    • Words where the _a/_b label variants disagree are masked.
    • Short function words (juk, nė, su, ant, nes…) are masked as well: their stress is barely audible, so their labels are unreliable.
  • Fine-tuning: full fine-tune (all ~580 M parameters).
    • 6 epochs, lr 2e-5, batch 32, bf16, warmup 0.1.
    • Hardware: 1× H100 80 GB (Modal). Training took 7.4 min.

Evaluation (held-out speaker, injected errors)

Errors were injected into correct transcripts. The percentages show how many of those errors the detector catches:

metric value (95 % CI)
stress position errors caught 99.5 % [99.1–99.8]
pitch accent errors caught 96.3 % [95.2–97.2]
correct words flagged (false alarms) 6.2 % (~330 per hour of audio)
exact accented form without text (annotation mode) 93.8 %

Function words were not scored.

On real data:

  • SING DOL: the detector found all 10 real transcript errors among 14 words that were checked by listening, with 0 false alarms.
  • SING MAR training transcripts: 54 635 words were checked. Of the 100 most frequent stress-position mismatches, human listening confirmed 83 as text-accenter errors.

Limitations

  • Real speech vs synthetic. Trained and evaluated on natural read speech. On synthetic TTS speech, pitch-accent decisions are less reliable: acute is often heard as circumflex.
  • Function words. Short function words are not judged.
  • Pitch accent. Pitch-accent verdicts should be confirmed against a dictionary or by a linguist. Stress position is the more robust output.
  • Speakers. Only 4 LIEPA speakers were seen in training.

Santrauka (LT)

Lietuvių kalbos kirčio vietos ir priegaidės detektorius iš garso. Kas 20 ms modelis nustato vieną iš keturių klasių: nekirčiuota, trumpasis, tvirtapradė arba tvirtagalė. Tada kiekvienam žodžiui iš visų kirčiavimo variantų išrenkamas tas, kuris geriausiai atitinka garsą. Jei jis nesutampa su teksto kirčiuoklio žyma, žodis pateikiamas perklausai.

Modelis mokytas iš classla kirčio modelio su LIEPA-TTS duomenimis. Su negirdėta diktore jis pagauna 99,5 % kirčio vietos ir 96,3 % priegaidės klaidų, o teisingų žodžių be reikalo pažymi 6,2 %.

License

CC BY-SA 4.0, the same as the base model. The model is trained on LIEPA-TTS (CC BY 4.0, Vytautas Magnus University).

Downloads last month
21
Safetensors
Model size
0.6B params
Tensor type
F32
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for renaldux/lt-stress-detector

Paper for renaldux/lt-stress-detector