Oswald-mini-V1

A small Haitian Creole (Kreyòl) speech-to-text model for phones and browsers: Cactus Compute's Whistle fine-tuned on Kreyòl (LoRA on attention plus new vocabulary rows, language code ht), shipped as a 29 MB 4-bit .cact for the cactus-needle engine (Python, Node, the browser in WebAssembly, phones). It is the small sibling of the Oswald recognizers: Oswald-ASR-0.6-V2 is a 0.6 B-parameter model (its Q8 build is 24× this download) and makes half the word errors.

This build hears Kreyòl only. The English, French and Spanish of the base model are gone (their WER went from 9–19 % to over 95 %).

Results

Scored on the 1,882 held-out clips of the Oswald V3 test selection (1,700 with human transcripts), the way the Oswald cards are scored: lowercase, no punctuation, digits spelled out, accents stripped. WER / CER in %.

Kind of recording clips Oswald-mini-V1 Oswald V3 (0.6 B, not published) Oswald-ASR-0.6-V2
All clips with human transcripts 1,700 13.8 / 5.3 7.2 / 2.5 7.6 / 2.7
Phone recordings (Datamio) 825 12.8 / 4.7 3.2 / 1.0 4.9 / 1.6
Bible, read 150 8.7 / 2.7 4.7 / 1.7 4.4 / 1.6
CMU sentences, read 150 9.0 / 2.8 6.4 / 2.0 7.2 / 2.4
Studio: numbers 85 10.0 / 3.1 4.2 / 1.2 4.8 / 1.6
Studio: health 116 12.2 / 4.5 6.3 / 2.2 5.7 / 2.2
Studio: finance 63 6.6 / 1.4 4.7 / 1.0 4.5 / 1.0
Studio: legal 46 6.5 / 1.8 3.4 / 1.0 3.6 / 1.0
Studio: social 93 12.0 / 4.9 5.8 / 1.7 6.9 / 2.2
Studio: history 52 23.3 / 7.4 20.5 / 6.1 16.5 / 5.1
Radio (machine transcripts: agreement, not accuracy) 150 18.4 / 6.9 11.0 / 3.8 12.0 / 4.1
YouTube 120 32.9 / 15.7 28.2 / 11.8 24.8 / 10.9

Numbers heard whole (327 spans): 84 % against 94 % for Oswald V3. The untuned base model scores 99.6 % WER on these clips: it has no Kreyòl.

Speed: the whole set at RTF 0.0059 on an Apple M3 Pro CPU, one clip at a time (about 170× real time); a 9 s clip in about 60 ms in Python.

Use

pip install cactus-needle soundfile huggingface_hub
hf download jsbeaudry/Oswald-mini-V1 Oswald-mini-V1.cact --local-dir .
import needle, soundfile

pcm, rate = soundfile.read("klip.wav", dtype="float32")        # mono, 16 kHz
ears = needle.Whistle(weights="Oswald-mini-V1.cact")
print(ears.transcribe(pcm, language="ht")["text"])

In the browser, with cactus-needle:

import { Whistle } from 'cactus-needle/browser';

const url = 'https://huggingface.co/jsbeaudry/Oswald-mini-V1/resolve/main/Oswald-mini-V1.cact';
const ears = new Whistle({ model: new Uint8Array(await (await fetch(url)).arrayBuffer()) });
const { text } = await ears.transcribe(pcm16k);               // Float32Array at 16 kHz

cactus-needle 0.3.0's browser worker only accepts answers in its seven base languages; this model answers ht. Add `ht` to the language list in dist/browser/worker.js (one line), or serve a patched copy through workerUrl.

The output is lowercase, without punctuation, with digits (125 goud). Clips up to 30 s.

How it was made

  • Base: Cactus-Compute/whistle; LoRA rank 64 (alpha 128) on attention, new vocabulary rows for Kreyòl, language ht.
  • Data: 133 h of Kreyòl, human speech only: paid phone recordings from Datamio contributors (25 h), radio (42 h), Bible readings (36 h), CMU sentences (10 h), studio sets (health, social, legal, numbers, history, finance, e-commerce; 13 h), YouTube (6 h). data_hours.json has the split. The test clips were held out.
  • Training: 5 epochs (4,495 steps), lr 1e-2 with warm-up and cosine decay, needle whistle finetune; then needle whistle build --lora adapter.safetensors made the 4-bit .cact. adapter.safetensors is included for anyone who wants to rebuild it.
  • Not tried: a mixed build that keeps English, French and Spanish reached the same Kreyòl WER (13.6 %) while keeping part of those languages; it is not published here.

License

Apache 2.0, as the base model.

Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for jsbeaudry/Oswald-mini-V1

Finetuned
(9)
this model