Tłumaczenie automatyczne · Oryginał angielski
Wszechjęzyczny ASR
Meta. Wszechjęzyczny ASR jest języko- agnostyczne rozpoznawanie mowy rodziny pokrycie Języki 1,672 wzdłuż 32 różne skrypty - najszerszy zakres językowy dowolnego urządzenia ASR model na Apple Silicon. Soniqo wprowadza wariant CTC do obu CoreML (Neural Engine) oraz MLX (Metal GPU), z czterema rozmiarami modelu z 300M do 7Parametry B.
W przeciwieństwie do Qwen3-ASR lub Parakeet TDT, Omnillingual CTC nie przyjmuje podpowiedzi językowej w czasie składania wniosków - używa wspólnego słownictwa 10,288- entry SentencePiece, rozchodzącego się po każdym obsługiwanym języku. Przekazywać wszelkie mowy w dowolnym obsługiwanym języku, a model automatycznie tworzy poprawny skrypt.
Kanały audio, częstotliwość próbkowania i format wejściowy
Używać mono Float32 PCM w 16 kHz. CLI akceptuje wspólne pliki do odczytu AVFoundation- dating, takie jak WAV, MP3 i M4A oraz CAF, a następnie automatycznie przetwarza je na 16 kHz. Dla plików stereo lub wielkanałowych, AudioFileLoader.load średnia wartość wszystkich kanałów domyślnie, więc mowa na każdym kanale jest zachowana; channelSelection: .first lub .select([indices]) dla wyraźnego routingu. Dla długich nagrań, AudioFileLoader.stream zapewnia pull- napędzane, odbite-pamięci fragmentów. [Float] bufor bezpośrednio, podać jego rzeczywistą częstotliwość próbkowania - implementacje CoreML i MLX ponownie wewnętrznie.
Architektura
Omnillingual CTC jest nadzorowaną finestracją wav2vec Meta 2.0 kręgosłup z liniową głowicą CTC nad wspólnym wielojęzycznym słownictwem. Gazociąg jest równoległy i nie-autoregresywny - jeden przełęcz do przodu na wymowę, bez pętli dekodera.
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]
Przy wejściu 16 kHz koder 320 × w dół tworzy szybkość ramową 50 Hz. 10-sekundowy klip wytwarza 499 ramek logarytmów. Chciwe dekodowanie CTC zapada kolejne duplikaty i pomija specjalne żetony za pomocą tokenizera SentencePiece.
Warianty modelu
Dziesięć wariantów są publikowane w ramach aufklarer przestrzeń nazw na HuggingFace - dwa rozmiary okien CoreML plus osiem kombinacji kwantyfikacji MLX:
| Wariant | Warstwy | Dim | Orzeł | Rozmiar | Czas działania |
|---|---|---|---|---|---|
| CTC-300M-CoreML-INT8 (okno 5) | 24 | 1024 | 16 | 312 MB | Neural Engine |
| CTC-300M-CoreML-INT8 (okno 10) | 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 |
Zastosowanie 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
Wtyczka CoreML
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)
Wtyczka 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
Oba tła produkują zasadniczo identyczne transkrypcje modulo 1-2 znaków (kwantyfikacja i różnice w czasie biegu). Wybierz na podstawie celu rozmieszczenia:
| CoreML | MLX | |
|---|---|---|
| Oblicz cel | Neural Engine | Metal GPU |
| Długość wejścia | Okno stałe (5 s lub 10 s) | Długość do 40 s |
| Rozmiary modelu | Wyłącznie 300M | 300M / 1B / 3B / 7B |
| Ilość | Paletyzacja INT8 | 4- bit lub 8-bit QuantizedLinear |
| Działa jednocześnie z GPU TTS | Tak (ANE jest niezależna) | Podtrzymuje za pomocą GPU TTS |
| Obsługa iOS | iOS 18+ | Każdy Apple Silicon iOS |
Szczegóły dotyczące wstępnego przetwarzania
Wszechjęzyczny wymaga wymownego poziomu layer- norma na surowej formie fali, dopasowanie fairseq2 apply_audio_normalization:
normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)
Port Swift normalizuje rzeczywistą zawartość dźwięku przed zero- patting do stałego okna CoreML, więc wejścia podokienne pasują dokładnie do danych statystycznych dotyczących rurociągu odniesienia. Jest to jeden z najczęstszych pułapek portowych - implementacja wav2vec2 przez HuggingFace wykonuje funkcję group- norma per- funkcja, a nie utterance layer- norma.
Rurociąg referencyjny 40- druga twarda nasadka (MAX_ALLOWED_AUDIO_SEC) na wejściu audio. Port Swift wymusza ten sam limit - dłuższe wejścia rzucają wyraźny błąd wskazujący na Przemówienie lub ParakeetStreamingASR do przetwarzania segmentowego.
Pokrycie językowe
Wsporniki wszechjęzyczne Języki 1,672 w różnych skryptach 32, w tym w językach niskozasobowych 500+ dodanych poprzez zbieranie danych społeczności.
| Skrypt | Języki | Kody próbek |
|---|---|---|
| Łaciński | 1,398 | eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, … |
| Arabski | 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, … |
| Cyrylica | 51 | rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, … |
| Etiopia | 10 | amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, … |
| BengalCity in Germany | 8 | ben_Beng, asm_Beng, mni_Beng, … |
| Tajski / Lao / Myanmar / Tybetański | 9 / 1 / 3 / 6 | tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, … |
| Han (uproszczony / tradycyjny) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| Japoński / Koreański | 1 / 1 | jpn_Jpan, kor_Hang |
| Ormianin, Gruzini, Hebrajski, Grecki, Gujarati, Gurmukhi, Kannada, Malayalam, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, plus 4 więcej | 48 | Patrz pełna lista → |
Pełny ISO 639-3 + ISO 15924 lista kodów z angielskimi nazwami w lang_ids.py źródła, i zgrupowane według skryptu z podpowiedzi kraju w karta modelowa.
Zweryfikowane wyjście
Transkrypty z portu Swift na FLEURS benchmark, CoreML 300M:
| Język | Próbka referencyjna | Wyjście |
|---|---|---|
| Angielski | Koledzy zapaśnicy również oddali hołd Lunie. | fellow wrestlers also paid tribute to luna |
| Arabski | كما أثنى الزملاء المصارعون على لونا | كما أثنى الزملاء المصارعون على لونا |
| Hindi | लूना को साथी पहलवानों ने भी श्रद्धांजलि दी | लूना को साथी पहलवानों ने भी सरधांजलीदी |
| Francuski | 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 |
W MLX 300M-4wariant bitowy produkuje zasadniczo identyczne modulo wyjściowe 1-2 znaki. Większe warianty (1B, 3B, 7B) stopniowe zmniejszanie błędów resztowych.
Próbka referencyjna
- Papier: ASR (arXiv 2511.09690)
- Wdrożenie w górę rzeki: facebookresearch / omnilingual-asr (Apache 2.0)
- Źródło portu Swift: speech-swift / Źródła / OmnilingualaASR
- Wzór karty: docs / models / omnilingual- asr.md