Omnilingual ASR
Meta का Omnilingual ASR एक भाषा-अज्ञेय स्पीच रिकग्निशन परिवार है जो 32 अलग लिपियों में 1,672 भाषाओं को कवर करता है — Apple Silicon पर किसी भी ऑन-डिवाइस ASR मॉडल की सबसे व्यापक भाषा कवरेज। Soniqo CTC variant को CoreML (Neural Engine) और MLX (Metal GPU) दोनों पर पोर्ट करता है, 300M से 7B पैरामीटर तक चार मॉडल आकारों के साथ।
Qwen3-ASR या Parakeet TDT के विपरीत, Omnilingual CTC इन्फ़रेंस समय पर भाषा संकेत नहीं लेता है — यह प्रत्येक समर्थित भाषा को span करने वाले एक साझा 10,288-entry SentencePiece vocabulary का उपयोग करता है। किसी भी समर्थित भाषा में कोई भी ऑडियो pass करें और मॉडल स्वचालित रूप से सही script उत्पन्न करता है।
आर्किटेक्चर
Omnilingual CTC Meta के wav2vec 2.0 backbone का एक शेयर्ड बहुभाषी vocabulary पर linear CTC head के साथ supervised fine-tune है। पाइपलाइन parallel और non-autoregressive है — प्रति utterance एक forward pass, कोई decoder loop नहीं।
raw audio [1, samples]
→ wav2vec2 feature extractor (7 strided CNN layers, ×320 downsample)
→ weight-normalised Conv1d positional encoder
→ N × pre-norm Transformer encoder layers
→ final layer norm
→ linear CTC head → logits [1, T, 10288]
16 kHz input पर, 320× downsampled encoder 50 Hz frame rate उत्पन्न करता है। एक 10-सेकंड clip logits के 499 frames उत्पन्न करता है। Greedy CTC decoding लगातार duplicates को collapse करता है और SentencePiece tokenizer के माध्यम से special tokens को skip करता है।
मॉडल वेरिएंट
HuggingFace पर aufklarer namespace के तहत दस वेरिएंट प्रकाशित हैं — दो CoreML window sizes प्लस आठ MLX quantisation combinations:
| वेरिएंट | Layers | Dim | Heads | आकार | Runtime |
|---|---|---|---|---|---|
| CTC-300M-CoreML-INT8 (5 s window) | 24 | 1024 | 16 | 312 MB | Neural Engine |
| CTC-300M-CoreML-INT8 (10 s window) | 24 | 1024 | 16 | 312 MB | Neural Engine |
| CTC-300M-MLX-4bit | 24 | 1024 | 16 | 193 MB | Metal GPU |
| CTC-300M-MLX-8bit | 24 | 1024 | 16 | 342 MB | Metal GPU |
| CTC-1B-MLX-4bit | 48 | 1280 | 20 | 549 MB | Metal GPU |
| CTC-1B-MLX-8bit | 48 | 1280 | 20 | 1006 MB | Metal GPU |
| CTC-3B-MLX-4bit | 60 | 2048 | 32 | 1.71 GB | Metal GPU |
| CTC-3B-MLX-8bit | 60 | 2048 | 32 | 3.16 GB | Metal GPU |
| CTC-7B-MLX-4bit | 128 | 2048 | 32 | 3.55 GB | Metal GPU |
| CTC-7B-MLX-8bit | 128 | 2048 | 32 | 6.63 GB | Metal GPU |
CLI उपयोग
CoreML (Neural Engine)
# 10 s window (default)
.build/release/audio transcribe recording.wav --engine omnilingual
# 5 s window (lower memory, faster cold start)
.build/release/audio transcribe recording.wav --engine omnilingual --window 5
MLX (Metal GPU)
# 300M @ 4-bit (default MLX variant)
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx
# 1B @ 4-bit — higher accuracy
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 1B
# 3B @ 8-bit — approaching reference quality
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8
# 7B @ 4-bit — largest CTC variant, best accuracy
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 7B
Swift API
CoreML backend
import OmnilingualASR
import AudioCommon
let model = try await OmnilingualASRModel.fromPretrained()
let audio = try AudioFileLoader.load(url: url, targetSampleRate: 16000)
let text = try model.transcribeAudio(audio, sampleRate: 16000)
print(text)
MLX backend
import OmnilingualASR
// Default: 300M @ 4-bit
let model = try await OmnilingualASRMLXModel.fromPretrained()
// Larger variants
let big = try await OmnilingualASRMLXModel.fromPretrained(variant: .b1, bits: 4)
let huge = try await OmnilingualASRMLXModel.fromPretrained(variant: .b3, bits: 8)
let max = try await OmnilingualASRMLXModel.fromPretrained(variant: .b7, bits: 4)
let text = try model.transcribeAudio(audio, sampleRate: 16000)
CoreML बनाम MLX
दोनों बैकएंड modulo 1-2 characters (quantisation और runtime अंतर) अनिवार्य रूप से समान transcripts उत्पन्न करते हैं। अपने डिप्लॉयमेंट टारगेट के आधार पर चुनें:
| CoreML | MLX | |
|---|---|---|
| Compute target | Neural Engine | Metal GPU |
| Input length | Fixed window (5 s या 10 s) | 40 s तक कोई भी length |
| मॉडल आकार | केवल 300M | 300M / 1B / 3B / 7B |
| Quantisation | INT8 palettization | 4-bit या 8-bit QuantizedLinear |
| GPU TTS के साथ समवर्ती चलता है | हाँ (ANE स्वतंत्र है) | GPU TTS से competition करता है |
| iOS समर्थन | iOS 17+ | कोई भी Apple Silicon iOS |
प्रीप्रोसेसिंग विवरण
Omnilingual raw waveform पर utterance-level layer-norm की आवश्यकता होती है, fairseq2 के apply_audio_normalization से मेल खाते हुए:
normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)
Swift port CoreML fixed window पर zero-padding से पहले real audio content को normalise करता है, इसलिए sub-window inputs reference pipeline statistics से बिल्कुल मेल खाते हैं। यह एकमात्र सबसे सामान्य port pitfall है — HuggingFace का wav2vec2 कार्यान्वयन utterance layer-norm नहीं, per-feature group-norm करता है।
Reference पाइपलाइन input audio पर एक 40-सेकंड hard cap (MAX_ALLOWED_AUDIO_SEC) लागू करती है। Swift port भी समान सीमा लागू करता है — लंबे inputs segmented प्रोसेसिंग के लिए SpeechVAD या ParakeetStreamingASR की ओर इशारा करते हुए स्पष्ट error throw करते हैं।
भाषा कवरेज
Omnilingual 32 लिपियों में 1,672 भाषाओं का समर्थन करता है, जिसमें समुदाय डेटा संग्रह के माध्यम से जोड़ी गई 500+ low-resource भाषाएँ शामिल हैं। नमूना कवरेज:
| लिपि | भाषाएँ | नमूना कोड |
|---|---|---|
| Latin | 1,398 | eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, … |
| Arabic | 70 | arb_Arab, arz_Arab, ary_Arab, arq_Arab, fas_Arab, urd_Arab, ckb_Arab, uig_Arab, … |
| Devanagari | 65 | hin_Deva, mar_Deva, nep_Deva, bho_Deva, mai_Deva, awa_Deva, brx_Deva, … |
| Cyrillic | 51 | rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, … |
| Ethiopic | 10 | amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, … |
| Bengali | 8 | ben_Beng, asm_Beng, mni_Beng, … |
| Thai / Lao / Myanmar / Tibetan | 9 / 1 / 3 / 6 | tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, … |
| Han (simplified / traditional) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| Japanese / Korean | 1 / 1 | jpn_Jpan, kor_Hang |
| Armenian, Georgian, Hebrew, Greek, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, और 4 अधिक | 48 | पूर्ण सूची देखें → |
पूर्ण ISO 639-3 + ISO 15924 कोड सूची lang_ids.py source में English नामों के साथ, और model card में country hints के साथ script द्वारा समूहित।
सत्यापित आउटपुट
FLEURS benchmark पर Swift port से transcripts, CoreML 300M:
| भाषा | Reference | आउटपुट |
|---|---|---|
| English | Fellow wrestlers also paid tribute to Luna. | fellow wrestlers also paid tribute to luna |
| Arabic | كما أثنى الزملاء المصارعون على لونا | كما أثنى الزملاء المصارعون على لونا |
| Hindi | लूना को साथी पहलवानों ने भी श्रद्धांजलि दी | लूना को साथी पहलवानों ने भी सरधांजलीदी |
| French | Pensez à l'itinéraire de ski comme à un itinéraire de randonnée similaire. | pense à létineraire desqui comme un étineraire de rent donner similaire |
MLX 300M-4bit variant modulo 1-2 characters अनिवार्य रूप से समान output उत्पन्न करता है। बड़े variants (1B, 3B, 7B) क्रमिक रूप से residual errors को कम करते हैं।
संदर्भ
- Paper: Omnilingual ASR (arXiv 2511.09690)
- Upstream कार्यान्वयन: facebookresearch/omnilingual-asr (Apache 2.0)
- Swift port सोर्स: speech-swift/Sources/OmnilingualASR
- Model card: docs/models/omnilingual-asr.md