Oswald-ASR-0.6-V1
Try it in your browser: The Trio Serie Space runs Oswald with the other two models of the series: the Oswald tab transcribes a recording or a file; the Klara tab sends what it hears to Makandal and reads the answer with Fatiman. More on the Oswald page of thetrio.space.
Formerly jsbeaudry/qwen3-asr-0.6b-kreyol-v2. The ears of Klara, a Kreyòl voice assistant that runs offline.
Haitian Creole speech recognition, fine-tuned from Qwen/Qwen3-ASR-0.6B-hf.
The base model does not support Haitian Creole. Its card lists 30 languages and 22 Chinese
dialects, and ht is not among them — untrained it transcribes Kreyòl as French, at WER 98.4 / CER
53.9 on CMU LTI clips. What it does bring is an audio encoder that hears the phonetics correctly, so
this fine-tune teaches the decoder Kreyòl and leaves that encoder alone.
Results
Held-out clips with human-made transcripts (875 clips across nine domains), beam 4, PyTorch weights:
| WER | CER | |
|---|---|---|
| Oswald-ASR-0.6-V1 | 9.8 | 3.6 |
| previous version (v1) | 11.3 | 4.1 |
Qwen/Qwen3-ASR-0.6B, untrained |
90.1 | 41.3 |
Per domain (WER), against the previous version; every domain improved:
| domain | previous | Oswald |
|---|---|---|
| studio, legal | 5.4 | 3.4 |
| read Bible | 5.6 | 4.0 |
| studio, finance | 5.4 | 4.1 |
| studio, health | 7.2 | 5.7 |
| studio, numbers | 7.8 | 6.4 |
| studio, social | 8.3 | 7.1 |
| CMU read speech | 7.6 | 7.1 |
| studio, history | 20.9 | 16.6 |
| YouTube | 26.1 | 24.6 |
| radio (machine transcripts, not gold) | 13.3 | 12.0 |
On a laptop (M3 Pro, llama.cpp, Q4_K_M from Oswald-ASR-0.6-V1-GGUF): a
median 0.21 s per clip, 90% under 0.24 s, on 120 sentences spoken by
Fatiman-TTS-v1, which it transcribed at WER 9.8 / CER 2.6.
Training
| Method | LoRA (decoder only, audio encoder frozen) |
| Audio | 146.08 h, 65382 clips |
| Target form | language Haitian Creole<asr_text>{transcript}, normalized text |
| Learning rate | 0.0001 |
The mix is every usable Kreyòl speech dataset on the account, selected and filtered by
scripts/whisper_ft/sources.py: a read Bible (capped so one narrator cannot dominate), Radio
Haïti-Inter broadcast speech, CMU LTI read speech, validated YouTube, and studio prompt sets. Four synthetic TTS corpora make up 18% of the mix and French sources are excluded:
trained on alone, the synthetic speech made the model worse; mixed in, it improved every domain. Clips whose
text appears in validation or test are dropped from training whichever repo they came from.
Scored only on gold transcripts. The radio transcripts are machine-made; measuring against them compares two models rather than measuring accuracy, so they are reported separately below.
Use
from transformers import AutoProcessor, Qwen3ASRForConditionalGeneration
processor = AutoProcessor.from_pretrained("jsbeaudry/Oswald-ASR-0.6-V1")
model = Qwen3ASRForConditionalGeneration.from_pretrained("jsbeaudry/Oswald-ASR-0.6-V1", device_map="auto")
# The assistant turn is prefilled with the language tag rather than passed to
# apply_transcription_request(language=...), which validates against the base model's 30 supported
# names and rejects "Haitian Creole" — the language this model adds.
conversation = [[
{"role": "user", "content": [{"type": "audio", "path": "clip.wav"}]},
{"role": "assistant", "content": [{"type": "text",
"text": "language Haitian Creole<asr_text>"}]},
]]
inputs = processor.apply_chat_template(
conversation, tokenize=True, return_dict=True, continue_final_message=True,
).to(model.device, model.dtype)
ids = model.generate(**inputs, max_new_tokens=256)
print(processor.decode(ids[:, inputs["input_ids"].shape[1]:],
return_format="transcription_only")[0])
Leaving the prefill empty lets the model report the language itself.
Requires transformers>=5.13 — earlier versions do not know the qwen3_asr architecture.
- Downloads last month
- 83