Automatische vertaling · Engels origineel
Niet-linguaal ASR
Meta's Omnilingual ASR is een taal-agnostische spraakherkenningsfamilie die 1,672 talen omvat over 32 afzonderlijke scripts . . de breedste taaldekking van elk on-device ASR model op Apple Silicon. Soniqo ports the CTC› naar beide CoreML (Neural Engine) en MLX (Metal GPU), met vier modelgroottes van 300M naar 7B parameters.
In tegenstelling tot Qwen3-ASR of Parakeet TDT, neemt Omnilingual CTC geen taalhint op het moment van het gevolggevingsgespreksgesprekken aan . Het gebruikt een gedeelde 10.288-entry SentencePiece woordenschat die alle ondersteunde talen omvat. Geef elke spraak door in elke ondersteunde taal en het model produceert automatisch het juiste script.
Audiokanalen, sample rate en invoerformaat
Gebruik mono Float32 PCM bij 16 kHz. De CLI accepteert gemeenschappelijke AVFoundation-leesbare bestanden, zoals WAV, MP3 en M4A. Vervolgens hersamplet ze automatisch naar 16 kHz. Voor stereo- of multichannelbestanden, AudioFileLoader.load gemiddelden alle kanalen standaard, zodat spraak op elk kanaal wordt behouden; gebruik channelSelection: .first of .select([indices]) voor expliciete routering. Voor lange opnames, AudioFileLoader.stream zorgt voor trek-gedreven, begrensd-geheugen brokken. [Float] buffer direct, de werkelijke sample rate te verstrekken de CoreML en MLX implementaties intern opnieuw te nemen.
Architectuur
Omnilingual CTC is een onder toezicht staande fijne tune van Meta's wav2vec 2.0 ruggengraat met een lineaire CTC hoofd over een gedeelde meertalige woordenschat. De pijplijn is parallel en niet-autoregressief een voorwaarts pas per uitdrukking, geen decoder loop.
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]
Bij 16 kHz ingang, de 320× down sample encoder produceert 50 Hz frame rate. Een 10-seconde clip produceert 499 frames van logits. Hebzuchtige CTC decodering klapt opeenvolgende duplicaten en slaat speciale tokens over via de SentencePiece tokenizer.
Model Varianten
Tien varianten worden gepubliceerd onder de aufklarer namespace op HuggingFace 2 CoreML venstergrootte plus acht MLX quantification combinaties:
| Variant | Lagen | Dim | Hoofden | Grootte | Starttijd |
|---|---|---|---|---|---|
| CTC-300M-CoreML-INT8 (5 s venster) | 24 | 1024 | 16 | 312 MB | Neural Engine |
| CTC-300M-CoreML-INT8 (10 s venster) | 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-gebruik
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
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
// 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
Beide backends produceren in wezen identieke transcripten modulo 1-2 karakters (kwantisering en runtime verschillen). Kies op basis van uw inzetdoel:
| CoreML | MLX | |
|---|---|---|
| Doel berekenen | Neural Engine | Metal GPU |
| Invoerlengte | Vast venster (5 s of 10 s) | Elke lengte tot 40 s |
| Modelmaten | Uitsluitend 300M | 300M / 1B / 3B / 7B |
| Kwantisering | INT8 palettisering | 4-bit of 8-bit QuantizedLinear |
| Runt gelijktijdig met GPU TTS | Ja (ANE is onafhankelijk) | Contents with GPU TTS |
| iOS ondersteuning | iOS 18+ | Alle Apple Silicon iOS |
Voorbewerkingsdetails
Omnilingual vereist een laag-norm op het niveau van de ruwe golfvorm, die overeenkomt met fairseq2 apply_audio_normalization:
normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)
De Swift poort normaliseert de werkelijke audio-inhoud voor nulvulling naar het CoreML vaste venster, dus subvenster-inputs komen exact overeen met referentie-pijpleidingstatistieken. Dit is de meest voorkomende poort-valkuil-... HuggingFace's wav2vec2 implementatie doet groepsnorm per feature, niet uitroeplaag-norm.
De referentiepijplijn dwingt een 40 seconden harde dop (MAX_ALLOWED_AUDIO_SEC) op input audio af. De Swift poort verplicht dezelfde limiet te handhaven . Langere ingangen gooien een duidelijke fout die wijst naar SpeechVAD of ParakeetStreamingASR voor gesegmenteerde verwerking.
Talendekking
Omnilingual ondersteunt 1,672 talen in 32 scripts, waaronder 500+ low-source talen toegevoegd via het verzamelen van communautaire gegevens.
| Script | Talen | Monstercodes |
|---|---|---|
| Latijn | 1,398 | eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, … |
| Arabisch | 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, … |
| Cyrillisch | 51 | rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, … |
| Ethiopisch | 10 | amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, … |
| Bengaals | 8 | ben_Beng, asm_Beng, mni_Beng, … |
| Thais / Lao / Myanmar / Tibetaans | 9 / 1 / 3 / 6 | tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, … |
| Han (vereenvoudigd / traditioneel) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| Japans / Koreaans | 1 / 1 | jpn_Jpan, kor_Hang |
| Armeens, Georgisch, Hebreeuws, Grieks, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, plus 4 meer | 48 | Zie volledige lijst → |
Volledige ISO 639-3 + ISO 15924 codelijst met Engelse namen in de lang_ids.py bron, en gegroepeerd op script met land hints in de modelkaart.
Geverifieerde uitvoer
Transcripts van de Swift poort op de FLEURS benchmark, CoreML 300M:
| Taal | Referentie | Uitvoer |
|---|---|---|
| Engels | Medeworstelaars brachten ook hulde aan Luna. | fellow wrestlers also paid tribute to luna |
| Arabisch | كما أثنى الزملاء المصارعون على لونا | كما أثنى الزملاء المصارعون على لونا |
| Hindi | लूना को साथी पहलवानों ने भी श्रद्धांजलि दी | लूना को साथी पहलवानों ने भी सरधांजलीदी |
| Frans | 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 |
De MLX 300M-4bit variant produceert in wezen identieke uitvoermodus 1-2 tekens. Grotere varianten (1B, 3B, 7B) verminderen de resterende fouten geleidelijk.
Referentie
- Papier: Omnilingual ASR (arXiv 2511.09690)
- Upstream implementatie: facebookonderzoek/omnilingual-asr (Apache 2,0)
- Swift poortbron: speech-swift
- Modelkaart: docs/models/omnilingual-asr.md