Nemotron स्ट्रीमिंग

NVIDIA के दो स्ट्रीमिंग ASR मॉडल एक ही Swift target NemotronStreamingASR साझा करते हैं। दोनों 600M पैरामीटर वाले cache-aware FastConformer एनकोडर हैं और RNN-T डिकोडर के साथ जोड़े गए हैं, दोनों विराम चिह्न और कैपिटलाइज़ेशन को सामान्य BPE टोकन के रूप में नेटिव रूप से देते हैं, दोनों CoreML के माध्यम से Apple Neural Engine पर चलते हैं, और बहुभाषी संस्करण के पास GPU-रेज़िडेंट इन्फेरेंस के लिए MLX बंडल भी हैं। अपने अनुप्रयोग के अनुसार चुनें:

वेरिएंटकवरेजडिफ़ॉल्ट chunkUpstream
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

साझा गुण

आर्किटेक्चर

प्रत्येक ऑडियो chunk पर तीन CoreML मॉडल pipeline में:

घटकविवरण
एनकोडर24-परत cache-aware FastConformer, 1024 hidden। 32-फ्रेम mel chunk (डिफ़ॉल्ट 320 ms) के साथ छह स्टेट टेंसर लेता है — attention KV कैश [24, 1, 56, 1024], depthwise conv कैश [24, 1, 1024, 8], pre_cache mel लूपबैक और prompt kernel को चलाने वाला 128-स्लॉट one-hot language_mask
Prompt kernelLinear(1152→2048) → ReLU → Linear(2048→1024) — हर एनकोडेड फ्रेम में भाषा one-hot जोड़ता है, इसलिए वही 600M वज़न सभी 40 भाषा-लोकेल को सेवा देते हैं।
डिकोडरदो-परत LSTM प्रेडिक्शन नेटवर्क, 640 hidden। पिछला non-blank टोकन लेता है, एक embedding और अद्यतित (h, c) स्टेट उत्सर्जित करता है।
Jointएनकोडर और डिकोडर आउटपुट को 13 087 BPE टोकन + blank पर logits में मिलाता है। विराम चिह्न, कैपिटलाइज़ेशन और प्रति-भाषा टैग — सब BPE शब्दावली में अतिरिक्त टोकन हैं — अलग heads नहीं।

कोई EOU head नहीं

Parakeet-EOU के विपरीत, Nemotron कथन-अंत के लिए समर्पित टोकन उत्सर्जित नहीं करता। निरंतर ऑडियो को कथनों में विभाजित करने के दो तरीके:

  1. बाहरी VAD — सत्र को Silero VAD से जोड़ें; निरंतर मौन पर finalize() कॉल करें ताकि वर्तमान कथन कमिट हो और createSession() अगले के लिए।
  2. विराम चिह्न सीमा — जब आंशिक ट्रांसक्रिप्ट ., ? या ! पर समाप्त होती है, उसे प्राकृतिक कमिट संकेत मानें। कोई अतिरिक्त मॉडल नहीं, पर इस पर निर्भर है कि ऑडियो वास्तव में अंतिम विराम चिह्न प्रेरित करे।

बंडल

Nemotron-3.5-ASR-Streaming-0.6B के चार प्रकाशित वेरिएंट, साथ ही उसी Swift target पर पुराना केवल-अंग्रेज़ी मॉडल:

वेरिएंटडिस्क परस्ट्रीमिंग शिखर (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

Upstream: nvidia/nemotron-3.5-asr-streaming-0.6b (बहुभाषी) और nvidia/nemotron-speech-streaming-en-0.6b (केवल अंग्रेज़ी)।

क्वांटाइज़ेशन वस्तुतः निर्बाध है: CoreML INT8, MLX bf16 और MLX 8-bit fp32 NeMo स्रोत के ±0.3 pp WER के भीतर हैं। MLX 4-bit सबसे छोटे डिस्क आकार और स्ट्रीमिंग RSS के बदले लगभग 6 pp औसत WER खर्च करता है।

त्वरित आरंभ — बैच ट्रांसक्रिप्शन

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, language: "ja-JP") {
    if partial.isFinal { print("FINAL: \(partial.text)") }
    else               { print("... \(partial.text)") }
}

हर PartialTranscript में text, isFinal (केवल finalize() के बाद अंतिम आंशिक के लिए true), confidence, और मोनोटोनिक रूप से बढ़ता segmentIndex होता है।

दीर्घ-जीवी सत्र API (माइक इनपुट)

let session = try model.createSession(language: "en-US")

// 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
speech transcribe meeting.wav   --engine nemotron --language de-DE                    # any of the 40 locales

Nemotron बनाम Parakeet-EOU

Nemotron Streaming 0.6BParakeet-EOU 120M
पैरामीटर600M120M
एनकोडर24-परत FastConformer, 1024 hidden17-परत FastConformer, 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 यूरोपीय
डिफ़ॉल्ट chunk320 ms320 ms
बंडल आकार612 MB (CoreML INT8); 473 MB (MLX 4-bit)~150 MB
Nemotron चुनें जब…

…आपको बॉक्स-से-बाहर विराम चिह्न और कैपिटलाइज़ेशन के साथ बहुभाषी स्ट्रीमिंग ट्रांसक्रिप्शन चाहिए (40 भाषा-लोकेल में से कोई भी) और कथनों को स्वयं विभाजित करना (VAD या विराम चिह्न संकेत) ठीक है। संसाधन-सीमित iOS dictation के लिए जो केवल अंग्रेज़ी हो और जिसमें अंतर्निर्मित EOU संकेत हो, Parakeet-EOU अभी भी छोटा विकल्प है।