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.

Språk-agnostiska CTC

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:

VariantLayersDimHeadsStorlekRuntime
CTC-300M-CoreML-INT8 (5 s fönster)24102416312 MBNeural Engine
CTC-300M-CoreML-INT8 (10 s fönster)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 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:

CoreMLMLX
BeräkningsmålNeural EngineMetal GPU
Input längdFast fönster (5 s eller 10 s)Varje längd upp till 40 s
Modellstorlekar300M endast300M / 1B / 3B / 7B
KvantiseringINT8 palettisering4-bitars eller 8-bit QuantizedLinear
Körs samtidigt med GPU TTSJa (ANE är oberoende)Tävlar med GPU TTS
iOS stödiOS 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.

SkriftenSpråkProvkoder
Latin Latin Latin Latin1,398eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, …
Arabiska arabiska70arb_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, …
Cyrillic51rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, …
Etiopisk10amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, …
Bengali8ben_Beng, asm_Beng, mni_Beng, …
Thai / Lao / Myanmar / Tibetan9 / 1 / 3 / 6tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, …
Han (förenklad / traditionell)6cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, …
Japanska / koreanska1 / 1jpn_Jpan, kor_Hang
Armeniska, georgiska, hebreiska, grekiska, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thana, plus 4 mer48Se 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åkReferensOutput
Engelska engelska engelskaFellow wrestlers betalade också hyllning till Luna.fellow wrestlers also paid tribute to luna
Arabiska arabiskaكما أثنى الزملاء المصارعون على لوناكما أثنى الزملاء المصارعون على لونا
Hindiलूना को साथी पहलवानों ने भी श्रद्धांजलि दीलूना को साथी पहलवानों ने भी सरधांजलीदी
Franska franskaPensez à 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