Maskinöversättning · Engelskt original
Omnilingual ASR
Meta's Omnilingual ASR är en språk-agnostisk tal erkännande familj som täcker 1,672 språk tvärs över 32 distinkta skript - den bredaste språktäckningen av alla på-enheter ASR Modell på Apple Silicon. Soniqo portar CTC-varianten till båda CoreML (Neural Engine) och MLX (Metal GPUmed fyra modellstorlekar från 300M till 7B-parametrar.
Till skillnad från Qwen3-ASR eller Parakeet TDT, Omnilingual CTC tar inte ett språk antydning vid inferenstid - det använder en delad 10,288-entry SentencePiece vokabulär som spänner över varje språk som stöds. Passera alla tal på något stöds språk och modellen producerar korrekt skript automatiskt.
Audio-kanaler, provfrekvens och inmatningsformat
Använd mono Float32 PCM på 16 kHz. CLI accepterar vanliga AVFoundation-läsbara filer som WAV, MP3, M4A, och CAF, sedan återföring dem till 16 kHz automatiskt. För stereo- eller flerkanalsfiler, AudioFileLoader.load i genomsnitt alla kanaler som standard så att tal på någon kanal behålls; användning channelSelection: .first eller .select([indices]) för explicit routing. För långa inspelningar, AudioFileLoader.stream ger pull-driven, gränsade minnes bitar. När du passerar en [Float] buffert direkt, ge sin faktiska provfrekvens - CoreML och MLX implementerar återförsäljning internt.
Arkitektur
Omnilingual CTC är en övervakad finjustering av Metas wav2vec 2,0 ryggrad med ett linjärt CTC-huvud över ett delat flerspråkigt ordförråd. Pipeline är parallellt och icke-autoregressivt - ett framåt pass per utterance, ingen avkodare 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]
Vid 16 kHz-ingång producerar 320 × nedsampled encoder 50 Hz-ramfrekvensen. Ett 10-sekundersklipp producerar 499 ramar av logiter. Greedy CTC-avkodning kollapsar på varandra följande dubbletter och hoppar över specialtokens via SentencePiece-tokenizern.
Modellvarianter
Tio varianter publiceras under aufklarer namnrymden på HuggingFace -- två CoreML fönsterstorlekar plus åtta MLX kvantiseringskombinationer:
| Variant | Layers | Dim | Heads | Storlek | Runtime |
|---|---|---|---|---|---|
| CTC-300M-CoreML-INT8 (5 s fönster) | 24 | 1024 | 16 | 312 MB | Neural Engine |
| CTC-300M-CoreML-INT8 (10 s fönster) | 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 Användning
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
Båda backends producerar i huvudsak identiska transkript modulo 1-2 tecken (kvantisering och körtidsskillnader). Välj baserat på ditt distributionsmål:
| CoreML | MLX | |
|---|---|---|
| Beräkningsmål | Neural Engine | Metal GPU |
| Input längd | Fast fönster (5 s eller 10 s) | Varje längd upp till 40 s |
| Modellstorlekar | 300M endast | 300M / 1B / 3B / 7B |
| Kvantisering | INT8 palettisering | 4-bitars eller 8-bit QuantizedLinear |
| Körs samtidigt med GPU TTS | Ja (ANE är oberoende) | Tävlar med GPU TTS |
| iOS stöd | iOS 18+ | Alla Apple Silicon iOS |
Förbereda detaljer
Omnilingual kräver yttrande-nivå lager-norm på råvågformen, matchande fairseq2 apply_audio_normalization:
normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)
Den Swift porten normaliserar det verkliga ljudinnehållet före noll-padding till CoreML fasta fönstret, så sub-window ingångar matchar referenspipeline statistik exakt. Detta är den enskilt vanligaste porten fallgropen - HuggingFace wav2vec2
Referenspipeline genomdriver en 40-sekunders hård lock (MAX_ALLOWED_AUDIO_SEC) på ingångsljud. Swift porten genomdriver samma gräns - längre ingångar kastar ett tydligt fel pekar på SpeechVAD eller ParakeetStreamingASR för segmenterad bearbetning.
Språktäckning
Omnilingual stöder 1,672 språk över 32 skript, inklusive 500+ lågresursspråk som läggs till via gemenskapsdatainsamling.
| Skriften | Språk | Provkoder |
|---|---|---|
| Latin Latin Latin Latin | 1,398 | eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, … |
| Arabiska arabiska | 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, … |
| Cyrillic | 51 | rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, … |
| Etiopisk | 10 | amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, … |
| Bengali | 8 | ben_Beng, asm_Beng, mni_Beng, … |
| Thai / Lao / Myanmar / Tibetan | 9 / 1 / 3 / 6 | tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, … |
| Han (förenklad / traditionell) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| Japanska / koreanska | 1 / 1 | jpn_Jpan, kor_Hang |
| Armeniska, georgiska, hebreiska, grekiska, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thana, plus 4 mer | 48 | Se fullständig lista |
Full ISO 639-3 + ISO 15924 kodlista med engelska namn i lang_ids.py källa och grupperas med skript med land tips i modellkortet .
Verifierad output
Transkript från Swift-porten på FLEURS benchmark, CoreML 300M:
| Språkspråk | Referens | Output |
|---|---|---|
| Engelska engelska engelska | Fellow wrestlers betalade också hyllning till Luna. | fellow wrestlers also paid tribute to luna |
| Arabiska arabiska | كما أثنى الزملاء المصارعون على لونا | كما أثنى الزملاء المصارعون على لونا |
| Hindi | लूना को साथी पहलवानों ने भी श्रद्धांजलि दी | लूना को साथी पहलवानों ने भी सरधांजलीदी |
| Franska franska | 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 |
MLX 300M-4bit variant producerar i huvudsak identiska utgångsmodul 1-2 tecken. Större varianter (1B, 3B, 7B) minskar restfel successivt.
Referens
- Papper: Omnilingual ASR (arXiv 2511.09690)
- Uppströms implementering: facebookresearch/omnilingual-asr (Apache 2.0)
- Swift portkälla: speech-swift/Källor/OmnilingualASR
- Modellkort: docs/models/omnilingual-asr.md