CoolFace
Modelpublic

aufklarer/Omnilingual-ASR-CTC-1B-MLX-4bit

sourceHugging Faceapache-2.0updated 6mo agoView on Hugging Face
0likes24downloads
Model Card

Omnilingual ASR — CTC 1B (MLX 4-bit)

MLX-compatible 4-bit quantization of Meta's Omnilingual ASR CTC-1B model for on-device inference on Apple Silicon (M1/M2/M3/M4). The 1B variant trades ~360 MB of extra disk vs. the 300M build for meaningfully better accuracy on low-resource languages (per Meta's published CER/WER curves on FLEURS).

Omnilingual ASR is a wav2vec 2.0-style encoder-only model with a linear CTC head, trained by Meta for speech recognition across 1,600+ languages. The CTC variant is language-agnostic at inference time.

Model

Parameters1.01 B
FormatMLX safetensors (quantized linear layers + fp16 features)
Quantization4-bit per-group min-max, group size 64
Encoder layers48
Encoder dim1280
Attention heads20
FFN dim5120
Sample rate16 kHz (raw waveform input)
Frame rate50 fps
Max duration40 s
Languages1,600+
Vocabulary10,288 SentencePiece tokens

Files

FileSizeDescription
model.safetensors549 MB4-bit quantized transformer weights + fp16 conv frontend
tokenizer.model1.2 MBSentencePiece tokenizer (unk=3, pad=1, eos=2, bos=0)
config.json<1 KBArchitecture + quantization metadata

Architecture

Raw audio [1, samples]
  → Wav2Vec2FeatureExtractor (7-layer 1D conv, stride 320×)
  → Linear 512 → 1280
  → Wav2Vec2PositionEncoder (weight-normalized conv, kernel 128, groups 16)
  → 48 × StandardTransformerEncoderLayer (pre-norm, dim 1280, heads 20, ffn 5120)
  → LayerNorm
  → Linear 1280 → 10288   (CTC head)
  → logits [1, T/320, 10288]

CTC greedy decoding with duplicate collapsing over the argmax path.

Performance

Meta's upstream omniASR-CTC-1B model card reports substantial improvements over CTC-300M on low-resource languages. Our MLX 4-bit export preserves the same architecture and should land within ~1% absolute WER of fp32 on wav2vec2-class models.

For direct comparison with CTC-300M on FLEURS see the 300M 4-bit card.

Usage

python
import mlx.core as mx
from safetensors import safe_open

weights = {}
with safe_open("model.safetensors", framework="mlx") as f:
    for k in f.keys():
        weights[k] = f.get_tensor(k)

# Your MLX wav2vec2 + CTC implementation consumes these keys.
# Input : float32 audio [1, samples] at 16 kHz, zero-mean unit-var
# Output: logits [1, T, 10288] then CTC greedy decode via tokenizer.model

Swift inference is provided by speech-swift.

Source

Links

License

Apache 2.0 (inherited from upstream).