Omnilingual ASR

O Omnilingual ASR da Meta e uma familia de reconhecimento de fala agnostica de idioma cobrindo 1.672 idiomas em 32 escritas distintas — a cobertura de idiomas mais ampla de qualquer modelo ASR no dispositivo em Apple Silicon. O Soniqo porta a variante CTC para CoreML (Neural Engine) e MLX (GPU Metal), com quatro tamanhos de modelo de 300M a 7B parametros.

CTC agnostico de idioma

Diferentemente do Qwen3-ASR ou Parakeet TDT, o Omnilingual CTC nao aceita um language hint em tempo de inferencia — ele usa um vocabulario SentencePiece compartilhado de 10.288 entradas abrangendo todos os idiomas suportados. Passe qualquer audio em qualquer idioma suportado e o modelo produz a escrita correta automaticamente.

Arquitetura

Omnilingual CTC e um fine-tune supervisionado do backbone wav2vec 2.0 da Meta com uma cabeca linear CTC sobre um vocabulario multilingue compartilhado. O pipeline e paralelo e nao autoregressivo — um forward pass por enunciado, sem loop de decodificador.

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]

Com entrada de 16 kHz, o codificador com downsample de 320x produz frame rate de 50 Hz. Um clipe de 10 segundos produz 499 frames de logits. A decodificacao greedy CTC colapsa duplicatas consecutivas e pula tokens especiais via o tokenizer SentencePiece.

Variantes do modelo

Dez variantes sao publicadas sob o namespace aufklarer no HuggingFace — dois tamanhos de janela CoreML mais oito combinacoes de quantizacao MLX:

VarianteCamadasDimHeadsTamanhoRuntime
CTC-300M-CoreML-INT8 (janela 5 s)24102416312 MBNeural Engine
CTC-300M-CoreML-INT8 (janela 10 s)24102416312 MBNeural Engine
CTC-300M-MLX-4bit24102416193 MBGPU Metal
CTC-300M-MLX-8bit24102416342 MBGPU Metal
CTC-1B-MLX-4bit48128020549 MBGPU Metal
CTC-1B-MLX-8bit481280201006 MBGPU Metal
CTC-3B-MLX-4bit602048321.71 GBGPU Metal
CTC-3B-MLX-8bit602048323.16 GBGPU Metal
CTC-7B-MLX-4bit1282048323.55 GBGPU Metal
CTC-7B-MLX-8bit1282048326.63 GBGPU Metal

Uso do CLI

CoreML (Neural Engine)

# 10 s window (default)
.build/release/audio transcribe recording.wav --engine omnilingual

# 5 s window (lower memory, faster cold start)
.build/release/audio transcribe recording.wav --engine omnilingual --window 5

MLX (GPU Metal)

# 300M @ 4-bit (default MLX variant)
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx

# 1B @ 4-bit — higher accuracy
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 1B

# 3B @ 8-bit — approaching reference quality
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8

# 7B @ 4-bit — largest CTC variant, best accuracy
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 7B

API Swift

Backend 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)

Backend 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

Ambos os backends produzem transcricoes essencialmente identicas modulo 1-2 caracteres (diferencas de quantizacao e runtime). Escolha com base no seu alvo de implantacao:

CoreMLMLX
Alvo de computacaoNeural EngineGPU Metal
Comprimento de entradaJanela fixa (5 s ou 10 s)Qualquer comprimento ate 40 s
Tamanhos de modeloSomente 300M300M / 1B / 3B / 7B
QuantizacaoPalletizacao INT8QuantizedLinear 4-bit ou 8-bit
Roda em paralelo com TTS na GPUSim (ANE e independente)Disputa com TTS na GPU
Suporte iOSiOS 17+Qualquer iOS em Apple Silicon

Detalhes de pre-processamento

O Omnilingual requer layer-norm por enunciado na waveform bruta, correspondendo ao apply_audio_normalization do fairseq2:

normalized = (audio - mean(audio)) / sqrt(variance(audio) + 1e-5)

A porta Swift normaliza o conteudo real de audio antes do zero-padding para a janela fixa CoreML, entao entradas sub-janela correspondem exatamente as estatisticas do pipeline de referencia. Esta e a armadilha mais comum de porta — a implementacao wav2vec2 do HuggingFace faz group-norm por feature, nao layer-norm por enunciado.

O pipeline de referencia aplica um limite rigido de 40 segundos (MAX_ALLOWED_AUDIO_SEC) no audio de entrada. A porta Swift aplica o mesmo limite — entradas mais longas lancam um erro claro apontando para SpeechVAD ou ParakeetStreamingASR para processamento segmentado.

Cobertura de idiomas

O Omnilingual suporta 1.672 idiomas em 32 escritas, incluindo mais de 500 idiomas de baixos recursos adicionados via coleta de dados comunitaria. Cobertura de amostra:

EscritaIdiomasCodigos de exemplo
Latim1.398eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, …
Arabe70arb_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, …
Cirilico51rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, …
Etiopico10amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, …
Bengali8ben_Beng, asm_Beng, mni_Beng, …
Tailandes / Lao / Mianmar / Tibetano9 / 1 / 3 / 6tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, …
Han (simplificado / tradicional)6cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, …
Japones / Coreano1 / 1jpn_Jpan, kor_Hang
Armenio, Georgiano, Hebraico, Grego, Gujarati, Gurmukhi, Kannada, Malaiala, Oriya, Sinhala, Tamil, Telugu, Tifinagh, Thaana, mais 448Veja lista completa →

Lista completa de codigos ISO 639-3 + ISO 15924 com nomes em ingles no codigo-fonte lang_ids.py, e agrupada por escrita com dicas de pais no model card.

Saida verificada

Transcricoes da porta Swift no benchmark FLEURS, CoreML 300M:

IdiomaReferenciaSaida
InglesFellow wrestlers also paid tribute to Luna.fellow wrestlers also paid tribute to luna
Arabeكما أثنى الزملاء المصارعون على لوناكما أثنى الزملاء المصارعون على لونا
Hindiलूना को साथी पहलवानों ने भी श्रद्धांजलि दीलूना को साथी पहलवानों ने भी सरधांजलीदी
FrancesPensez à l'itinéraire de ski comme à un itinéraire de randonnée similaire.pense à létineraire desqui comme un étineraire de rent donner similaire

A variante MLX 300M-4bit produz saida essencialmente identica modulo 1-2 caracteres. Variantes maiores (1B, 3B, 7B) reduzem erros residuais progressivamente.

Referencia