Traduzione automatica · Originale inglese
Omnilingual ASR
Meta's Omnilingual ASR è un linguaggio-agnostico riconoscimento del discorso famiglia che copre Lingue 1,672 attraverso il 32 script distinti — la più ampia copertura linguistica di qualsiasi on-device ASR modello su Apple Silicon. Soniqo porta la variante CTC ad entrambi CoreML (Neural Engine) e MLX (Metal GPU), con quattro dimensioni modello da 300M a 7Parametri B.
A differenza di Qwen3-ASR o Parakeet TDT, Omnilingual CTC non prende un suggerimento di lingua a tempo di inferenza — utilizza un vocabolario di SentencePiece condiviso 10,288-entry che spazia ogni lingua supportata.
Canali audio, tasso di esempio e formato di input
Utilizzare mono Float32 PCM a 16 kHz. Il CLI accetta file AVFoundation-readable comuni come WAV, MP3, M4A, e CAF, poi li rivende a 16 kHz automaticamente. Per file stereo o multicanale, AudioFileLoader.load media tutti i canali per impostazione predefinita quindi il discorso su qualsiasi canale viene mantenuto; uso channelSelection: .first o .select([indices]) per il routing esplicito. Per registrazioni lunghe, AudioFileLoader.stream fornisce pezzi tirati, legati-memoria. Quando si passa [Float] buffer direttamente, fornire la sua frequenza campione effettivo—le implementazioni CoreML e MLX rivendita ampia internamente.
Architettura
Omnilingual CTC è un eccellente-tune supervisionato di Meta wav2vec 2.0 backbone con una testa CTC lineare su un vocabolario multilingue condiviso. La pipeline è parallela e non-autoregressiva — un passaggio avanti per pronuncia, nessun loop decoder.
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]
A 16 kHz di ingresso, l'encoder downsampled 320× produce una frequenza di cornice da 50 Hz. Una clip da 10 secondi produce 499 cornici di logits. Greedy CTC decoding crolla duplicati consecutivi e salta i gettoni speciali tramite il tokenizer SentencePiece.
Varianti di modello
Dieci varianti sono pubblicate sotto lo spazio dei nomi aufklarer su HuggingFace — due CoreML dimensioni delle finestre più otto MLX
| Variante | Datori di lavoro | Dim. | Testi | Dimensione | Tempo di esecuzione |
|---|---|---|---|---|---|
| CTC-300M-CoreML-INT8 (5 s finestra) | 24 | 1024 | 16 | 312 MB | Neural Engine |
| CTC-300M-CoreML-INT8 (10 s finestra) | 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 |
Uso CLI
CoreML (Neural Engine)
# 10 s window (default)
.build/release/speech transcribe recording.wav --engine omnilingual
# 5 s window (lower memory, faster cold start)
.build/release/speech transcribe recording.wav --engine omnilingual --window 5
MLX (Metal GPU)
# 300M @ 4-bit (default MLX variant)
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx
# 1B @ 4-bit — higher accuracy
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx --variant 1B
# 3B @ 8-bit — approaching reference quality
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8
# 7B @ 4-bit — largest CTC variant, best accuracy
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx --variant 7B
Swift API
Supporto CoreML
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)
Supporto MLX
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 vs MLX
Entrambi i backend producono trascrizioni sostanzialmente identiche modulo 1-2 caratteri (quantizzazione e differenze runtime). Scegliere in base al vostro obiettivo di distribuzione:
| CoreML | MLX | |
|---|---|---|
| Obiettivo di completamento | Neural Engine | Metal GPU |
| Lunghezza dell'ingresso | Finestra fissa (5 s o 10 s) | Qualsiasi lunghezza fino a 40 s |
| Dimensioni del modello | 300M solo | 300M / 1B / 3B / 7B |
| Quantificazione | Palettizzazione INT8 | 4 bit o 8 bit QuantizedLinear |
| Corre contemporaneamente con GPU TTS | Sì (ANE è indipendente) | Contenuti con GPU TTS |
| Supporto iOS | iOS 18+ | Qualsiasi Apple Silicon iOS |
Dettagli di preelaborazione
Omnilingual richiede strato-norm di livello di pronuncia sulla forma d'onda grezza, corrispondente fairseq2's apply_audio_normalization:
normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)
La porta Swift normalizza il contenuto audio reale prima di passare allo zero-padding al CoreML finestra fissa, quindi gli input sub-window corrispondono esattamente alle statistiche della pipeline di riferimento. Questo è il singolo strato più comune della porta: HuggingFace's wav2vec2
La pipeline di riferimento applica un tappo duro 40-secondo (MAX_ALLOWED_AUDIO_SEC) sull'audio di ingresso. La porta Swift applica lo stesso limite — gli input più lunghi gettano un chiaro errore indicando Voce principale: o ParakeetStreamingASR per la lavorazione segmentata.
Copertura linguistica
Omnilingual supporta 1,672 lingue in 32 script, tra cui 500+ lingue a basso contenuto di risorse aggiunte attraverso la raccolta di dati della comunità.
| Script | Lingue | Codici del campione |
|---|---|---|
| latino-americano | 1,398 | eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, … |
| Arabo | 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, … |
| Cirillio | 51 | rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, … |
| Etiopico | 10 | amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, … |
| Bengali | 8 | ben_Beng, asm_Beng, mni_Beng, … |
| Thai / Lao / Myanmar / Tibetano | 9 / 1 / 3 / 6 | tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, … |
| Han (semplificato / tradizionale) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| Giapponese / Coreano | 1 / 1 | jpn_Jpan, kor_Hang |
| Armeno, georgiano, ebraico, greco, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, più 4 | 48 | Vedere lista completa → |
ISO completa 639-3 + ISO 15924 elenco con i nomi inglesi nel lang_ids.py fonte, e raggruppato per script con suggerimenti di paese nel modello carta.
Uscita verificata
Trascrizioni dalla porta Swift sulla FLEURS benchmark, CoreML 300M:
| Lingua | Riferimento | Produzione |
|---|---|---|
| Inglese | I lottatori sono stati anche tributi a Luna. | fellow wrestlers also paid tribute to luna |
| Arabo | كما أثنى الزملاء المصارعون على لونا | كما أثنى الزملاء المصارعون على لونا |
| Hindi | लूना को साथी पहलवानों ने भी श्रद्धांजलि दी | लूना को साथी पहलवानों ने भी सरधांजलीदी |
| Francese | 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 |
La variante MLX 300M-4bit produce essenzialmente identici caratteri modulo 1-2. Le varianti più grandi (1B, 3B, 7B) riducono progressivamente gli errori residui.
Riferimento
- Carta: Omnilingual ASR (arXiv 2511.09690)
- implementazione a monte: facebookresearch/omnilingual-asr ( Apache 2.0)
- Fonte della porta Swift: speech-swift/Fonti/OmnilingualASR
- Scheda di modello: docs/modelli/omnilingual-asr.md