alexwengg's picture
Refresh accuracy/speed numbers (ANE default, v3-family long-form path)
8c5ef97 verified
|
Raw History Blame Contribute Delete
4.97 kB
---
license: cc-by-4.0
base_model: moondream/parakeet-redux
language: [en, de, fr, es, it, pt, ru, uk, hr, sl, lv, lt, et, fi, sv, da, nl, pl, cs, sk, hu, ro, bg, el, mt]
pipeline_tag: automatic-speech-recognition
tags: [coreml, parakeet, tdt, ternary, speech-recognition, apple-silicon]
library_name: fluidaudio
---
# parakeet-redux-coreml
Core ML build of [moondream/parakeet-redux](https://huggingface.co/moondream/parakeet-redux), the ternary
(every encoder weight ∈ {-1, 0, +1}) re-training of `nvidia/parakeet-tdt-0.6b-v3`. Same 25 languages, tokenizer and
output conventions as v3. Encoder is **183 MB** (vs 445 MB for the 6-bit v3 encoder); whole model dir ~220 MB.
The encoder keeps the checkpoint's exact ternary weights: 2-bit palettized codes with the model's own per-row,
per-128 fp16 scales (iOS 18 / macOS 15 `constexpr_lut_to_dense` + `constexpr_blockwise_shift_scale`), so no
re-quantization noise is added. Decoder and JointDecision are re-exported from the redux checkpoint (its post-training
recovery also touched the joint). Preprocessor and vocabulary are the v3 ones.
## Usage (FluidAudio β‰₯ next release)
```swift
let models = try await AsrModels.downloadAndLoad(version: .redux) // iOS 18+ / macOS 15+
let asr = AsrManager()
try await asr.initialize(models: models)
let result = try await asr.transcribe(audioFileURL)
```
```bash
swift run fluidaudiocli transcribe audio.wav --model-version redux
swift run fluidaudiocli asr-benchmark --subset test-clean --max-files 100 --model-version redux
```
## Files
| File | Notes |
|------|-------|
| `Encoder.mlmodelc` | 183 MB, 2-bit ternary, iOS 18+/macOS 15+, fixed 15 s window (`mel [1,128,1501]` β†’ `encoder [1,1024,188]`) |
| `Decoder.mlmodelc` | RNNT prediction net, fp16, iOS 17+ |
| `JointDecisionv3.mlmodelc` | single-step joint + argmax/softmax + top-64, fp16, iOS 17+ |
| `Preprocessor.mlmodelc` | mel front-end, identical to parakeet-tdt-0.6b-v3-coreml |
| `parakeet_vocab.json` | identical to v3 |
## Compute units
The encoder runs on the **Neural Engine** by default in FluidAudio, like v3, so iOS apps can keep transcribing in the
background (iOS does not allow GPU work there). The first ANE load compiles the 2-bit weights for several minutes
(~7 min measured on an M-series Mac); Core ML caches the result and later loads take seconds. Warm, it runs
45–52 ms per 15 s window.
Pass `encoderComputeUnits: .cpuAndGPU` to skip the long first compile when background execution does not matter: the
GPU decompresses the 2-bit weights in-kernel, loads in about a second and runs β‰ˆ21 ms per window.
Requires iOS 18 / macOS 15 (the 2-bit encoding uses iOS 18 Core ML ops). On iOS 17 / macOS 14 FluidAudio refuses to
load Redux and points to
[parakeet-ultra-coreml](https://huggingface.co/FluidInference/parakeet-ultra-coreml) instead.
## Accuracy
Full LibriSpeech, FluidAudio `asr-benchmark`, default compute units (ANE), both models back to back, M-series Mac. Corpus WER (total edit distance over
total reference words); RTFx = total audio / total processing time.
| Set | parakeet-tdt-0.6b-v3-coreml | parakeet-redux-coreml |
|-----|---------------------------:|----------------------:|
| test-clean (2620 files) | **2.27 %** | 2.71 % |
| test-other (2939 files) | **4.12 %** | 5.12 % |
| RTFx, test-clean | **128.6Γ—** | 83.9Γ— |
On English this build is 0.44 (clean) and 1.00 (other) points behind v3 β€” the same gap the upstream card reports
(+0.44 / +1.21). Absolute values are above the card's because FluidAudio decodes in 15 s windows and uses a simpler
text normalizer than the Open ASR Leaderboard; both models are scored identically here.
The Core ML transcripts match a PyTorch fp32 decode of the redux checkpoint to 0.19 % WER, so this is the
checkpoint's behaviour and not a conversion loss.
### FLEURS, 24 languages, 100 samples each
| | parakeet-tdt-0.6b-v3-coreml | parakeet-redux-coreml |
|---|---:|---:|
| mean WER | 14.81 % | **13.06 %** |
| duration-weighted WER | 14.65 % | **12.89 %** |
| languages won | 11 | **13** |
| RTFx | **149Γ—** | 134Γ— |
(`es_es` is absent from FluidAudio's FLEURS set; both models are scored on the same 24.)
Redux wins the multilingual average by 1.74 points, taking the low-resource languages by wide margins β€” Latvian
βˆ’11.1, Maltese βˆ’7.7, Slovene βˆ’7.2, Estonian βˆ’7.0, Greek βˆ’5.2, Lithuanian βˆ’5.1 β€” and conceding the high-resource
ones: French +3.7, Russian +2.6, Dutch +1.9, English +1.9, Polish +1.7, Ukrainian +1.4. The per-language direction
matches the upstream card in 23 of 24 languages.
**Pick this model for multilingual work and for download size; pick
[parakeet-tdt-0.6b-v3-coreml](https://huggingface.co/FluidInference/parakeet-tdt-0.6b-v3-coreml) for English.**
## License
CC-BY-4.0, same as the upstream checkpoint and nvidia/parakeet-tdt-0.6b-v3. Model by moondream (vik); Core ML
conversion by Fluid Inference (conversion recipe: `mobius/models/stt/parakeet-redux/coreml`).