Omnilingual ASR
Meta의 Omnilingual ASR은 32개의 서로 다른 문자 체계에 걸쳐 1,672개 언어를 다루는 언어 무관 음성 인식 제품군이며, Apple Silicon에서 어떤 온디바이스 ASR 모델보다도 가장 광범위한 언어 지원을 제공합니다. Soniqo는 CTC 변형을 CoreML(Neural Engine)과 MLX(Metal GPU) 양쪽으로 포팅했으며, 300M에서 7B 파라미터까지 네 가지 모델 크기로 제공합니다.
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초 윈도) | 24 | 1024 | 16 | 312 MB | Neural Engine |
| CTC-300M-CoreML-INT8 (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 |
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 문자 차이(양자화와 런타임 차이)를 제외하고는 동일한 전사를 생성합니다. 배포 타겟에 따라 선택하세요:
| CoreML | MLX | |
|---|---|---|
| 연산 타겟 | Neural Engine | Metal 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개 이상의 저자원 언어를 포함합니다. 일부 샘플 범위:
| 문자 체계 | 언어 | 샘플 코드 |
|---|---|---|
| Latin | 1,398 | eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, … |
| Arabic | 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, … |
| Cyrillic | 51 | rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, … |
| Ethiopic | 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 (간체 / 번체) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| 일본어 / 한국어 | 1 / 1 | jpn_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)은 잔여 오류를 점진적으로 줄입니다.
레퍼런스
- 논문: Omnilingual ASR (arXiv 2511.09690)
- 업스트림 구현: facebookresearch/omnilingual-asr (Apache 2.0)
- Swift 포트 소스: speech-swift/Sources/OmnilingualASR
- 모델 카드: docs/models/omnilingual-asr.md