Omnilingual ASR
Meta'nın Omnilingual ASR'si, 32 farklı yazı sistemi boyunca 1.672 dili kapsayan dilden bağımsız bir konuşma tanıma ailesidir — Apple Silicon üzerinde herhangi bir cihaz üzeri ASR modelinin en geniş dil kapsamı. Soniqo, CTC varyantını hem CoreML'e (Neural Engine) hem de MLX'e (Metal GPU) port eder, 300M'den 7B parametreye kadar dört model boyutuyla.
Qwen3-ASR veya Parakeet TDT'nin aksine, Omnilingual CTC çıkarım sırasında dil ipucu almaz — desteklenen her dili kapsayan paylaşımlı 10.288 girişli bir SentencePiece sözcük dağarcığı kullanır. Desteklenen herhangi bir dilde herhangi bir konuşma geçirin, model doğru yazı sistemini otomatik olarak üretir.
Mimari
Omnilingual CTC, Meta'nın wav2vec 2.0 omurgasının paylaşımlı çok dilli bir sözcük dağarcığı üzerinde doğrusal CTC kafasıyla denetimli bir ince ayarıdır. Boru hattı paraleldir ve otoregresif değildir — söyleniş başına bir ileri geçiş, decoder döngüsü yok.
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 girişte, ×320 alt örneklenmiş encoder 50 Hz frame oranı üretir. 10 saniyelik bir klip 499 frame logit üretir. Greedy CTC çözme ardışık kopyaları çöktürür ve SentencePiece tokenizer aracılığıyla özel token'ları atlar.
Model Varyantları
HuggingFace'te aufklarer ad alanı altında on varyant yayımlanmıştır — iki CoreML pencere boyutu artı sekiz MLX niceleme kombinasyonu:
| Varyant | Katmanlar | Dim | Headler | Boyut | Runtime |
|---|---|---|---|---|---|
| CTC-300M-CoreML-INT8 (5 s pencere) | 24 | 1024 | 16 | 312 MB | Neural Engine |
| CTC-300M-CoreML-INT8 (10 s pencere) | 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 Kullanımı
CoreML (Neural Engine)
# 10 s pencere (varsayılan)
.build/release/speech transcribe recording.wav --engine omnilingual
# 5 s pencere (daha az bellek, daha hızlı soğuk başlangıç)
.build/release/speech transcribe recording.wav --engine omnilingual --window 5
MLX (Metal GPU)
# 300M @ 4-bit (varsayılan MLX varyantı)
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx
# 1B @ 4-bit — daha yüksek doğruluk
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx --variant 1B
# 3B @ 8-bit — referans kalitesine yaklaşıyor
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8
# 7B @ 4-bit — en büyük CTC varyantı, en iyi doğruluk
.build/release/speech 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
// Varsayılan: 300M @ 4-bit
let model = try await OmnilingualASRMLXModel.fromPretrained()
// Daha büyük varyantlar
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 vs MLX
Her iki backend de 1-2 karakter farkıyla (niceleme ve runtime farkları) esasen aynı transkriptleri üretir. Dağıtım hedefinize göre seçim yapın:
| CoreML | MLX | |
|---|---|---|
| Hesaplama hedefi | Neural Engine | Metal GPU |
| Giriş uzunluğu | Sabit pencere (5 s veya 10 s) | 40 s'ye kadar herhangi bir uzunluk |
| Model boyutları | Yalnızca 300M | 300M / 1B / 3B / 7B |
| Niceleme | INT8 palettization | 4-bit veya 8-bit QuantizedLinear |
| GPU TTS ile eşzamanlı çalışma | Evet (ANE bağımsızdır) | GPU TTS ile çekişir |
| iOS desteği | iOS 18+ | Tüm Apple Silicon iOS |
Ön İşleme Detayları
Omnilingual, fairseq2'nin apply_audio_normalization'ıyla eşleşen, ham dalga formunda söyleniş düzeyinde layer-norm gerektirir:
normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)
Swift portu gerçek ses içeriğini CoreML sabit penceresine sıfır doldurmadan önce normalleştirir, böylece pencere altı girişler referans boru hattı istatistikleriyle tam olarak eşleşir. Bu en yaygın port tuzağıdır — HuggingFace'in wav2vec2 uygulaması özellik başına group-norm yapar, söyleniş düzeyinde layer-norm değil.
Referans boru hattı, giriş sesi üzerinde 40 saniyelik kesin bir sınır (MAX_ALLOWED_AUDIO_SEC) uygular. Swift portu aynı sınırı uygular — daha uzun girişler segmentli işleme için SpeechVAD veya ParakeetStreamingASR'yi gösteren net bir hata atar.
Dil Kapsamı
Omnilingual, topluluk veri toplama yoluyla eklenen 500'den fazla düşük kaynaklı dil dahil olmak üzere 32 yazı sistemi boyunca 1.672 dili destekler. Örnek kapsam:
| Yazı sistemi | Diller | Örnek kodlar |
|---|---|---|
| Latin | 1.398 | eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, … |
| Arap | 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, … |
| Kiril | 51 | rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, … |
| Etiyopik | 10 | amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, … |
| Bengal | 8 | ben_Beng, asm_Beng, mni_Beng, … |
| Tay / Lao / Birman / Tibet | 9 / 1 / 3 / 6 | tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, … |
| Han (basitleştirilmiş / geleneksel) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| Japon / Kore | 1 / 1 | jpn_Jpan, kor_Hang |
| Ermeni, Gürcü, İbrani, Yunan, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, artı 4 fazla | 48 | Tam listeyi gör → |
İngilizce adlarıyla tam ISO 639-3 + ISO 15924 kod listesi lang_ids.py kaynağında, ve yazı sistemine göre gruplandırılmış ülke ipuçlarıyla birlikte model kartında bulunur.
Doğrulanmış Çıktı
FLEURS benchmark'ında Swift portundan transkriptler, CoreML 300M:
| Dil | Referans | Çıktı |
|---|---|---|
| İngilizce | Fellow wrestlers also paid tribute to Luna. | fellow wrestlers also paid tribute to luna |
| Arapça | كما أثنى الزملاء المصارعون على لونا | كما أثنى الزملاء المصارعون على لونا |
| Hintçe | लूना को साथी पहलवानों ने भी श्रद्धांजलि दी | लूना को साथी पहलवानों ने भी सरधांजलीदी |
| Fransızca | 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 varyantı 1-2 karakter farkıyla esasen aynı çıktıyı üretir. Daha büyük varyantlar (1B, 3B, 7B) kalan hataları aşamalı olarak azaltır.
Referans
- Makale: Omnilingual ASR (arXiv 2511.09690)
- Upstream uygulama: facebookresearch/omnilingual-asr (Apache 2.0)
- Swift port kaynağı: speech-swift/Sources/OmnilingualASR
- Model kartı: docs/models/omnilingual-asr.md