Traducere automată · Originalul în engleză
Omnilingv ASR
Meta Omnilingual ASR este un limbaj-agnostic vorbire de recunoaștere familia acoperă Limbi 1,672 traversat 32 scripturi distincte bază cea mai largă acoperire lingvistică a oricărui dispozitiv ASR model pe Apple Silicon. Soniqo porturi varianta CTC la ambele CoreML (Neural Engine) și MLX (Metal GPU), cu patru dimensiuni model de la 300De la M la 7 Parametrii B.
Spre deosebire de Qwen3-ASR sau Parakeet TDT, CTC Omnilingual nu ia un indiciu de limbă la ora de deducţie 10,288-introducerea vocabularul SentincePiece se întinde pe fiecare limbă susținută. Trece orice discurs în orice limbă susținută și modelul produce automat script-ul corect.
Canale audio, rata de eșantionare și formatul de intrare
Utilizați PCM mono Float32 la 16 kHz. CLI acceptă fișiere comune de citire AVFoundation, cum ar fi WAV, MP3, M4A, și CAF, apoi le reevaluează 16 kHz automat. Pentru fișiere stereo sau multicanal, AudioFileLoader.load media tuturor canalelor implicit, astfel încât vorbirea pe orice canal este reținut; utilizarea channelSelection: .first sau .select([indices]) pentru rutare explicită. Pentru înregistrări lungi, AudioFileLoader.stream oferă piese de memorie cu comandă de tragere. atunci când trece o [Float] tamponul direct, furnizează rata sa reală de prelevare de probe CoreML şi MLX punerea în aplicare a reeșantionării interne.
Arhitectură
Omnilingual CTC este un fin-tune supravegheat de Meta's wav2vec 2.0 coloana vertebrală cu un cap CTC liniar peste un vocabular multilingv comun. Conducta este paralelă și non-autoregresivă
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]
La intrarea 16 kHz, encodorul de 320× jos produce rata de cadru de 50 Hz. Un clip de 10 secunde produce 499 de cadre de logits. Decodarea CTC lacom se prăbușește duplicate consecutive și sare jetoane speciale prin tokenizerul SentencePiece.
Model Variante
Zece variante sunt publicate sub aufklater namespace on HuggingFace Doi CoreML dimensiuni ferestre plus opt MLX combinaţii de cuantizare:
| Variantă | Straturi | Dim | Capete | Dimensiune | Timp de execuție |
|---|---|---|---|---|---|
| CTC-300M-CoreML-INT8 (5 s fereastră) | 24 | 1024 | 16 | 312 MO | Neural Engine |
| CTC-300M-CoreML-INT8 (10 s window) | 24 | 1024 | 16 | 312 MO | Neural Engine |
| CTC-300M-MLX-4bit | 24 | 1024 | 16 | 193 MO | Metal GPU |
| CTC-300M-MLX-8bit | 24 | 1024 | 16 | 342 MO | Metal GPU |
| CTC-1B-MLX-4bit | 48 | 1280 | 20 | 549 MO | Metal GPU |
| CTC-1B-MLX-8bit | 48 | 1280 | 20 | 1006 MO | 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 |
Utilizarea CLI
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 suport
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)
Platformă MLX
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
Ambele backend-uri produc în esenţă transcrieri identice modulo 1-2 caractere (cantizare şi diferenţe de timp de funcţionare). Alegeţi pe baza ţintei de implementare:
| CoreML | MLX | |
|---|---|---|
| Calculează ținta | Neural Engine | Metal GPU |
| Lungimea de intrare | Fereastra fixă (5 s sau 10 s) | Orice lungime de până la 40 s |
| Dimensiuni modele | Numai 300M | 300 M / 1B / 3B / 7B |
| Cuantificare | INT8 palettizare | 4-bit sau 8-bit QuantizedLinear |
| Rulează concomitent cu GPU TTS | Da (ANE este independent) | Contends with GPU TTS |
| Sprijin iOS | iOS 18+ | Orice Apple Silicon iOS |
Detalii privind preprocesarea
Omnilingv necesită nivel de exprimare-norm pe forma de undă brută, potrivire fairseq2's apply_audio_normalization:
normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)
Portul Swift normalizează conținutul audio real înainte de zero-padding la CoreML fereastra fixă, astfel încât intrările sub-fereastra se potrivesc exact cu statisticile conductei de referință. Aceasta este singura cea mai comună groapă portuară HuggingFace Implementarea lui wav2vec2 face grup-norm per-featură, fără a declara strat-norm.
Conducta de referință aplică un capac dur de 40 de secunde (MAX_ALLOWED_AUDIO_SEC) pe audio de intrare. Portul Swift aplică aceeași limită de intrare mai lungă aruncă o eroare clară care indică SpeechVAD sau ParakeetStreamingASR pentru prelucrarea segmentată.
Acoperirea limbii
Suporturi omnilinguale Limbi 1,672 în scripturi 32, inclusiv limbaje 500+ cu sursă redusă, adăugate prin colectarea datelor comunitare.
| Script | Limbi | Coduri de eșantionare |
|---|---|---|
| Latină | 1,398 | eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, … |
| Arabă | 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, … |
| Chirilică | 51 | rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, … |
| Etiopic | 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 (simplificat / traditional) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| Japoneză / coreeană | 1 / 1 | jpn_Jpan, kor_Hang |
| Armeană, georgiană, ebraică, greacă, gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, plus încă 4 | 48 | Vezi lista completă → |
Lista de coduri completă ISO 639-3 + ISO 15924 cu numele în limba engleză în lang_ids.py sursă și grupate pe script cu indicii de țară în model card.
Rezultat verificat
Transcripții din portul Swift pe portul FLEURS de referință, CoreML 300M:
| Limba | Referință | Ieșire |
|---|---|---|
| Engleză | Prietenii luptători au plătit şi ei tribut lui Luna. | fellow wrestlers also paid tribute to luna |
| Arabă | كما أثنى الزملاء المصارعون على لونا | كما أثنى الزملاء المصارعون على لونا |
| Hindi | लूना को साथी पहलवानों ने भी श्रद्धांजलि दी | लूना को साथी पहलवानों ने भी सरधांजलीदी |
| Franceză | Pensez à l'itinéraire de ski comme à un itineraire de randonnée similaire. | pense à létineraire desqui comme un étineraire de rent donner similaire |
Varianta MLX 300M-4bit produce practic identice cu cele 1-2 caractere de ieșire. Variante mai mari (1B, 3B, 7B) reduc erorile reziduale progresiv.
Referință
- Hîrtie: Omnilingv ASR (arXiv 2511.09690)
- Implementarea în amonte: Cercetarea în domeniul cărții de specialitate/arr-omnilingual (Apache 2.0)
- Swift sursă portuară: speech-swift
- Model de card: docs/modele/omnilingual-asr.md