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.

Language-agnostic CTC

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:

VariantLagDim hoder StørrelseRuntime
CTC-300M-CoreML-INT8 (5 s vindu)24102416312 MBNeural Engine
CTC-300M-CoreML-INT8 (10 s vindu)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-8bit128204832 6.63 GBMetal 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:

CoreMLMLX
Beregne måletNeural EngineMetal GPU
InngangslengdeFast vindu (5 s eller 10 s) Enhver lengde opp til 40 s
ModellstørrelserKun 300M300M / 1B / 3B / 7B
KvantiseringINT8 palettisering4-bits eller 8-bits QuantizedLinear
Kjører samtidig med GPU TTSJa (ANE er uavhengig)Samtykker med GPU TTS
iOS støtteiOS 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
Latin1,398eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, …
Arabisk70arb_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, …
Kyrillisk51rus_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 / Tibetansk9 / 1 / 3 / 6tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, …
Han (forenklet / tradisjonell)6cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, …
Japansk/koreansk1 / 1jpn_Jpan, kor_Hang
armensk, georgisk, hebraisk, gresk, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, pluss 4 flere48Se 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åkReferanse Utgang
EngelskFellow brytere betalte også hyllest til Luna.fellow wrestlers also paid tribute to luna
Arabiskكما أثنى الزملاء المصارعون على لوناكما أثنى الزملاء المصارعون على لونا
Hindiलूना को साथी पहलवानों ने भी श्रद्धांजलि दीलूना को साथी पहलवानों ने भी सरधांजलीदी
franskPensez à 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