Downloads · 30 days
7
9% of all-time downloads
kristijonas/kmynas-parakeet-lt-v2
kmynas-parakeet-lt-v2 is a automatic speech recognition model from kristijonas. Use it when you need speech turned into text. It is set up for nemo. The card lists the license as cc-by-4.0.
Lithuanian speech recognition that emits punctuation and capitalisation directly, with no separate restoration pass. FastConformer encoder, Token-and-Duration Transducer decoder, 0.6B parameters.
Downloads · 30 days
7
9% of all-time downloads
All-time downloads
75
Public
Repo size
2.5 GB
Likes
1
Public
Click a slice to open those files.
.nemo2.5 GB · 100%
From the Hugging Face model README
Lithuanian speech recognition that emits punctuation and capitalisation directly, with no separate restoration pass. FastConformer encoder, Token-and-Duration Transducer decoder, 0.6B parameters.
Trained from nvidia/parakeet-tdt-0.6b-v3 (revision 541d1f9) on 1,196.4
hours of punctuated Lithuanian — seven times the data behind
v1 — and
initialised from the base model rather than continued from v1, so the two
remain independently comparable.
Held-out LIEPA-3, carved before training. WER with punctuation and case stripped, and as actually produced:
| set | WER | WER as produced | deletions | word retention |
|---|---|---|---|---|
| telephone speech | 6.83 | 14.36 | 0.53% | 1.003 |
| mixed validation | 15.13 | 26.20 | 2.01% | 0.987 |
| dialect (12 unseen speakers) | 26.84 | 36.59 | 3.60% | 0.977 |
These are not comparable to FLEURS or VoxPopuli figures published for v1, Noctra or Paprika — different test sets entirely. Quoting them side by side would be wrong.
Quality improved monotonically across every checkpoint and every set; the final step was the best on all three, so the loss curve had not flattened at 2.39 epochs.
| checkpoint | telephone | validation | dialect |
|---|---|---|---|
| step 2,000 | 17.37 | 28.48 | 40.66 |
| step 6,000 | 8.23 | 19.09 | 33.13 |
| step 15,000 | 6.83 | 15.13 | 26.84 |
file_hash is unique per row — so the
held-out unit is a whole parquet shard used as a proxy. Adjacent utterances
from one call may sit on both sides. Treat 6.83 as a shard-level estimate.| data | 1,196.4 h / 1,604,270 utterances, LIEPA-3, punctuated |
| sources | Phone 504.0 h, Radio 462.9 h, read 93.0 h, Dictaphone 90.7 h, other 45.7 h |
| initialisation | base parakeet + 3 spliced vocabulary tokens („ “ –) |
| effective batch | 256 (micro 16 × accumulation 16) |
| learning rate | 5.5e-4 AdamW, cosine → 1e-6, 1,500 warmup |
| schedule | 15,000 steps ≈ 2.39 epochs |
Punctuation was restored on the targets by an LLM behind a word-preservation
gate — any row whose word sequence changed was rejected, not repaired.
Capitalisation is preserved as produced, including 173,050 training rows
that begin lowercase. Those are genuine mid-sentence fragments: the lowercase
rate tracks each source's segmentation structure (17.9% in the segmented
phon config against 0.06% in whole-sentence read), and forcing capitals
would have taught the model to capitalise mid-sentence.
Every target was re-encoded with the extended tokenizer before training and
rows producing <unk> were quarantined, so the vocabulary gap that made v1
emit ⁇ cannot recur.
spykerių for speakers, kuopi peis for copy-paste, KR kodas for
QR kodas, and the same word spelled inconsistently within one recording.
A new version with additional training data is in the works.▁„, so „ encodes as two tokens and the
model occasionally drops the space, producing knyga„Užrašęs. Restore it in
post-processing; Lithuanian always spaces before an opening quote.” (U+201D), ;, (, ) or —. Em dashes were normalised to
– during training.import nemo.collections.asr as nemo_asr
model = nemo_asr.models.ASRModel.restore_from("kmynas-parakeet-lt-v2.nemo",
map_location="cpu")
model = model.cpu().eval()
print(model.transcribe(["chunk.wav"], batch_size=4)[0].text)
Audio must be 16 kHz mono. Runs several times faster than real time on CPU alone; on GPU, RTF is around 0.026.
Run in fp32 or bf16 — not fp16. In half precision the greedy TDT decode
occasionally emits a token id outside the 8,195-piece vocabulary (a blank or
duration slot leaking into the hypothesis), and detokenisation then raises
IndexError: OUT_OF_RANGE: piece id is out of range. Deterministic on the
affected audio; absent at fp32 and absent at the step-6000 checkpoint, so it
emerged late in training. bf16 keeps fp32's exponent range and avoids the
overflow path. If fp16 is unavoidable, filter ids >= vocab_size before
detokenising, or retry the failing chunk in fp32.
CC BY 4.0, inheriting LIEPA-3 (VU, VDU, LKI), published via CLARIN-LT: https://clarin-repo.lt/items/0a04648e-ba4e-4e6f-9161-a2d01e8e9fdb/full
Base model nvidia/parakeet-tdt-0.6b-v3, CC BY 4.0.
@misc{kmynas_lt_v2,
title = {Kmynas Parakeet LT v2},
author = {Kristijonas Jakubsonas},
year = {2026},
url = {https://huggingface.co/kristijonas/kmynas-parakeet-lt-v2}
}