Omnilingual ASR
Omnilingual ASR من Meta عائلة تعرّف على الكلام مستقلّة عن اللغة تغطّي 1,672 لغة عبر 32 نظام كتابة مميَّزاً — أوسع تغطية لغوية لأيّ نموذج ASR يعمل على الجهاز على Apple Silicon. تنقل Soniqo متغيّر CTC إلى كلٍّ من CoreML (Neural Engine) وMLX (GPU عبر Metal)، بأربعة أحجام نموذج من 300M إلى 7B معامل.
بعكس Qwen3-ASR أو Parakeet TDT، لا يأخذ Omnilingual CTC تلميحاً للغة وقت الاستدلال — فهو يستخدم مفردات SentencePiece مشتركة من 10,288 مدخلاً تشمل كل لغة مدعومة. مرّر أيّ كلام بأيّ لغة مدعومة وسينتج النموذج نظام الكتابة الصحيح تلقائياً.
البنية المعمارية
Omnilingual CTC ضبط دقيق خاضع للإشراف لعمود 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 kHz، يُنتج المرمّز بتنزيل عيّنات ×320 معدّل إطار 50 Hz. مقطع من 10 ثوانٍ يُنتج 499 إطار logits. تفكيك CTC الجشع يُسقط التكرارات المتتالية ويتخطّى الرموز الخاصة عبر مفكِّك SentencePiece.
متغيّرات النموذج
تُنشَر عشرة متغيّرات تحت نطاق aufklarer على HuggingFace — حجما نافذة 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 | GPU عبر Metal |
| CTC-300M-MLX-8bit | 24 | 1024 | 16 | 342 MB | GPU عبر Metal |
| CTC-1B-MLX-4bit | 48 | 1280 | 20 | 549 MB | GPU عبر Metal |
| CTC-1B-MLX-8bit | 48 | 1280 | 20 | 1006 MB | GPU عبر Metal |
| CTC-3B-MLX-4bit | 60 | 2048 | 32 | 1.71 GB | GPU عبر Metal |
| CTC-3B-MLX-8bit | 60 | 2048 | 32 | 3.16 GB | GPU عبر Metal |
| CTC-7B-MLX-4bit | 128 | 2048 | 32 | 3.55 GB | GPU عبر Metal |
| CTC-7B-MLX-8bit | 128 | 2048 | 32 | 6.63 GB | GPU عبر Metal |
استخدام CLI
CoreML (Neural Engine)
# نافذة 10 ث (افتراضية)
.build/release/speech transcribe recording.wav --engine omnilingual
# نافذة 5 ث (ذاكرة أقل، إقلاع بارد أسرع)
.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
الواجهة الخلفية 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
تُنتج الواجهتان الخلفيّتان تفريغات متطابقة جوهرياً باستثناء حرف أو حرفين (فروقات التكميم وزمن التشغيل). اختر بحسب وجهة النشر:
| CoreML | MLX | |
|---|---|---|
| هدف الحوسبة | Neural Engine | GPU عبر Metal |
| طول المدخل | نافذة ثابتة (5 ث أو 10 ث) | أيّ طول حتى 40 ث |
| أحجام النموذج | 300M فقط | 300M / 1B / 3B / 7B |
| التكميم | تكميم INT8 بالألوان | 4-bit أو 8-bit بـ QuantizedLinear |
| التشغيل بالتوازي مع TTS على GPU | نعم (ANE مستقلّ) | يتنافس مع TTS على GPU |
| دعم iOS | iOS 18+ | أيّ iOS على Apple Silicon |
تفاصيل المعالجة المسبقة
يتطلّب 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,398 | eng_Latn, fra_Latn, spa_Latn, pcm_Latn, swh_Latn, zul_Latn, … |
| العربيّة | 70 | arb_Arab, arz_Arab, ary_Arab, arq_Arab, fas_Arab, urd_Arab, ckb_Arab, uig_Arab, … |
| الديفاناغاريّة | 65 | hin_Deva, mar_Deva, nep_Deva, bho_Deva, mai_Deva, awa_Deva, brx_Deva, … |
| السيريليّة | 51 | rus_Cyrl, ukr_Cyrl, bel_Cyrl, bul_Cyrl, srp_Cyrl, mkd_Cyrl, kaz_Cyrl, … |
| الإثيوبيّة | 10 | amh_Ethi, tir_Ethi, wal_Ethi, sgw_Ethi, … |
| البنغاليّة | 8 | ben_Beng, asm_Beng, mni_Beng, … |
| التايلانديّة / اللاويّة / البورمية / التبتيّة | 9 / 1 / 3 / 6 | tha_Thai, lao_Laoo, mya_Mymr, bod_Tibt, dzo_Tibt, … |
| هان (المبسّطة / التقليديّة) | 6 | cmn_Hans, cmn_Hant, yue_Hans, yue_Hant, cdo_Hans, … |
| اليابانيّة / الكوريّة | 1 / 1 | jpn_Jpan, kor_Hang |
| الأرمنيّة، الجورجيّة، العبريّة، اليونانيّة، الغوجاراتيّة، الغورموخيّة، الكناديّة، المالايالاميّة، الأوريا، السنهاليّة، التاميليّة، التيلوغو، التيفيناغ، الثاآنا، و4 أخرى | 48 | انظر القائمة الكاملة ← |
قائمة كاملة برموز 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 يُنتج خرجاً متطابقاً جوهرياً باستثناء حرف أو حرفين. المتغيّرات الأكبر (1B و3B و7B) تخفّض الأخطاء المتبقّية تدريجياً.
المراجع
- الورقة البحثية: Omnilingual ASR (arXiv 2511.09690)
- التنفيذ الأصلي: facebookresearch/omnilingual-asr (Apache 2.0)
- مصدر نقل Swift: speech-swift/Sources/OmnilingualASR
- بطاقة النموذج: docs/models/omnilingual-asr.md