Omnilingual ASR

Meta의 Omnilingual ASR은 32개의 서로 다른 문자 체계에 걸쳐 1,672개 언어를 다루는 언어 무관 음성 인식 제품군이며, Apple Silicon에서 어떤 온디바이스 ASR 모델보다도 가장 광범위한 언어 지원을 제공합니다. Soniqo는 CTC 변형을 CoreML(Neural Engine)과 MLX(Metal GPU) 양쪽으로 포팅했으며, 300M에서 7B 파라미터까지 네 가지 모델 크기로 제공합니다.

언어 무관 CTC

Qwen3-ASR이나 Parakeet TDT와 달리 Omnilingual CTC는 추론 시 언어 힌트를 받지 않습니다 — 모든 지원 언어를 아우르는 공유 10,288 엔트리 SentencePiece 어휘를 사용합니다. 지원되는 언어의 어떤 오디오든 전달하면 모델이 올바른 문자 체계를 자동으로 생성합니다.

아키텍처

Omnilingual CTC는 공유 다언어 어휘에 대한 선형 CTC 헤드와 함께 Meta의 wav2vec 2.0 백본에 대한 지도 방식 미세 조정입니다. 파이프라인은 병렬이며 비자기회귀입니다 — 발화당 한 번의 순방향 패스, 디코더 루프가 없습니다.

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]

16 kHz 입력에서 320× 다운샘플된 인코더는 50 Hz 프레임 속도를 생성합니다. 10초 클립은 499 프레임의 logits를 생성합니다. greedy CTC 디코딩은 연속 중복을 축소하고 SentencePiece 토크나이저를 통해 특수 토큰을 건너뜁니다.

모델 변형

HuggingFace의 aufklarer 네임스페이스 아래 10개 변형이 공개되어 있습니다 — CoreML 윈도 크기 두 개와 MLX 양자화 조합 여덟 개:

변형레이어차원헤드크기런타임
CTC-300M-CoreML-INT8 (5초 윈도)24102416312 MBNeural Engine
CTC-300M-CoreML-INT8 (10초 윈도)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-8bit1282048326.63 GBMetal GPU

CLI 사용법

CoreML (Neural Engine)

# 10초 윈도 (기본)
.build/release/audio transcribe recording.wav --engine omnilingual

# 5초 윈도 (메모리 절감, 더 빠른 콜드 스타트)
.build/release/audio transcribe recording.wav --engine omnilingual --window 5

MLX (Metal GPU)

# 300M @ 4비트 (MLX 기본 변형)
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx

# 1B @ 4비트 — 더 높은 정확도
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 1B

# 3B @ 8비트 — 레퍼런스 품질에 근접
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8

# 7B @ 4비트 — 가장 큰 CTC 변형, 최고 정확도
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 7B

Swift API

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)

MLX 백엔드

import OmnilingualASR

// 기본: 300M @ 4비트
let model = try await OmnilingualASRMLXModel.fromPretrained()

// 더 큰 변형
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 대 MLX

두 백엔드는 본질적으로 1-2 문자 차이(양자화와 런타임 차이)를 제외하고는 동일한 전사를 생성합니다. 배포 타겟에 따라 선택하세요:

CoreMLMLX
연산 타겟Neural EngineMetal GPU
입력 길이고정 윈도 (5초 또는 10초)최대 40초까지 임의 길이
모델 크기300M만300M / 1B / 3B / 7B
양자화INT8 팔레타이즈4비트 또는 8비트 QuantizedLinear
GPU TTS와 동시 실행예 (ANE는 독립적)GPU TTS와 경합
iOS 지원iOS 17+Apple Silicon iOS 전반

전처리 세부 사항

Omnilingual은 원시 파형에 대해 발화 단위 layer-norm을 요구하며, 이는 fairseq2의 apply_audio_normalization와 일치합니다:

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

Swift 포트는 CoreML 고정 윈도로 제로 패딩하기 전에 실제 오디오 내용을 정규화하므로, 서브 윈도 입력이 레퍼런스 파이프라인 통계와 정확히 일치합니다. 이것이 가장 흔한 포팅 함정입니다 — HuggingFace의 wav2vec2 구현은 발화 layer-norm이 아니라 피처별 group-norm을 수행합니다.

레퍼런스 파이프라인은 입력 오디오에 40초 하드 캡(MAX_ALLOWED_AUDIO_SEC)을 강제합니다. Swift 포트도 동일한 한계를 강제합니다 — 더 긴 입력은 SpeechVAD 또는 ParakeetStreamingASR로 분할 처리를 안내하는 명확한 오류를 던집니다.

언어 지원

Omnilingual은 32개 문자 체계에 걸쳐 1,672개 언어를 지원하며, 커뮤니티 데이터 수집을 통해 추가된 500개 이상의 저자원 언어를 포함합니다. 일부 샘플 범위:

문자 체계언어샘플 코드
Latin1,398eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, …
Arabic70arb_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, …
Cyrillic51rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, …
Ethiopic10amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, …
Bengali8ben_Beng, asm_Beng, mni_Beng, …
Thai / Lao / Myanmar / Tibetan9 / 1 / 3 / 6tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, …
Han (간체 / 번체)6cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, …
일본어 / 한국어1 / 1jpn_Jpan, kor_Hang
아르메니아어, 조지아어, 히브리어, 그리스어, 구자라트어, 구르무키, 칸나다어, 말라얄람어, 오리야어, 신할라어, 타밀어, 텔루구어, Tifinagh, Thaana, 외 4개48전체 목록 참조 →

영어 이름이 포함된 전체 ISO 639-3 + ISO 15924 코드 목록은 lang_ids.py 소스에 있으며, 국가 힌트가 포함된 문자 체계별 그룹은 모델 카드에 있습니다.

검증된 출력

FLEURS 벤치마크에서 Swift 포트의 전사, CoreML 300M:

언어레퍼런스출력
영어Fellow wrestlers also paid tribute to Luna.fellow wrestlers also paid tribute to luna
아랍어كما أثنى الزملاء المصارعون على لوناكما أثنى الزملاء المصارعون على لونا
힌디어लूना को साथी पहलवानों ने भी श्रद्धांजलि दीलूना को साथी पहलवानों ने भी सरधांजलीदी
프랑스어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

MLX 300M-4bit 변형은 1-2 문자 차이를 제외하면 본질적으로 동일한 출력을 생성합니다. 더 큰 변형(1B, 3B, 7B)은 잔여 오류를 점진적으로 줄입니다.

레퍼런스