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.

CTC linguistico-agnostico

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

VarianteDatori di lavoroDim.TestiDimensioneTempo di esecuzione
CTC-300M-CoreML-INT8 (5 s finestra)24102416312 MBNeural Engine
CTC-300M-CoreML-INT8 (10 s finestra)24102416312 MBNeural Engine
CTC-300M-MLX-4bit24102416193 MBMetal GPU
CTC-300M-MLX-8bit24102416342 MBMetal GPU
CTC-1B-MLX-4bit48128020549 MBMetal GPU
CTC-1B-MLX-8bit481280201006 MBMetal GPU
CTC-3B-MLX-4bit602048321.71 GBMetal GPU
CTC-3B-MLX-8bit602048323.16 GBMetal GPU
CTC-7B-MLX-4bit1282048323.55 GBMetal GPU
CTC-7B-MLX-8bit1282048326.63 GBMetal 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:

CoreMLMLX
Obiettivo di completamentoNeural EngineMetal GPU
Lunghezza dell'ingressoFinestra fissa (5 s o 10 s)Qualsiasi lunghezza fino a 40 s
Dimensioni del modello300M solo300M / 1B / 3B / 7B
QuantificazionePalettizzazione INT84 bit o 8 bit QuantizedLinear
Corre contemporaneamente con GPU TTSSì (ANE è indipendente)Contenuti con GPU TTS
Supporto iOSiOS 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à.

ScriptLingueCodici del campione
latino-americano1,398eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, …
Arabo70arb_Arab, arz_Arab, ary_Arab, arq_Arab, fas_Arab, urd_Arab, ckb_Arab, uig_Arab, …
Devanagari65hin_Deva, mar_Deva, nep_Deva, bho_Deva, mai_Deva, awa_Deva, brx_Deva, …
Cirillio51rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, …
Etiopico10amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, …
Bengali8ben_Beng, asm_Beng, mni_Beng, …
Thai / Lao / Myanmar / Tibetano9 / 1 / 3 / 6tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, …
Han (semplificato / tradizionale)6cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, …
Giapponese / Coreano1 / 1jpn_Jpan, kor_Hang
Armeno, georgiano, ebraico, greco, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, più 448Vedere 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:

LinguaRiferimentoProduzione
Inglese I lottatori sono stati anche tributi a Luna.fellow wrestlers also paid tribute to luna
Araboكما أثنى الزملاء المصارعون على لوناكما أثنى الزملاء المصارعون على لونا
Hindiलूना को साथी पहलवानों ने भी श्रद्धांजलि दीलूना को साथी पहलवानों ने भी सरधांजलीदी
FrancesePensez à 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