Maskinoversettelse · Engelsk original
Omnilingual ASR
Metas Omnilingual ASR er en språk-agnostisk tale gjenkjennelse familie dekker 1,672-språk tvers 32 distinkte skript - den bredeste språkdekningen av alle på-device ASR-modell på Apple Silicon. Soniqo har CTC-varianten til både CoreML (Neural Engine) og MLX(Metal GPU), med fire modellstørrelser fra 300M til 7B-parametre.
I motsetning til Qwen3-ASR eller Parakeet TDT tar Omnilingual CTC ikke et språk-hint på inferenstid - det bruker et delt 10,288-entry-domsdomPiece-ordforråd som spenner over hvert språk som støttes. Passer enhver tale på hvilket som helst språk og modellen produserer det riktige skriptet automatisk.
Lydkanaler, prøvehastighet og inngangsformat
Bruke mono Float32 PCM på 16 kHz. CLI aksepterer vanlige AVFoundation-lesbare filer som WAV, MP3 og M4A samt CAF, og prøver dem automatisk til 16 kHz. For stereo- eller flerkanalsfiler, AudioFileLoader.load gjennomsnitter alle kanaler som standard så tale på hvilken som helst kanal beholdt; bruk channelSelection: .first eller .select([indices]) for eksplisitt rute. For lange opptak, AudioFileLoader.stream gir trekk-drevet, avgrenset minnebiter. Når passerer en [Float] buffer direkte, gi sin faktiske prøvehastighet - CoreML og MLX implementasjoner reprøve internt.
Arkitektur
Omnilingual CTC er en overvåket finpune av Metas wav2vec 2.0 ryggrad med et lineært CTC-hode over et delt flerspråklig ordforråd. Rørledningen er parallelt og ikke-autoregressivt - ett fremover pass per uttalelse, ingen dekodersløyfe.
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]
Ved 16 kHz-inngang, produserer 320×-nedprøvet koder 50 Hz-rammehastighet. Et 10-sekund klipp produserer 499 rammer av logitter. Greedy CTC dekoding kollapser påfølgende dupliserer og hopper over spesielle polletter via SentencePiece-tokenizeren.
Modell Varianter
Ti varianter er publisert under aufklarer navneområde på HuggingFace — to CoreML vindustørrelser pluss åtte MLX kvantiseringskombinasjoner:
| Variant | Lag | Dim | hoder | Størrelse | Runtime |
|---|---|---|---|---|---|
| CTC-300M-CoreML-INT8 (5 s vindu) | 24 | 1024 | 16 | 312 MB | Neural Engine |
| CTC-300M-CoreML-INT8 (10 s vindu) | 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 bruk
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-bakstykke
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 motor
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
Begge motorene produserer i det vesentlige identiske transkripsjoner modulo 1-2 tegn (kvantisering og driftstid forskjeller). Velg basert på utplasseringsmålet ditt:
| CoreML | MLX | |
|---|---|---|
| Beregne målet | Neural Engine | Metal GPU |
| Inngangslengde | Fast vindu (5 s eller 10 s) | Enhver lengde opp til 40 s |
| Modellstørrelser | Kun 300M | 300M / 1B / 3B / 7B |
| Kvantisering | INT8 palettisering | 4-bits eller 8-bits QuantizedLinear |
| Kjører samtidig med GPU TTS | Ja (ANE er uavhengig) | Samtykker med GPU TTS |
| iOS støtte | iOS 18+ | Alle Apple Silicon iOS |
Forbehandlingsdetaljer
Omnilingual krever uttrykksnivå lag-norm på rå bølgeform, som passer fairseq2s apply_audio_normalization:
normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)
Swift porten normaliserer det reelle lydinnholdet før null-fyll til CoreML faste vinduet, så undervindusinnganger matcher referanserørledningsstatistikk nøyaktig. Dette er den vanligste portgraven - HuggingFaces wav2vec2 implementeringen gjør gruppe-norm perfeature, ikke uttrykk lag-norm.
Referanserørledningen håndhever en 40 sekunder lang hard hette (MAX_ALLOWED_AUDIO_SEC) på inngangslyd. Swift-porten håndhever samme grense - lengre innganger kaster en klar feil som peker på SweetVAD eller ParakeetStreamingASR for segmentert behandling.
Språkdekning
Omnilingual støtter 1.672 språk på tvers av 32 skript, inkludert 500+ lavressursspråk som legges til via felles datainnsamling. Sample dekning:
| Skript | Språk | Prøvekoder |
|---|---|---|
| Latin | 1,398 | eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, … |
| Arabisk | 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, … |
| Kyrillisk | 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 / Tibetansk | 9 / 1 / 3 / 6 | tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, … |
| Han (forenklet / tradisjonell) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| Japansk/koreansk | 1 / 1 | jpn_Jpan, kor_Hang |
| armensk, georgisk, hebraisk, gresk, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, pluss 4 flere | 48 | Se hele listen → |
Full ISO 639-3 + ISO 15924-kodeliste med engelske navn i lang_ids.py kilde, og gruppert etter skript med country hints i modelkort.
Bekreftet utgang
Transkripter fra Swift-porten på FLEURS- benchmark, CoreML 300M:
| Språk | Referanse | Utgang |
|---|---|---|
| Engelsk | Fellow brytere betalte også hyllest til Luna. | fellow wrestlers also paid tribute to luna |
| Arabisk | كما أثنى الزملاء المصارعون على لونا | كما أثنى الزملاء المصارعون على لونا |
| Hindi | लूना को साथी पहलवानों ने भी श्रद्धांजलि दी | लूना को साथी पहलवानों ने भी सरधांजलीदी |
| fransk | 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 varianten produserer i hovedsak identiske utgangsmodul 1-2 tegn. Større varianter (1B, 3B, 7B) reduserer gjenværende feil gradvis.
Referanse
- Papir: Omnilingual ASR (arXiv 2511.09690)
- Oppstrøms implementering: facebookresearch/omnilingual-asr (Apache 2.0)
- Swift portkilde: speech-swift
- Modellkort: docs/models/omnilingual-asr.md