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
Safetensors
Model size
0.8B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for jsbeaudry/Oswald-ASR-0.6-V1

Finetuned
(11)
this model
Quantizations
1 model

Spaces using jsbeaudry/Oswald-ASR-0.6-V1 2