Views
No views yet
Companion variant:phonetic-whisper-mlx-narrow-entrains on TIMIT narrow English alone and emits TIMIT-narrow phonetic detail. Use thisbroad-multivariant for cross-lingual broad IPA; usenarrow-enfor English narrow IPA.
phonetic-whisper-mlx-broad-multi is a decoder-only fine-tune of
mlx-community/whisper-large-v3-mlx.
The encoder is frozen during training; only the decoder weights are
updated. The model takes 16 kHz audio and emits broad-phonemic IPA
strings (no diacritics, merged allophones).bcl, dcl, gcl, pcl, tcl, kcl) and
silences (pau, epi, h#) dropped, allophonic glottal stops
suppressed, and combining diacritics stripped (m̩→m, n̩→n, l̩→l,
ɨ→ɪ, ʉ→u, ɦ→h).narrow-en for English narrow); orthographic ASR (this model emits
IPA, not text); commercial deployment without complying with the
upstream LDC TIMIT non-commercial licensing terms.1from huggingface_hub import snapshot_download
2import mlx.core as mx
3from mlx_whisper.load_models import load_model
4from mlx_whisper.audio import load_audio, pad_or_trim, log_mel_spectrogram
5from mlx_whisper.decoding import DecodingOptions, decode
6from mlx.utils import tree_flatten, tree_unflatten
7
8# Download checkpoint weights from HF.
9ckpt = snapshot_download("barathanasln/phonetic-whisper-mlx-broad-multi")
10
11# Load Whisper-large-v3 architecture and overlay our decoder weights.
12model = load_model("mlx-community/whisper-large-v3-mlx")
13model.set_dtype(mx.float32)
14trained = mx.load(f"{ckpt}/model.safetensors")
15decoder_weights = {k: v for k, v in trained.items() if k.startswith("decoder.")}
16params = dict(tree_flatten(model.parameters()))
17for k, v in decoder_weights.items():
18 if k in params:
19 params[k] = v
20model.update(tree_unflatten(list(params.items())))
21
22# Inference. ALWAYS pass language="en" — see Training-time language token.
23audio = load_audio("your-audio.wav")
24mel = log_mel_spectrogram(pad_or_trim(audio), n_mels=128)
25mel = mx.expand_dims(mel, 0).astype(mx.float32)
26features = model.encoder(mel)
27result = decode(model, features, DecodingOptions(language="en", without_timestamps=True))
28print(result[0].text.strip())| Source | Samples | Convention |
|---|---|---|
TIMIT broad (English, derived from prepare_timit_dataset.py + simplify_timit_ipa.py) | 4,158 | Broad |
| CommonVoice broad — 7 languages (ja, pl, mt, hu, fi, el, ta), Epitran-based G2P | 6,538 | Broad |
| Total | 10,696 | Broad |
<|en|> as the start-of-transcript prefix regardless of source-audio language; the token is overloaded as "emit IPA". This is intentional — phonetic transcription is meant to be language-agnostic, so the decoder is trained without a per-language signal. Pass language="en" at inference.| Benchmark | n | PFER (%) | Convention notes |
|---|---|---|---|
| Combined broad held-out validation (in-distribution) | 924 | 3.19 | TIMIT+CV stratified 50/50 |
| TIMIT broad core test (in-distribution) | 1,680 | 4.70 | Broad-on-broad |
| MultIPA zero-shot (Taguchi 2023) | — | 20.78 | Same test set as Taguchi 2023 (21.2 reported) |
| Tusom2021 (Tibeto-Burman, zero-shot) | 447 | 23.05 | Same convention as Wav2Vec2Phoneme rescored by POWSM Table 4 (31.92) |
| L2-ARCTIC PRiSM-cut | 3,599 | 14.22 | Convention-mismatched (broad model on narrow refs) |
| VoxAngeles (95 langs) | 5,446 | 19.42 | Convention-mismatched; cross-lingual stress |
| DoReCo subset (8 langs) | 3,898 | 25.18 | Convention-mismatched; cross-lingual stress |
1@software{aslan2026phonetic_whisper_mlx,
2 author = {Aslan, Barathan},
3 title = {phonetic-whisper-mlx: Whisper-decoder fine-tunes for IPA transcription on Apple Silicon},
4 year = {2026},
5 url = {https://github.com/barathanaslan/phonetic-whisper-mlx},
6 version = {0.1.0},
7 license = {MIT (code), CC BY-NC 4.0 (weights)}
8}Garofolo, J. S., et al. TIMIT Acoustic-Phonetic Continuous Speech Corpus LDC93S1. Web download. Philadelphia: Linguistic Data Consortium, 1993.Ardila, R., Branson, M., Davis, K., et al. Common Voice: A Massively-Multilingual Speech Corpus. LREC 2020.
Taguchi, C. Universal Automatic Phonetic Transcription into the IPA. arXiv:2308.03917, 2023.Lu et al. POWSM: A Phonetic Open Whisper-Style Speech Foundation Model. arXiv:2510.24992, 2025.