Omnilingual ASR

Omnilingual ASR от Meta — это семейство языконезависимого распознавания речи, охватывающее 1 672 языка в 32 различных письменностях — самое широкое языковое покрытие среди всех on-device ASR-моделей на Apple Silicon. Soniqo портирует CTC-вариант как на CoreML (Neural Engine), так и на MLX (Metal GPU) в четырёх размерах от 300M до 7B параметров.

Языконезависимый CTC

В отличие от Qwen3-ASR или Parakeet TDT, Omnilingual CTC не принимает подсказку языка во время инференса — он использует общий SentencePiece-словарь из 10 288 записей, охватывающий все поддерживаемые языки. Подайте любое аудио на любом поддерживаемом языке, и модель автоматически выдаст правильную письменность.

Архитектура

Omnilingual CTC — это supervised fine-tune бэкбона wav2vec 2.0 от Meta с линейной CTC-головой над общим многоязычным словарём. Пайплайн параллельный и неавторегрессивный — один прямой проход на реплику, без цикла декодера.

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 кГц даунсэмплированный в 320 раз encoder выдаёт частоту кадров 50 Гц. 10-секундный клип даёт 499 кадров логитов. Жадное CTC-декодирование сливает подряд идущие дубликаты и пропускает специальные токены через SentencePiece-токенизатор.

Варианты модели

Десять вариантов опубликованы под namespace aufklarer на HuggingFace — два размера CoreML-окна плюс восемь комбинаций квантизации MLX:

ВариантСлоиDimHeadsРазмерRuntime
CTC-300M-CoreML-INT8 (окно 5 с)24102416312 МБNeural Engine
CTC-300M-CoreML-INT8 (окно 10 с)24102416312 МБNeural Engine
CTC-300M-MLX-4bit24102416193 МБMetal GPU
CTC-300M-MLX-8bit24102416342 МБMetal GPU
CTC-1B-MLX-4bit48128020549 МБMetal GPU
CTC-1B-MLX-8bit481280201006 МБMetal GPU
CTC-3B-MLX-4bit602048321.71 ГБMetal GPU
CTC-3B-MLX-8bit602048323.16 ГБMetal GPU
CTC-7B-MLX-4bit1282048323.55 ГБMetal GPU
CTC-7B-MLX-8bit1282048326.63 ГБ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-bit (MLX-вариант по умолчанию)
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx

# 1B @ 4-bit — выше точность
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 1B

# 3B @ 8-bit — приближается к качеству референса
.build/release/audio transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8

# 7B @ 4-bit — крупнейший 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-bit
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 символов (разница в квантизации и runtime). Выбирайте по целевой платформе развёртывания:

CoreMLMLX
Цель вычисленийNeural EngineMetal GPU
Длина входаФиксированное окно (5 с или 10 с)Любая длина до 40 с
Размеры моделиТолько 300M300M / 1B / 3B / 7B
КвантизацияINT8 palettization4-bit или 8-bit QuantizedLinear
Параллельно с GPU-TTSДа (ANE независим)Конкурирует с GPU-TTS
Поддержка iOSiOS 17+Любой Apple Silicon iOS

Детали предобработки

Omnilingual требует layer-norm на уровне реплики для сырой волны, совпадая с apply_audio_normalization из fairseq2:

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

Swift-порт нормализует реальное аудио-содержимое до нулевого дополнения до фиксированного окна CoreML, так что входы меньше окна точно совпадают со статистикой референсного пайплайна. Это самая частая ловушка портирования — реализация wav2vec2 из HuggingFace делает group-norm по признакам, а не layer-norm по реплике.

Референсный пайплайн обеспечивает жёсткий лимит 40 секунд (MAX_ALLOWED_AUDIO_SEC) на входное аудио. Swift-порт обеспечивает тот же лимит — более длинные входы выбрасывают понятную ошибку с указанием на SpeechVAD или ParakeetStreamingASR для сегментированной обработки.

Языковое покрытие

Omnilingual поддерживает 1 672 языка в 32 письменностях, включая 500+ языков с ограниченными ресурсами, добавленных через сбор данных сообществом. Выборка покрытия:

ПисьменностьЯзыкиПримеры кодов
Латиница1 398eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, …
Арабская70arb_Arab, arz_Arab, ary_Arab, arq_Arab, fas_Arab, urd_Arab, ckb_Arab, uig_Arab, …
Деванагари65hin_Deva, mar_Deva, nep_Deva, bho_Deva, mai_Deva, awa_Deva, brx_Deva, …
Кириллица51rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, …
Эфиопская10amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, …
Бенгальская8ben_Beng, asm_Beng, mni_Beng, …
Тайская / Лаосская / Мьянманская / Тибетская9 / 1 / 3 / 6tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, …
Хань (упрощённый / традиционный)6cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, …
Японский / Корейский1 / 1jpn_Jpan, kor_Hang
Армянская, грузинская, еврейская, греческая, гуджарати, гурмукхи, каннада, малаялам, ория, сингальская, тамильская, телугу, тифинаг, тхаана и ещё 448См. полный список →

Полный список кодов ISO 639-3 + ISO 15924 с английскими названиями в исходнике lang_ids.py, и сгруппировано по письменности со страновыми подсказками в карточке модели.

Проверенный вывод

Транскрипты со Swift-порта на бенчмарке FLEURS, 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) постепенно уменьшают остаточные ошибки.

Ссылки