Nemotron Streaming
Zwei NVIDIA-Streaming-ASR-Modelle teilen sich das Swift-Target NemotronStreamingASR. Beide sind 600M-Parameter Cache-aware FastConformer-Encoder mit RNN-T-Decoder, beide geben Interpunktion und Großschreibung nativ als reguläre BPE-Tokens aus, beide laufen über CoreML auf der Apple Neural Engine; die mehrsprachige Variante hat zusätzlich MLX-Bundles für GPU-residente Inferenz. Wähle die zu deiner Anwendung passende Variante:
| Variante | Abdeckung | Standard-Chunk | Upstream |
|---|---|---|---|
| Nemotron 3.5 Mehrsprachig | 40 Sprach-Locales (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 (Englisch) | Nur Englisch — kleineres Bundle, geringere Standard-Latenz | 160 ms | nvidia/nemotron-speech-streaming-en-0.6b |
Gemeinsame Eigenschaften
- Native Interpunktion und Großschreibung — kein Post-Processor nötig; Punkte, Kommas und Groß-/Kleinschreibung sind Teil des Vokabulars
- 600M Parameter — Cache-aware 24-schichtiger FastConformer-Encoder + 2-schichtiger LSTM-RNN-T-Decoder + Joint-Netzwerk
- Cache-aware Streaming — Attention- und Conv-Caches fließen von Chunk zu Chunk und halten den Kontext über Chunk-Grenzen hinweg
- Mehrere Chunk-Größen — mehrsprachig: 80, 320, 560, 1120 ms (Standard 320 ms); Englisch: 80, 160, 560, 1120 ms (Standard 160 ms)
- Nur mehrsprachig: Ein Prompt-Kernel (Linear 1152→2048→1024) integriert einen One-Hot-Sprach-Slot in jeden codierten Frame — dieselben Gewichte bedienen alle 40 Sprach-Locales. Die englische Variante hat keinen Prompt-Kernel.
Architektur
Pro Audio-Chunk werden drei CoreML-Modelle in der Pipeline ausgeführt:
| Komponente | Beschreibung |
|---|---|
| Encoder | 24-schichtiger Cache-aware FastConformer, 1024 Hidden. Verarbeitet einen 32-Frame-Mel-Chunk (Standard 320 ms) plus sechs Zustandstensoren — Attention-KV-Cache [24, 1, 56, 1024], depthwise Conv-Cache [24, 1, 1024, 8], pre_cache Mel-Loopback und eine 128-Slot One-Hot language_mask, die den Prompt-Kernel steuert. |
| Prompt-Kernel | Linear(1152→2048) → ReLU → Linear(2048→1024) — integriert das One-Hot der Sprache in jeden codierten Frame, sodass dieselben 600M Gewichte alle 40 Sprach-Locales bedienen. |
| Decoder | Zweischichtiges LSTM-Predictor-Netzwerk, 640 Hidden. Nimmt das vorherige Non-Blank-Token, gibt ein Embedding plus aktualisierten (h, c)-Zustand zurück. |
| Joint | Fusioniert Encoder- und Decoder-Ausgaben zu Logits über 13 087 BPE-Tokens + Blank. Interpunktion, Großschreibung und Sprach-Tags sind nur zusätzliche Tokens im BPE-Vokabular — keine separaten Heads. |
Kein EOU-Head
Anders als Parakeet-EOU gibt Nemotron kein dediziertes End-of-Utterance-Token aus. Zwei Wege, kontinuierliches Audio in Äußerungen zu segmentieren:
- Externes VAD — koppele die Session mit Silero VAD; bei anhaltender Stille rufe
finalize()auf, um die aktuelle Äußerung zu committen, undcreateSession()für die nächste. - Interpunktionsgrenze — endet der Partial-Transkript mit
.,?oder!, behandle das als natürlichen Commit-Cue. Keine Extra-Modelle, hängt aber davon ab, dass das Audio tatsächlich Schluss-Interpunktion induziert.
Bundles
Vier veröffentlichte Varianten von Nemotron-3.5-ASR-Streaming-0.6B sowie das ältere Englisch-only-Modell auf demselben Swift-Target:
| Variante | Auf Disk | Streaming-Peak (M5 Pro) | HuggingFace |
|---|---|---|---|
| CoreML INT8 (Standard) | 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 |
| Englisch-only (CoreML INT8) | ~580 MB | — | aufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8 |
Upstream: nvidia/nemotron-3.5-asr-streaming-0.6b (mehrsprachig) und nvidia/nemotron-speech-streaming-en-0.6b (Englisch-only).
Quantisierung ist praktisch verlustfrei: CoreML INT8, MLX bf16 und MLX 8-bit liegen innerhalb von ±0,3 pp WER zur fp32-NeMo-Quelle. MLX 4-bit kostet ca. 6 pp durchschnittlichen WER für die kleinste Disk- und Streaming-RSS-Größe.
Quick Start — Batch-Transkription
Konform zu SpeechRecognitionModel, lässt sich also in jeden Code-Pfad einsetzen, der ein generisches STT-Modell akzeptiert:
import NemotronStreamingASR
let model = try await NemotronStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000, language: "en-US")
Quick Start — Async-Streaming
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000, language: "ja-JP") {
if partial.isFinal { print("FINAL: \(partial.text)") }
else { print("... \(partial.text)") }
}
Jedes PartialTranscript trägt text, isFinal (nur true für das letzte Partial nach finalize()), confidence und einen monoton steigenden segmentIndex.
Langlebige Session-API (Mikrofoneingabe)
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) }
CLI
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 vs. Parakeet-EOU
| Nemotron Streaming 0.6B | Parakeet-EOU 120M | |
|---|---|---|
| Parameter | 600M | 120M |
| Encoder | 24-schichtiger FastConformer, 1024 Hidden | 17-schichtiger FastConformer, 512 Hidden |
| Decoder | 2-layer LSTM, RNN-T | 1-layer LSTM, RNN-T |
| EOU-Detektion | Extern (VAD oder Interpunktion) | Eingebautes <EOU>-Token |
| Interpunktion | Native inline BPE-Tokens | Nein (Post-Process) |
| Sprachen | 40 Sprach-Locales (en-US, en-GB, es-ES, fr-FR, de-DE, ja-JP, ko-KR, zh-CN, hi-IN, ar, …) | 25 europäische |
| Standard-Chunk | 320 ms | 320 ms |
| Bundle-Größe | 612 MB (CoreML INT8); 473 MB (MLX 4-bit) | ~150 MB |
…wenn du mehrsprachige Streaming-Transkription (eines der 40 Sprach-Locales) mit Interpunktion und Großschreibung out-of-the-box brauchst und Äußerungen selbst segmentierst (VAD oder Interpunktions-Cue). Für ressourcenbeschränkte iOS-Diktiergeräte ausschließlich auf Englisch mit eingebautem EOU-Signal bleibt Parakeet-EOU die kleinere Wahl.