Maskinoversættelse · Engelsk original
Omnilingual ASR
Meta 's Omnilingual ASR er en sprog- agnostic talegenkendelse familie dækker 1,672 sprog på tværs 32 særskilte scripts - den bredeste sprogdækning af enhver on- enhed ASR model den Apple Silicon. Soniqo sender CTC-varianten til begge CoreML (Neural Engine) og MLX (Metal GPU), med fire modeller størrelser fra 300M til 7B parametre.
I modsætning til Qwen3-ASR eller Parakeet TDT, tager Omnilingual CTC ikke et sprogvink på inferens tid - det bruger en delt 10,288- entry SentencePiece ordforråd, der spænder over alle understøttede sprog.
Lydkanaler, samplingfrekvens og inputformat
Brug mono Float32 PCM på 16 kHz. CLI accepterer almindelige AVFoundation- læsbare filer såsom WAV, MP3 og M4A samt CAF, derefter resamples dem til 16 kHz automatisk. AudioFileLoader.load gennemsnit alle kanaler som standard, så tale på enhver kanal er bevaret; brug channelSelection: .first eller .select([indices]) for eksplicitte ruter. AudioFileLoader.stream giver pull- drevne, hoppet-memory stykker. [Float] buffer direkte, give sin faktiske stikprøve rate - CoreML og MLX implementeringer genample internt.
Arkitektur
Omnilingual CTC er en overvåget fine- tune af Meta 's wav2vec 2.0 rygrad med en lineær CTC hoved over et delt flersproget ordforråd. Rørledningen er parallel og ikke-auto-regressive - en fremadrettet pass per ytterance, ingen dekoder 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]
Ved 16 kHz input producerer 320 × downsamples encoder 50 Hz frame rate. En 10-sekunders klip producerer 499 rammer logits. Greedy CTC dekodning kollapser på hinanden følgende duplikater og springer specielle tokens via SentenePiece Requizer.
Model Variants
Der offentliggøres ti varianter i henhold til unit synonyms for matching user input namespace på HuggingFace - to CoreML vinduesstørrelser plus otte MLX kvantificeringskombinationer:
| Variant | Lag | Dim | Hoveder | Størrelse | Løbetid |
|---|---|---|---|---|---|
| CTC-300M-CoreML-INT8 (5 s vindue) | 24 | 1024 | 16 | 312 MB | Neural Engine |
| CTC-300M-CoreML-INT8 (10 s vindue) | 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-brug
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-motor
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 backends producere stort set identiske transskripter modulo 1-2 tegn (kvantisering og runtime forskelle). Vælg baseret på din implementering mål:
| CoreML | MLX | |
|---|---|---|
| Beregn mål | Neural Engine | Metal GPU |
| Inputlængde | Fast vindue (5 s eller 10 s) | Enhver længde op til 40 s |
| Standardstørrelser | Kun 300M | 300M / 1B / 3B / 7B |
| Kvantificering | INT8 palætisering | 4- bit eller 8-bit QuantizedLinear |
| Kører samtidig med GPU TTS | Ja (ANE er uafhængig) | Påstår med GPU TTS |
| iOS støtte | iOS 18+ | Enhver Apple Silicon iOS |
Forbehandling af oplysninger
Omnilingual kræver uterance- niveau layer- normen på rå kurveform, matchende fairseq2 'er apply_audio_normalization:
normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)
Swift porten normaliserer det virkelige lydindhold før zero- polstring til CoreML fast vindue, så undervinduesindgange matcher referencerørledningsstatistik nøjagtigt. Dette er den mest almindelige havnefaldgrube - HuggingFace's wav2vec2 implementering er gruppe- normen per- feature, ikke ytter- normen.
Referencerørledningen gennemtvinger en 40- anden hård hætte (MAX_ALLOWED_AUDIO_SEC) på input audio. Swift port håndhæver den samme grænse - længere indgange kaster en klar fejl peger på SpeechVAD eller ParakeetStreamingASR for segmenteret forarbejdning.
Sprogdækning
Omnillingual support 1,672 sprog på tværs af 32 scripts, herunder 500+ lavressourcesprog tilføjet via community dataindsamling. Stikprøvedækning:
| Script | Sprog | Stikprøvekoder |
|---|---|---|
| LatinName | 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 / traditionel) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| Japansk / koreansk | 1 / 1 | jpn_Jpan, kor_Hang |
| Armensk, georgisk, hebraisk, græsk, Gujarati, Gurmukhi, Kannada, malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, plus 4 mere | 48 | Se fuld liste → |
Fuld ISO 639-3 + ISO 15924 kodeliste med engelske navne i lang_ids.py kilde, og grupperet efter script med land hints i modelkort.
Verificeret output
Udskrifter fra Swift havn på FLEURS benchmark, CoreML 300M:
| Sprog | Reference | Output |
|---|---|---|
| Engelsk | Kollektive brydere har også hyldet Luna. | fellow wrestlers also paid tribute to luna |
| Arabisk | كما أثنى الزملاء المصارعون على لونا | كما أثنى الزملاء المصارعون على لونا |
| Hindi | लूना को साथी पहलवानों ने भी श्रद्धांजलि दी | लूना को साथी पहलवानों ने भी सरधांजलीदी |
| Fransk | Pensez à l 'itinéraire de ski comme à un itinéracire de randonnée similaire. | pense à létineraire desqui comme un étineraire de rent donner similaire |
Den MLX 300M-4bit variant producerer stort set identiske output modulo 1-2 tegn. Større varianter (1B 3B 7B) reducere resterende fejl gradvist.
Reference
- Papir: Omnilingual ASR (arXiv 2511.09690)
- Implementering på forhånd: facebookforskning / flersproget- asr (Apache 2.0)
- Swift portkilde: speech-swift / Kilder / OmnilingualASR
- Model kort: docs / model / alningual- asr.md