Nemotron Streaming

Nemotron-Speech-Streaming-0.6B هو نموذج NVIDIA للتعرّف على الكلام الإنجليزي بالبثّ ومنخفض زمن الاستجابة: مرمّز FastConformer واعٍ بالذاكرة المؤقّتة مع فاكّ ترميز RNN-T، وعلامات الترقيم والكتابة بأحرف كبيرة تُصدَر كرموز BPE اعتيادية. حزمة CoreML المتوفّرة هنا تأتي بمرمّز مكمَّم بالألوان INT8 وتعمل على Apple Neural Engine.

ما هو

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

ثلاثة نماذج CoreML تسري على شكل خط أنابيب لكل جزء صوتي:

المكوّنالوصف
المرمّزFastConformer واعٍ بالذاكرة المؤقّتة من 24 طبقة، 1024 hidden. يتلقّى جزء mel من 17 إطاراً (160 مللي ثانية افتراضياً) إضافة إلى خمسة موترات حالة — ذاكرة KV للانتباه [24, 1, 70, 1024]، وذاكرة التفاف depthwise [24, 1, 1024, 8]، وحلقة pre_cache mel ترجع بصدى صوت الماضي القريب لتبقى حدود الأجزاء متّصلة.
فاكّ الترميزشبكة تنبّؤ LSTM من طبقتَين، 640 hidden. يستهلك الرمز السابق غير الفارغ ويُصدر تضميناً مع تحديث الحالة (h, c).
Jointيدمج مخرجات المرمّز وفاكّ الترميز في logits على 1024 رمز BPE + blank. علامات الترقيم والكتابة بأحرف كبيرة مجرّد رموز إضافية في مفردات BPE — لا رؤوس إضافية.

لا توجد رأس EOU

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

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

النموذج

المكوّنالحجمHuggingFace
المرمّز (INT8)562 MBaufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8
فاكّ الترميز14 MB
Joint3.3 MB

المصدر الأصلي: nvidia/nemotron-speech-streaming-en-0.6b (نقطة تحقّق .nemo من NeMo).

بداية سريعة — التفريغ على دفعات

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

import NemotronStreamingASR

let model = try await NemotronStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000)

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

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

كل PartialTranscript يحمل text وisFinal (صحيح فقط عند آخر جزء بعد 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) }

CLI

speech transcribe recording.wav --engine nemotron                    # batch
speech transcribe recording.wav --engine nemotron --stream           # streaming final
speech transcribe recording.wav --engine nemotron --stream --partial # with partials

Nemotron مقابل Parakeet-EOU

Nemotron Streaming 0.6BParakeet-EOU 120M
المعاملات600M120M
المرمّزFastConformer من 24 طبقة، 1024 hiddenFastConformer من 17 طبقة، 512 hidden
فاكّ الترميزLSTM من طبقتَين، RNN-TLSTM من طبقة واحدة، RNN-T
كشف EOUخارجي (VAD أو علامة ترقيم)رمز <EOU> مدمج
علامات الترقيمرموز BPE أصيلة مضمَّنة في السطرلا (معالجة لاحقة)
اللغاتالإنجليزية فقط25 لغة أوروبية
الجزء الافتراضي160 مللي ثانية320 مللي ثانية
حجم الحزمة~580 MB~150 MB
اختر Nemotron عندما…

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