Instructions to use moonshine-ai/moonshine-streaming-tiny-tl with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use moonshine-ai/moonshine-streaming-tiny-tl with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("automatic-speech-recognition", model="moonshine-ai/moonshine-streaming-tiny-tl")# Load model directly from transformers import AutoProcessor, AutoModelForSpeechSeq2Seq processor = AutoProcessor.from_pretrained("moonshine-ai/moonshine-streaming-tiny-tl") model = AutoModelForSpeechSeq2Seq.from_pretrained("moonshine-ai/moonshine-streaming-tiny-tl", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Moonshine Streaming Tiny โ Tagalog
Tagalog streaming speech recognition, 27.0M parameters. Same architecture as moonshine-ai/moonshine-streaming-tiny, trained for Tagalog with a 12,288-entry Tagalog tokenizer.
Moonshine Streaming pairs a 50 Hz time-domain audio frontend with a sliding-window Transformer encoder, so it transcribes incrementally rather than waiting for an utterance to finish. It is intended for on-device use on edge-class hardware.
Checkpoint identity
This repository is a conversion of one specific training checkpoint, recorded here because the weights behind a language move as later stages win:
| Checkpoint | tl12k_tiny_stageA_best.safetensors |
| Stage | A (alignment) -- still training, see below |
| Architecture | slinkier_prime_adapted |
| Tokenizer | tokenizer_tl12k.json, vocab 12,288 |
| Snapshot taken | 2026-08-24 |
| Parameters | 27.0M |
If you need reproducibility, pin the revision of this repository rather than
tracking main.
This is a snapshot of a run that had not finished. The Tagalog Stage A run was still training when these weights were taken: its best score was 16.600 and it had been flat around 17.16 for 31 consecutive readings near the end of its epochs, so this checkpoint is the best available rather than a converged one. It was published deliberately, and a later refresh is expected.
Usage
pip install --upgrade transformers datasets[audio]
from transformers import MoonshineStreamingForConditionalGeneration, AutoProcessor
import torch
model = MoonshineStreamingForConditionalGeneration.from_pretrained(
"moonshine-ai/moonshine-streaming-tiny-tl"
).eval()
processor = AutoProcessor.from_pretrained("moonshine-ai/moonshine-streaming-tiny-tl")
inputs = processor(audio, return_tensors="pt", sampling_rate=16000)
# Cap the output length. Like other seq2seq ASR models this one can fall into a
# repetition loop, and short or noisy clips are where it happens.
seq_lens = inputs.attention_mask.sum(dim=-1)
max_new_tokens = int((seq_lens * 6.5 / 16000).max().item()) + 2
generated = model.generate(**inputs, max_new_tokens=max_new_tokens)
print(processor.batch_decode(generated, skip_special_tokens=True)[0])
Pass the attention_mask. The encoder applies its per-layer sliding windows
only when it is given one; called without a mask it attends over the whole
utterance instead, which is a different model from the one that was trained. The
processor returns the mask, so the snippet above is the safe form. The processor
also pads audio to a whole number of 80-sample frames, which the frontend
requires.
Architecture
| Encoder | 6 layers, width 320, 8 heads, sliding windows (16, 4) on the first two and last two layers and (16, 0) between |
| Decoder | 6 layers, width 320, 8 heads, RoPE over 32 of each head's 40 dimensions |
| Frontend | 50 Hz features, CMVN, asinh compression, two causal stride-2 convolutions |
| Adapter | learned absolute positional embeddings before the decoder |
The lookahead layers give roughly 80 ms of lookahead; the intermediate layers have none.
Training data
Trained on a large-scale automatically labeled Tagalog corpus:
- YouTube crawl, roughly 163,300 hours, pseudo-labeled.
- Podcast crawl, roughly 3,300 hours, pseudo-labeled.
The crawled transcripts are pseudo-labels: they were produced by running a Whisper-family teacher model over crawled audio, not by human transcription. The model therefore inherits the teacher's error modes, including its handling of proper nouns, numerals and code-switching. No human-verified transcript was used for the bulk of training.
Evaluation
Tagalog is scored on word error rate (WER), after the usual case and punctuation normalization. Mandarin and Japanese in this model family are instead scored on no-space CER, because they are written without spaces; every other language, this one included, uses WER.
suite_tl is FLEURS Tagalog, and it is the only Tagalog panel we hold. The
headline number is therefore one read-speech set rather than a macro over two,
and it does not measure spontaneous speech or Taglish code-switching, both of
which are heavily represented in the training data.
Seeded 400-utterance sample, batch 1
Batch 1 is the honest number for deployment. Batched evaluation zero-pads short clips up to the longest in the batch, and that trailing silence flatters the model.
| Panel | WER |
|---|---|
fleurs_tl |
15.05 |
This repository against the training checkpoint
These weights were converted from the neo training checkpoint, and the
conversion was checked by measurement rather than inspection: same seeded
sample, same batch size, same normalizer. A conversion that loads and emits
plausible text can still have a permuted weight mapping, which only a score
catches.
fleurs_tl |
macro | |
|---|---|---|
| Training checkpoint | 15.05 | 15.046 |
| This repository | 14.91 | 14.905 |
399/400 transcripts are byte-identical.
The quantized build we ship
The .ort package served to the Moonshine deployment library is quantized to
int8 from these same weights, and scores 14.867 against 15.046 for the float
checkpoint on the same sample under the same stopping rule -- a difference of
-0.179, which is inside the noise of a 400-clip sample and should not be read
as the quantized build being better or worse. That build is a different
artifact from this repository, which is float32.
Limitations
- Machine-labeled training data. See above; the model reproduces its teacher's mistakes as well as its strengths.
- Repetition loops on short clips. Like other seq2seq ASR models this one can fall into a repetition loop, and short or noisy clips are where it happens. Cap the output length, as the usage snippet does.
- Evaluated on 1 panel only. No evaluation of telephony, children's speech, heavy dialect, or noisy far-field conditions.
- Snapshot of an unfinished run, scored on one panel. Both of these make the headline number less trustworthy than the same number would be for the other languages here.
Out-of-scope use
Not intended for non-consensual surveillance, speaker identification, or high-stakes decisions.
License
MIT.
- Downloads last month
- 4