بث Nemotron

نموذجان للتعرف على الكلام بالبث من NVIDIA يتقاسمان هدف Swift نفسه NemotronStreamingASR. كلاهما يضم مرمِّز FastConformer واعٍ بالذاكرة المؤقتة بـ 600 مليون معامل مقترن بفاكّ ترميز RNN-T، وكلاهما يُخرج علامات الترقيم والحالة الأصلية كرموز BPE اعتيادية، وكلاهما يعمل على محرك Apple Neural Engine عبر CoreML؛ كما يتوفر للنسخة متعددة اللغات حزم MLX إضافية للاستدلال المقيم على وحدة معالجة الرسوميات. اختر ما يناسب تطبيقك:

النسخةالتغطيةChunk الافتراضيالمصدر
Nemotron 3.5 متعدد اللغات40 مَوضِعًا لغويًا (en-US، en-GB، es-ES، fr-FR، de-DE، ja-JP، ko-KR، zh-CN، hi-IN، ar، …)320 msnvidia/nemotron-3.5-asr-streaming-0.6b
Nemotron Speech Streaming (الإنجليزية)الإنجليزية فقط — حزمة أصغر وزمن استجابة افتراضي أقل160 msnvidia/nemotron-speech-streaming-en-0.6b

خصائص مشتركة

البنية المعمارية

ثلاثة نماذج CoreML في خط أنابيب لكل chunk صوتي:

المكوّنالوصف
المرمِّزFastConformer واعٍ بالذاكرة المؤقتة من 24 طبقة، 1024 hidden. يأخذ chunk مل من 32 إطارًا (افتراضيًا 320 مللي ثانية) إضافة إلى ستة موتّرات حالة — ذاكرة attention KV ‏[24, 1, 56, 1024]، ذاكرة depthwise conv ‏[24, 1, 1024, 8]، استرداد mel عبر pre_cache، وقناع لغوي language_mask من نوع one-hot بـ 128 خانة يُحرّك prompt kernel.
Prompt kernelLinear(1152→2048) → ReLU → Linear(2048→1024) — ينسج one-hot اللغة في كل إطار مرمَّز، فتخدم نفس الـ 600 مليون وزن جميع المواضع اللغوية الأربعين.
فاكّ الترميزشبكة تنبؤ LSTM من طبقتين، 640 hidden. يستهلك الرمز السابق غير الفارغ ويُخرج embedding وحالة (h, c) محدّثة.
Jointيدمج مخرجات المرمِّز وفاكّ الترميز في logits على 13 087 رمز BPE + الرمز الفارغ. علامات الترقيم والحالة وعلامات اللغة كلها مجرد رموز إضافية في مفردات BPE — لا توجد رؤوس مخصّصة.

لا توجد رأس EOU

بخلاف Parakeet-EOU، لا يُصدر Nemotron رمزًا مخصّصًا لنهاية النطق. هناك طريقتان لتجزئة الصوت المستمر إلى نطقات:

  1. VAD خارجي — اقترن الجلسة بـ Silero VAD؛ عند الصمت المستمر، استدعِ finalize() لتأكيد النطق الحالي وcreateSession() للنطق التالي.
  2. حدود الترقيم — عندما ينتهي التفريغ الجزئي بـ . أو ? أو !، عامل ذلك كإشارة تأكيد طبيعية. لا حاجة إلى نموذج إضافي، لكن يعتمد على أن الصوت يحفّز فعلاً ترقيمًا ختاميًا.

الحزم

أربع نسخ منشورة من Nemotron-3.5-ASR-Streaming-0.6B، إضافة إلى النموذج الإنجليزي فقط الأقدم على نفس هدف Swift:

النسخةالحجم على القرصذروة البث (M5 Pro)HuggingFace
CoreML INT8 (افتراضي)612 MB1238 MBaufklarer/Nemotron-3.5-ASR-Streaming-0.6B-CoreML-INT8
MLX bf161217 MB1474 MBaufklarer/…MLX-bf16
MLX 8-bit732 MB997 MBaufklarer/…MLX-8bit
MLX 4-bit473 MB747 MBaufklarer/…MLX-4bit
الإنجليزية فقط (CoreML INT8)~580 MBaufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8

المصدر: nvidia/nemotron-3.5-asr-streaming-0.6b (متعدد اللغات) وnvidia/nemotron-speech-streaming-en-0.6b (الإنجليزية فقط).

التكميم فعليًا بلا فقد: CoreML INT8 و MLX bf16 و MLX 8-bit جميعها ضمن ±0.3 نقطة WER من مصدر fp32 NeMo. تكلّف MLX 4-bit نحو 6 نقاط WER في المتوسط مقابل أصغر حجم على القرص وأقل ذروة RSS أثناء البث.

بدء سريع — تفريغ دفعي

يحقق SpeechRecognitionModel، فيندمج بسهولة في أي مسار كود يستقبل نموذج STT عامًّا:

import NemotronStreamingASR

let model = try await NemotronStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000, language: "en-US")

بدء سريع — بث غير متزامن

for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
    if partial.isFinal { print("FINAL: \(partial.text)") }
    else               { print("... \(partial.text)") }
}

يحمل كل PartialTranscript: text، isFinal (true فقط للنتيجة الجزئية الأخيرة بعد finalize()confidence، وsegmentIndex رتيب تصاعديًا.

واجهة جلسة طويلة الأمد (دخل الميكروفون)

let session = try model.createSession()

// each mic chunk:
let partials = try session.pushAudio(float32Chunk16kHz)
for p in partials { showPartial(p.text) }   // isFinal is false mid-stream

// when the utterance ends (VAD silence or explicit stop):
let trailing = try session.finalize()
for p in trailing { commit(p.text) }

سطر الأوامر

speech transcribe recording.wav --engine nemotron --language en-US                    # batch
speech transcribe recording.wav --engine nemotron --language en-US --stream           # streaming final
speech transcribe recording.wav --engine nemotron --language ja-JP --stream --partial # partials, Japanese
speech transcribe meeting.wav   --engine nemotron --language de-DE                    # any of the 40 locales

مقارنة Nemotron و Parakeet-EOU

Nemotron Streaming 0.6BParakeet-EOU 120M
المعاملات600M120M
المرمِّزFastConformer من 24 طبقة، 1024 hiddenFastConformer من 17 طبقة، 512 hidden
فاكّ الترميز2-layer LSTM, RNN-T1-layer LSTM, RNN-T
كشف EOUخارجي (VAD أو ترقيم)رمز <EOU> مدمج
الترقيمرموز BPE أصلية ضمن السطرلا (معالجة لاحقة)
اللغات40 مَوضِعًا لغويًا (en-US، en-GB، es-ES، fr-FR، de-DE، ja-JP، ko-KR، zh-CN، hi-IN، ar، …)25 لغة أوروبية
Chunk الافتراضي320 ms320 ms
حجم الحزمة612 م.بايت (CoreML INT8)؛ 473 م.بايت (MLX 4-bit)~150 م.بايت
اختر Nemotron عندما…

…تحتاج إلى تفريغ بث متعدد اللغات (أيٌّ من 40 مَوضِعًا لغويًا) مع ترقيم وحالة أحرف جاهزة من الصندوق، وتقبل أن تجزّئ النطقات بنفسك (عبر VAD أو إشارة ترقيم). أما للإملاء على iOS بإمكانيات محدودة بالإنجليزية فقط مع إشارة EOU مدمجة، فإن Parakeet-EOU يبقى الخيار الأصغر.