Omnilingual ASR

Metas Omnilingual ASR ist eine sprachagnostische Spracherkennungsfamilie, die 1.672 Sprachen in 32 verschiedenen Schriften abdeckt — die breiteste Sprachabdeckung aller ASR-Modelle auf dem Gerät auf Apple Silicon. Soniqo portiert die CTC-Variante sowohl nach CoreML (Neural Engine) als auch MLX (Metal-GPU), mit vier Modellgrößen von 300M bis 7B Parametern.

Sprachagnostisches CTC

Anders als Qwen3-ASR oder Parakeet TDT nimmt Omnilingual CTC zur Inferenzzeit keinen Sprachhinweis entgegen — es verwendet ein gemeinsames SentencePiece-Vokabular mit 10.288 Einträgen, das jede unterstützte Sprache abdeckt. Gib beliebiges Audio in einer beliebigen unterstützten Sprache ein, und das Modell erzeugt automatisch die korrekte Schrift.

Architektur

Omnilingual CTC ist ein überwachtes Fine-Tuning von Metas wav2vec-2.0-Backbone mit einem linearen CTC-Head über einem gemeinsamen mehrsprachigen Vokabular. Die Pipeline ist parallel und nicht-autoregressiv — ein Forward-Pass pro Äußerung, keine Decoder-Schleife.

Rohaudio [1, samples]
  → wav2vec2-Feature-Extraktor (7 Strided-CNN-Schichten, ×320 Downsample)
  → gewichts­normalisierter Conv1d-Positionsencoder
  → N × Pre-Norm-Transformer-Encoder-Schichten
  → finale Schicht-Normalisierung
  → linearer CTC-Head → Logits [1, T, 10288]

Bei 16-kHz-Eingabe erzeugt der 320× heruntergetastete Encoder eine Frame-Rate von 50 Hz. Ein 10-Sekunden-Clip erzeugt 499 Frames an Logits. Greedy-CTC-Dekodierung kollabiert aufeinanderfolgende Duplikate und überspringt Spezial-Tokens über den SentencePiece-Tokenizer.

Modellvarianten

Zehn Varianten werden unter dem Namespace aufklarer auf HuggingFace veröffentlicht — zwei CoreML-Fenstergrößen plus acht MLX-Quantisierungs-Kombinationen:

VarianteSchichtenDimHeadsGrößeLaufzeit
CTC-300M-CoreML-INT8 (5-s-Fenster)24102416312 MBNeural Engine
CTC-300M-CoreML-INT8 (10-s-Fenster)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

CLI-Verwendung

CoreML (Neural Engine)

# 10-s-Fenster (Standard)
.build/release/audio transcribe recording.wav --engine omnilingual

# 5-s-Fenster (weniger Speicher, schnellerer Kaltstart)
.build/release/audio transcribe recording.wav --engine omnilingual --window 5

MLX (Metal-GPU)

# 300M @ 4-Bit (Standard-MLX-Variante)
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx

# 1B @ 4-Bit — höhere Genauigkeit
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 1B

# 3B @ 8-Bit — nähert sich der Referenzqualität
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8

# 7B @ 4-Bit — größte CTC-Variante, beste Genauigkeit
.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

// Standard: 300M @ 4-Bit
let model = try await OmnilingualASRMLXModel.fromPretrained()

// Größere Varianten
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

Beide Backends erzeugen im Wesentlichen identische Transkripte bis auf 1–2 Zeichen (Quantisierung und Laufzeitunterschiede). Wähle je nach deinem Deployment-Ziel:

CoreMLMLX
Compute-ZielNeural EngineMetal-GPU
EingabelängeFestes Fenster (5 s oder 10 s)Beliebige Länge bis 40 s
ModellgrößenNur 300M300M / 1B / 3B / 7B
QuantisierungINT8-Palettization4-Bit oder 8-Bit QuantizedLinear
Läuft parallel zu GPU-TTSJa (ANE ist unabhängig)Konkurriert mit GPU-TTS
iOS-UnterstützungiOS 17+Jedes Apple-Silicon-iOS

Vorverarbeitungsdetails

Omnilingual erfordert eine Layer-Norm auf Äußerungsebene auf der Rohwellenform, entsprechend fairseq2's apply_audio_normalization:

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

Die Swift-Portierung normalisiert den tatsächlichen Audio-Inhalt vor dem Nullpadding auf das CoreML-Festfenster, sodass Eingaben unterhalb der Fenstergröße exakt den Statistiken der Referenz-Pipeline entsprechen. Das ist die häufigste Port-Falle — die wav2vec2-Implementierung von HuggingFace macht Group-Norm pro Feature, keine Utterance-Layer-Norm.

Die Referenz-Pipeline erzwingt eine harte 40-Sekunden-Obergrenze (MAX_ALLOWED_AUDIO_SEC) für Eingabe-Audio. Die Swift-Portierung erzwingt dieselbe Grenze — längere Eingaben werfen einen klaren Fehler und verweisen auf SpeechVAD oder ParakeetStreamingASR für segmentierte Verarbeitung.

Sprachabdeckung

Omnilingual unterstützt 1.672 Sprachen in 32 Schriften, einschließlich über 500 ressourcenarmer Sprachen, die über Community-Datensammlung hinzugefügt wurden. Beispielabdeckung:

SchriftSprachenBeispielcodes
Lateinisch1.398eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, …
Arabisch70arb_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, …
Kyrillisch51rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, …
Äthiopisch10amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, …
Bengalisch8ben_Beng, asm_Beng, mni_Beng, …
Thai / Lao / Myanmar / Tibetisch9 / 1 / 3 / 6tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, …
Han (vereinfacht / traditionell)6cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, …
Japanisch / Koreanisch1 / 1jpn_Jpan, kor_Hang
Armenisch, Georgisch, Hebräisch, Griechisch, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Singhalesisch, Tamil, Telugu, Tifinagh, Thaana, plus 4 weitere48Siehe vollständige Liste →

Vollständige ISO-639-3- + ISO-15924-Codeliste mit englischen Namen im Quelltext von lang_ids.py und nach Schrift gruppiert mit Länderhinweisen in der Modellkarte.

Verifizierte Ausgabe

Transkripte aus der Swift-Portierung auf dem FLEURS-Benchmark, CoreML 300M:

SpracheReferenzAusgabe
EnglischFellow wrestlers also paid tribute to Luna.fellow wrestlers also paid tribute to luna
Arabischكما أثنى الزملاء المصارعون على لوناكما أثنى الزملاء المصارعون على لونا
Hindiलूना को साथी पहलवानों ने भी श्रद्धांजलि दीलूना को साथी पहलवानों ने भी सरधांजलीदी
FranzösischPensez à l'itinéraire de ski comme à un itinéraire de randonnée similaire.pense à létineraire desqui comme un étineraire de rent donner similaire

Die MLX-300M-4bit-Variante erzeugt im Wesentlichen identische Ausgaben bis auf 1–2 Zeichen. Größere Varianten (1B, 3B, 7B) reduzieren Restfehler progressiv.

Referenz