Nemotron Streaming
NVIDIA'nın iki streaming ASR modeli, aynı Swift target'ı NemotronStreamingASR'ı paylaşır. İkisi de 600M parametreli cache-aware FastConformer encoder + RNN-T decoder kombinasyonudur, ikisi de noktalama ve büyük-küçük harf dönüşümünü normal BPE token'ları olarak native şekilde üretir, ikisi de CoreML üzerinden Apple Neural Engine'de çalışır; çok dilli sürüm ayrıca GPU-rezident çıkarım için MLX bundle'lara sahiptir. Uygulamanıza uygun olanı seçin:
| Sürüm | Kapsam | Varsayılan chunk | Upstream |
|---|---|---|---|
| Nemotron 3.5 Çok Dilli | 40 dil-locale (en-US, en-GB, es-ES, fr-FR, de-DE, ja-JP, ko-KR, zh-CN, hi-IN, ar, …) | 320 ms | nvidia/nemotron-3.5-asr-streaming-0.6b |
| Nemotron Speech Streaming (İngilizce) | Yalnızca İngilizce — daha küçük bundle, daha düşük varsayılan gecikme | 160 ms | nvidia/nemotron-speech-streaming-en-0.6b |
Ortak özellikler
- Native noktalama ve büyük harf — post-processor gerekmez; nokta, virgül ve harf büyüklüğü vocabulary'nin parçasıdır
- 600M parametre — cache-aware 24 katmanlı FastConformer encoder + 2 katmanlı LSTM RNN-T decoder + joint network
- Cache-aware streaming — attention ve conv cache'leri chunk'lar arasında akar, chunk sınırları boyunca sürekli bağlam korur
- Çoklu chunk boyutları — çok dilli: 80, 320, 560, 1120 ms (varsayılan 320 ms); İngilizce: 80, 160, 560, 1120 ms (varsayılan 160 ms)
- Yalnızca çok dilli: bir prompt kernel (Linear 1152→2048→1024) one-hot bir dil slot'unu her encode edilmiş frame'e ekler, böylece aynı ağırlıklar 40 dil-locale'in tümüne hizmet eder. İngilizce sürümde prompt kernel yoktur.
Mimari
Her ses chunk'ı için boru hattı (pipeline) içinde üç CoreML modeli:
| Bileşen | Açıklama |
|---|---|
| Encoder | 24 katmanlı cache-aware FastConformer, 1024 hidden. 32-frame'lik bir mel chunk (varsayılan 320 ms) ve altı state tensoru — attention KV cache [24, 1, 56, 1024], depthwise conv cache [24, 1, 1024, 8], pre_cache mel loopback ve prompt kernel'i süren 128-slotluk one-hot language_mask — alır. |
| Prompt kernel | Linear(1152→2048) → ReLU → Linear(2048→1024) — dil one-hot'unu her encode edilmiş frame'e işler, böylece aynı 600M ağırlık 40 dil-locale'in tümüne hizmet eder. |
| Decoder | İki katmanlı LSTM prediction network, 640 hidden. Önceki non-blank token'ı alır, bir embedding ve güncellenmiş (h, c) state'i üretir. |
| Joint | Encoder ve decoder çıktılarını 13 087 BPE token + blank üzerinde logits'e birleştirir. Noktalama, büyük harf ve dile özgü tag'ler BPE vocabulary'sinde sadece ek token'lardır — ayrı head yoktur. |
EOU head yok
Parakeet-EOU'nun aksine Nemotron, ifade sonu için ayrı bir token üretmez. Sürekli sesi ifadelere bölmenin iki yolu:
- Harici VAD — session'ı Silero VAD ile eşleştirin; sürekli sessizlikte
finalize()ile mevcut ifadeyi commit edin ve bir sonraki içincreateSession()çağırın. - Noktalama sınırı — kısmi transcript
.,?veya!ile bittiğinde bunu doğal bir commit işareti olarak alın. Ek model gerekmez, ancak sesin gerçekten sonlandırıcı noktalama üretmesine bağlıdır.
Bundle'lar
Nemotron-3.5-ASR-Streaming-0.6B'nin yayımlanmış dört sürümü, artı aynı Swift target üzerinde eski yalnızca-İngilizce modeli:
| Sürüm | Diskte | Streaming tepe noktası (M5 Pro) | HuggingFace |
|---|---|---|---|
| CoreML INT8 (varsayılan) | 612 MB | 1238 MB | aufklarer/Nemotron-3.5-ASR-Streaming-0.6B-CoreML-INT8 |
| MLX bf16 | 1217 MB | 1474 MB | aufklarer/…MLX-bf16 |
| MLX 8-bit | 732 MB | 997 MB | aufklarer/…MLX-8bit |
| MLX 4-bit | 473 MB | 747 MB | aufklarer/…MLX-4bit |
| Yalnızca İngilizce (CoreML INT8) | ~580 MB | — | aufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8 |
Upstream: nvidia/nemotron-3.5-asr-streaming-0.6b (çok dilli) ve nvidia/nemotron-speech-streaming-en-0.6b (yalnızca İngilizce).
Kuantizasyon pratik olarak kayıpsızdır: CoreML INT8, MLX bf16 ve MLX 8-bit fp32 NeMo kaynağına göre ±0,3 pp WER içinde kalır. MLX 4-bit, en küçük disk boyutu ve streaming RSS'i karşılığında ortalama ~6 pp WER kaybına neden olur.
Hızlı başlangıç — toplu transkripsiyon
SpeechRecognitionModel'a uyduğu için, genel bir STT modeli alan herhangi bir kod yoluna doğrudan oturur:
import NemotronStreamingASR
let model = try await NemotronStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000, language: "en-US")
Hızlı başlangıç — async streaming
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
if partial.isFinal { print("FINAL: \(partial.text)") }
else { print("... \(partial.text)") }
}
Her PartialTranscript şunları taşır: text, isFinal (yalnızca finalize() sonrasındaki son partial için true), confidence ve monoton artan segmentIndex.
Uzun ömürlü session API'si (mikrofon girişi)
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) }
Komut satırı
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 vs Parakeet-EOU
| Nemotron Streaming 0.6B | Parakeet-EOU 120M | |
|---|---|---|
| Parametre | 600M | 120M |
| Encoder | 24 katmanlı FastConformer, 1024 hidden | 17 katmanlı FastConformer, 512 hidden |
| Decoder | 2-layer LSTM, RNN-T | 1-layer LSTM, RNN-T |
| EOU tespiti | Harici (VAD veya noktalama) | Yerleşik <EOU> token'ı |
| Noktalama | Native inline BPE token'ları | Hayır (post-process) |
| Diller | 40 dil-locale (en-US, en-GB, es-ES, fr-FR, de-DE, ja-JP, ko-KR, zh-CN, hi-IN, ar, …) | 25 Avrupa dili |
| Varsayılan chunk | 320 ms | 320 ms |
| Bundle boyutu | 612 MB (CoreML INT8); 473 MB (MLX 4-bit) | ~150 MB |
…çok dilli streaming transkripsiyona (40 dil-locale'den herhangi biri) noktalama ve büyük harf ile kutudan çıkar çıkmaz ihtiyaç duyuyorsanız ve ifadeleri kendi başınıza segmentlemekte sakınca görmüyorsanız (VAD veya noktalama ipucu). Yerleşik EOU sinyali olan yalnızca İngilizce, kısıtlı iOS dictation için Parakeet-EOU hâlâ daha küçük seçenektir.