Omnilingual ASR

MetaのOmnilingual ASRは、32の異なる文字体系にわたる1,672言語をカバーする言語非依存の音声認識ファミリーです — Apple Silicon上のオンデバイスASRモデルの中で最も広い言語カバレッジ。SoniqoはCTCバリアントをCoreML(Neural Engine)とMLX(Metal GPU)の両方に移植し、300Mから7Bパラメーターまでの4つのモデルサイズを提供します。

言語非依存のCTC

Qwen3-ASRやParakeet TDTとは異なり、Omnilingual CTCは推論時に言語ヒントを取りません — すべてのサポート言語にまたがる共有10,288エントリのSentencePiece語彙を使用します。サポートされている任意の言語の音声を渡すと、モデルは自動的に正しい文字体系を生成します。

アーキテクチャ

Omnilingual CTCは、共有多言語語彙上の線形CTCヘッドを備えたMetaのwav2vec 2.0バックボーンの教師ありファインチューンです。パイプラインは並列かつ非自己回帰で — 発話あたり1つのフォワードパス、デコーダーループなし。

raw audio [1, samples]
  → wav2vec2 特徴抽出器 (7ストライドCNNレイヤー、×320ダウンサンプル)
  → 重み正規化Conv1d位置エンコーダー
  → N × プレノルムTransformerエンコーダーレイヤー
  → 最終レイヤーノルム
  → 線形CTCヘッド → logits [1, T, 10288]

16 kHz入力で、320×ダウンサンプルされたエンコーダーは50 Hzフレームレートを生成します。10秒のクリップは499フレームのロジットを生成します。グリーディCTCデコーディングは連続する重複を折りたたみ、SentencePieceトークナイザーで特殊トークンをスキップします。

モデルバリアント

HuggingFace上のaufklarer名前空間の下に10のバリアントが公開されています — 2つのCoreML窓サイズと8つの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-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 vs 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は、fairseq2のapply_audio_normalizationと一致する、生波形上の発話レベルのlayer-normを必要とします:

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以上の低リソース言語を含みます。サンプルカバレッジ:

文字体系言語サンプルコード
ラテン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
アルメニア、ジョージア、ヘブライ、ギリシャ、グジャラート、グルムキー、カンナダ、マラヤーラム、オリヤー、シンハラ、タミル、テルグ、ティフィナグ、ターナ、他4つ48完全なリストを参照 →

lang_ids.pyソース内の英語名付きの完全なISO 639-3 + ISO 15924コードリスト、およびモデルカードで国のヒント付きで文字体系別にグループ化されています。

検証済み出力

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)は、残余エラーを段階的に減らします。

リファレンス