Omnilingual ASR

Omnilingual ASR ของ Meta เป็นตระกูลโมเดลจดจำเสียงพูดที่ไม่จำกัดภาษา ครอบคลุม 1,672 ภาษา ทั่วทั้ง 32 ระบบการเขียนที่แตกต่างกัน — การครอบคลุมภาษาที่กว้างที่สุดของโมเดล ASR บนอุปกรณ์บน Apple Silicon Soniqo พอร์ตตัวแปร CTC ไปยังทั้ง CoreML (Neural Engine) และ MLX (GPU Metal) พร้อมขนาดโมเดลสี่ขนาดตั้งแต่ 300M ถึง 7B พารามิเตอร์

CTC ไม่จำกัดภาษา

ต่างจาก Qwen3-ASR หรือ Parakeet TDT, Omnilingual CTC ไม่รับคำใบ้ของภาษาในตอนอินเฟอเรนซ์ — มันใช้คำศัพท์ SentencePiece ร่วม 10,288 รายการที่ครอบคลุมทุกภาษาที่รองรับ ส่งเสียงพูดใด ๆ ในภาษาที่รองรับใด ๆ แล้วโมเดลจะผลิตระบบการเขียนที่ถูกต้องโดยอัตโนมัติ

สถาปัตยกรรม

Omnilingual CTC เป็น supervised fine-tune ของ backbone wav2vec 2.0 ของ Meta พร้อม head CTC เชิงเส้นบนคำศัพท์หลายภาษาที่ใช้ร่วมกัน Pipeline เป็นแบบขนานและไม่ใช่ autoregressive — forward pass หนึ่งครั้งต่อหนึ่งประโยค ไม่มีลูป decoder

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, encoder ที่ downsample ×320 สร้างอัตราเฟรม 50 Hz คลิป 10 วินาทีผลิต logits 499 เฟรม การถอดรหัส CTC แบบ greedy ยุบสำเนาที่ติดกันและข้ามโทเค็นพิเศษผ่าน tokenizer ของ SentencePiece

ตัวแปรของโมเดล

มีการเผยแพร่สิบตัวแปรภายใต้ namespace aufklarer บน HuggingFace — สองขนาดหน้าต่าง CoreML บวกกับแปดชุดผสมการควอนไทซ์ MLX:

ตัวแปรชั้นDimHeadขนาดRuntime
CTC-300M-CoreML-INT8 (หน้าต่าง 5 s)24102416312 MBNeural Engine
CTC-300M-CoreML-INT8 (หน้าต่าง 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

การใช้งาน CLI

CoreML (Neural Engine)

# หน้าต่าง 10 s (ดีฟอลต์)
.build/release/speech transcribe recording.wav --engine omnilingual

# หน้าต่าง 5 s (หน่วยความจำต่ำกว่า เริ่มต้นเย็นเร็วกว่า)
.build/release/speech transcribe recording.wav --engine omnilingual --window 5

MLX (GPU Metal)

# 300M @ 4-bit (ตัวแปร MLX ดีฟอลต์)
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx

# 1B @ 4-bit — ความแม่นยำสูงขึ้น
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx --variant 1B

# 3B @ 8-bit — เข้าใกล้คุณภาพอ้างอิง
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx --variant 3B --bits 8

# 7B @ 4-bit — ตัวแปร CTC ที่ใหญ่ที่สุด ความแม่นยำดีที่สุด
.build/release/speech transcribe recording.wav --engine omnilingual --backend mlx --variant 7B

Swift API

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

// ดีฟอลต์: 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

Backend ทั้งสองตัวผลิตข้อความถอดเสียงที่เหมือนกันเป็นหลัก โดยต่างกัน 1-2 ตัวอักษร (จากการควอนไทซ์และความแตกต่างของ runtime) เลือกตามเป้าหมายการดีพลอยของคุณ:

CoreMLMLX
เป้าหมายการประมวลผลNeural EngineGPU Metal
ความยาวอินพุตหน้าต่างคงที่ (5 s หรือ 10 s)ความยาวใดก็ได้สูงสุด 40 s
ขนาดโมเดลเฉพาะ 300M300M / 1B / 3B / 7B
การควอนไทซ์Palettization INT84-bit หรือ 8-bit QuantizedLinear
รันพร้อมกับ TTS บน GPUได้ (ANE เป็นอิสระ)แข่งทรัพยากรกับ TTS บน GPU
การรองรับ iOSiOS 18+iOS Apple Silicon ใด ๆ

รายละเอียดการประมวลผลล่วงหน้า

Omnilingual ต้องการ layer-norm ระดับประโยคบนรูปคลื่นดิบ ตรงกับ apply_audio_normalization ของ fairseq2:

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

การพอร์ตเป็น Swift ทำการ normalize เนื้อหาเสียงจริง ก่อน การเติม zero-padding ไปยังหน้าต่างคงที่ของ CoreML ดังนั้นอินพุตที่เล็กกว่าหน้าต่างจึงตรงกับสถิติของ pipeline อ้างอิงอย่างแม่นยำ นี่เป็นข้อผิดพลาดในการพอร์ตที่พบบ่อยที่สุด — การ implement wav2vec2 ของ HuggingFace ใช้ group-norm ต่อ feature ไม่ใช่ layer-norm ระดับประโยค

Pipeline อ้างอิงบังคับขีดจำกัดแบบแข็ง 40 วินาที (MAX_ALLOWED_AUDIO_SEC) บนเสียงอินพุต การพอร์ตเป็น Swift บังคับขีดจำกัดเดียวกัน — อินพุตที่ยาวกว่าจะโยน error ที่ชัดเจน ชี้ไปยัง SpeechVAD หรือ ParakeetStreamingASR สำหรับการประมวลผลแบบแบ่งเซกเมนต์

การครอบคลุมภาษา

Omnilingual รองรับ 1,672 ภาษา ทั่วทั้ง 32 ระบบการเขียน รวมถึงภาษาทรัพยากรต่ำกว่า 500 ภาษาที่เพิ่มมาผ่านการเก็บข้อมูลของชุมชน ตัวอย่างการครอบคลุม:

ระบบการเขียนภาษารหัสตัวอย่าง
Latin1,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, …
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, …
ไทย / ลาว / พม่า / ทิเบต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
อาร์เมเนีย จอร์เจีย ฮีบรู กรีก คุชราต กุรมุขี กันนาดา มลยาฬัม โอริยา สิงหล ทมิฬ เตลูกู Tifinagh Thaana บวกอีก 4 ระบบ48ดูรายการเต็ม →

รายการรหัส ISO 639-3 + ISO 15924 ฉบับเต็มพร้อมชื่อภาษาอังกฤษอยู่ในซอร์ส lang_ids.py และจัดกลุ่มตามระบบการเขียนพร้อมคำใบ้ของประเทศใน การ์ดโมเดล

เอาต์พุตที่ตรวจสอบแล้ว

ข้อความถอดเสียงจากการพอร์ต Swift บน benchmark 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) จะลดข้อผิดพลาดที่เหลืออย่างค่อย ๆ ลง

อ้างอิง