Omnilingual ASR

Omnilingual ASR de Meta est une famille de reconnaissance vocale agnostique au langage couvrant 1 672 langues dans 32 écritures distinctes — la couverture linguistique la plus large de tout modèle ASR embarqué sur Apple Silicon. Soniqo porte la variante CTC sur CoreML (Neural Engine) et sur MLX (GPU Metal), avec quatre tailles de modèle de 300M à 7B de paramètres.

CTC agnostique au langage

Contrairement à Qwen3-ASR ou Parakeet TDT, Omnilingual CTC ne prend pas d'indice de langue à l'inférence — il utilise un vocabulaire SentencePiece partagé de 10 288 entrées couvrant toutes les langues prises en charge. Passez n'importe quel audio dans n'importe quelle langue prise en charge et le modèle produit automatiquement la bonne écriture.

Architecture

Omnilingual CTC est un fine-tune supervisé de la colonne wav2vec 2.0 de Meta avec une tête CTC linéaire sur un vocabulaire multilingue partagé. Le pipeline est parallèle et non-autorégressif — une passe avant par énoncé, sans boucle de décodeur.

audio brut [1, samples]
  → extracteur de caractéristiques wav2vec2 (7 couches CNN à stride, sous-échantillonnage ×320)
  → encodeur positionnel Conv1d à weight-norm
  → N couches d'encodeur Transformer pre-norm
  → layer norm finale
  → tête CTC linéaire → logits [1, T, 10288]

À 16 kHz en entrée, l'encodeur sous-échantillonné ×320 produit un taux de trame de 50 Hz. Un clip de 10 secondes produit 499 trames de logits. Le décodage CTC glouton fusionne les duplicatas consécutifs et saute les tokens spéciaux via le tokenizer SentencePiece.

Variantes du modèle

Dix variantes sont publiées sous le namespace aufklarer sur HuggingFace — deux tailles de fenêtre CoreML plus huit combinaisons de quantification MLX :

VarianteCouchesDimTêtesTailleRuntime
CTC-300M-CoreML-INT8 (fenêtre 5 s)24102416312 MoNeural Engine
CTC-300M-CoreML-INT8 (fenêtre 10 s)24102416312 MoNeural Engine
CTC-300M-MLX-4bit24102416193 MoGPU Metal
CTC-300M-MLX-8bit24102416342 MoGPU Metal
CTC-1B-MLX-4bit48128020549 MoGPU Metal
CTC-1B-MLX-8bit481280201006 MoGPU Metal
CTC-3B-MLX-4bit602048321,71 GoGPU Metal
CTC-3B-MLX-8bit602048323,16 GoGPU Metal
CTC-7B-MLX-4bit1282048323,55 GoGPU Metal
CTC-7B-MLX-8bit1282048326,63 GoGPU Metal

Utilisation en CLI

CoreML (Neural Engine)

# Fenêtre 10 s (par défaut)
.build/release/audio transcribe recording.wav --engine omnilingual

# Fenêtre 5 s (mémoire plus faible, démarrage à froid plus rapide)
.build/release/audio transcribe recording.wav --engine omnilingual --window 5

MLX (GPU Metal)

# 300M @ 4 bits (variante MLX par défaut)
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx

# 1B @ 4 bits — précision supérieure
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 1B

# 3B @ 8 bits — s'approche de la qualité de référence
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8

# 7B @ 4 bits — plus grande variante CTC, meilleure précision
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 7B

API Swift

Backend 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)

Backend MLX

import OmnilingualASR

// Par défaut : 300M @ 4 bits
let model = try await OmnilingualASRMLXModel.fromPretrained()

// Variantes plus grandes
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

Les deux backends produisent des transcriptions essentiellement identiques à 1-2 caractères près (différences de quantification et d'environnement d'exécution). Choisissez en fonction de votre cible de déploiement :

CoreMLMLX
Cible de calculNeural EngineGPU Metal
Longueur d'entréeFenêtre fixe (5 s ou 10 s)Toute longueur jusqu'à 40 s
Tailles de modèle300M uniquement300M / 1B / 3B / 7B
QuantificationPalettisation INT8QuantizedLinear 4 bits ou 8 bits
S'exécute en parallèle du TTS GPUOui (l'ANE est indépendant)En concurrence avec le TTS GPU
Support iOSiOS 17+Tout iOS Apple Silicon

Détails de prétraitement

Omnilingual requiert une layer-norm au niveau de l'énoncé sur la forme d'onde brute, correspondant à apply_audio_normalization de fairseq2 :

normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)

Le port Swift normalise le contenu audio réel avant le zero-padding vers la fenêtre fixe CoreML, de sorte que les entrées sous-fenêtre correspondent exactement aux statistiques du pipeline de référence. C'est le piège le plus courant — l'implémentation wav2vec2 de HuggingFace fait une group-norm par caractéristique, pas une layer-norm d'énoncé.

Le pipeline de référence impose une limite dure de 40 secondes (MAX_ALLOWED_AUDIO_SEC) sur l'audio en entrée. Le port Swift applique la même limite — des entrées plus longues lèvent une erreur claire pointant vers SpeechVAD ou ParakeetStreamingASR pour un traitement segmenté.

Couverture linguistique

Omnilingual prend en charge 1 672 langues dans 32 écritures, dont plus de 500 langues peu dotées ajoutées via une collecte de données communautaire. Couverture échantillon :

ÉcritureLanguesCodes d'exemple
Latin1 398eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, …
Arabe70arb_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, …
Cyrillique51rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, …
Éthiopien10amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, …
Bengali8ben_Beng, asm_Beng, mni_Beng, …
Thaï / Lao / Myanmar / Tibétain9 / 1 / 3 / 6tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, …
Han (simplifié / traditionnel)6cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, …
Japonais / Coréen1 / 1jpn_Jpan, kor_Hang
Arménien, géorgien, hébreu, grec, gujarati, gurmukhi, kannada, malayalam, oriya, sinhala, tamil, telugu, tifinagh, thaana, plus 4 autres48Voir la liste complète →

Liste complète des codes ISO 639-3 + ISO 15924 avec noms en anglais dans la source lang_ids.py, et regroupés par écriture avec des indices de pays dans la fiche du modèle.

Sortie vérifiée

Transcriptions du port Swift sur le benchmark FLEURS, CoreML 300M :

LangueRéférenceSortie
AnglaisFellow wrestlers also paid tribute to Luna.fellow wrestlers also paid tribute to luna
Arabeكما أثنى الزملاء المصارعون على لوناكما أثنى الزملاء المصارعون على لونا
Hindiलूना को साथी पहलवानों ने भी श्रद्धांजलि दीलूना को साथी पहलवानों ने भी सरधांजलीदी
FrançaisPensez à 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 produit une sortie essentiellement identique à 1-2 caractères près. Les variantes plus grandes (1B, 3B, 7B) réduisent progressivement les erreurs résiduelles.

Référence