Weasel Fine-Tune IT
Italian speech-to-text fine-tune of Cactus Whistle
on the valentimarco/asr-merged-it
corpus: 233,295 clips / 408.8 hours of Italian speech. It ships as a single
29.35 MB .cact file and runs on the same CPU engine as Whistle and
Needle, with no GPU and no
Python runtime on the device.
- Base model: Cactus-Compute/whistle (Apache-2.0), 8 decoder layers, W4A8.
- Fine-tune: LoRA rank 64 / alpha 128, merged into the base.
- Language: Italian (
it). The base is multilingual; this checkpoint is tuned for Italian. - Input: 16 kHz mono WAV, any length (one pass up to 30 s, windowed beyond).
- Output: cased, punctuated Italian text.
Files
| File | What it is |
|---|---|
weasel-finetune-it.cact |
Ready to run. Deployable W4A8 model, 29.35 MB. |
weasel-finetune-it.safetensors |
Full fine-tuned weights (float32, 220 MB) for inspection and export. Use the .cact for inference. |
scores.md |
Base vs Weasel WER/CER comparison. |
scores.csv |
The same comparison as machine-readable rows. |
Quick start
pip install cactus-needle
import needle
model = needle.Whistle("weasel-finetune-it.cact")
print(model.transcribe("clip.wav", language="it")["text"])
# Da questo luogo i predestinati potevano entrare e uscire solo profondamente addormentati.
# or the module-level helper
print(needle.transcribe("clip.wav", weights="weasel-finetune-it.cact",
language="it")["text"])
word_timestamps=True adds per-word start/end/probability, and
keywords=[...] biases names, places and domain words during decoding, as in
the base Whistle model.
Training data
The fine-tune uses the valentimarco/asr-merged-it HF bucket, a merged Italian
ASR corpus:
| Source | Clips | Hours | License |
|---|---|---|---|
| VoxPopuli (it) | 25,010 | 86.9 | CC0 |
| FLEURS (it) | 4,286 | 14.1 | CC-BY-4.0 |
| Common Voice 27.0 (it) | 203,999 | 307.9 | CC0 |
| Total | 233,295 | 408.8 |
Audio is 16 kHz mono, normalized to -23 dBFS RMS with a -0.3 dBFS peak ceiling.
The training split is 199,237 clips (343.1 h); after dropping empty transcripts
and clips over 30 s, 198,623 clips were used. Common Voice contributes only
the official train / dev / test modelling splits; the three splits are
disjoint by sentence and speaker.
Training
Fine-tuned from Whistle 2.0.0 with a rank-64 LoRA adapter (alpha 128) on the
198,623 Italian training clips, then merged into the base and exported to W4A8
with needle whistle build.
Evaluation
Identical held-out subsets of the merged test split, scored with the Whisper
BasicTextNormalizer (accents kept), corpus-level WER/CER. These are
2,000 Common Voice clips and 1,967 VoxPopuli + FLEURS clips, not the
full 17,225-clip test split. Full numbers: scores.md.
| Test set | Base WER | Weasel WER | Base CER | Weasel CER |
|---|---|---|---|---|
| Common Voice 27.0 (it) | 18.89% | 15.10% | 5.50% | 4.57% |
| VoxPopuli + FLEURS | 19.83% | 17.16% | 12.55% | 10.59% |
| Combined | 19.58% | 16.61% | 10.68% | 8.99% |
By clip duration
| Test set | Duration | Base WER | Weasel WER |
|---|---|---|---|
| Common Voice | 0β5 s | 23.06% | 18.75% |
| Common Voice | 5β10 s | 18.28% | 14.57% |
| Common Voice | 10β20 s | 15.51% | 11.91% |
| VoxPopuli + FLEURS | 0β5 s | 42.76% | 42.54% |
| VoxPopuli + FLEURS | 5β10 s | 24.25% | 21.47% |
| VoxPopuli + FLEURS | 10β20 s | 18.80% | 16.30% |
| VoxPopuli + FLEURS | 20β30 s | 17.27% | 14.05% |
The VoxPopuli/FLEURS 0β5 s bin is dominated by 1β4 s parliamentary fragments; the base itself is at 42.76% there, so it is a data limit, not a fine-tune result. On Common Voice, the 0β5 s bin improves from 23.06% to 18.75%.
Limitations
- Italian only. The base is multilingual; this checkpoint was fine-tuned on Italian and should not be used as a drop-in for the other six languages.
- Short utterances are harder. Common Voice 0β5 s is 18.75% WER; the VoxPopuli/FLEURS 0β5 s bin is ~42% even for the base model.
- Proper nouns, rare words and accents (
evsè) account for most of the remaining errors. Keyword biasing helps with names known in advance. - Trained on clips up to 30 s. Longer audio is handled by the engine's windowing, but that path was not part of this fine-tune's evaluation.
- Evaluation is on held-out subsets, not the full 17,225-clip test split.
- No speaker diarization, forced alignment, or punctuation restoration beyond what the model learned from the transcripts.
License and dataset attribution
The base Whistle model is Apache-2.0; this fine-tune is released under the same license. The training data licenses are:
- VoxPopuli β CC0.
- Common Voice 27.0 Italian β CC0 (Mozilla).
- FLEURS Italian β CC-BY-4.0 (Google). Keep the FLEURS attribution and follow its terms when redistributing or deploying this model.
Dataset citations
VoxPopuli
Wang, C., Rivière, M., Lee, A., Wu, A., Talnikar, C., Haziza, D., Williamson, M., Pino, J., & Dupoux, E. (2021). VoxPopuli: A Large-Scale Multilingual Speech Corpus for Representation Learning, Semi-Supervised Learning and Interpretation. ACL-IJCNLP 2021. https://aclanthology.org/2021.acl-long.80/
FLEURS
Conneau, A., Ma, M., Khanuja, S., Zhang, Y., Axelrod, V., Dalmia, S., Riesa, J., Rivera, C., & Bapna, A. (2022). FLEURS: Few-shot Learning Evaluation of Universal Representations of Speech. IEEE SLT 2022. https://arxiv.org/abs/2205.12446
Common Voice 27.0 Italian
Mozilla Common Voice. Common Voice Scripted Speech 27.0 β Italian. CC0. https://commonvoice.mozilla.org/it/datasets
Base model
@misc{whistle_2026,
title = {Whistle: Speech Recognition for Tiny Devices},
author = {Mroz, Jakub and Ndubuaku, Henry and Mosoyan, Karen and Cylich, Noah and
Kumar, Satyajit and Sandhu, Parkirat and Shemet, Roman and Lee, Justin H.},
year = {2026},
organization = {Cactus Compute, Inc.},
howpublished = {\url{https://github.com/cactus-compute/needle}}
}
Model tree for valentimarco/weasel-finetune-it
Base model
Cactus-Compute/whistle