Automatische vertaling · Engels origineel
Nemotron Streaming
Twee NVIDIA streaming ASR modellen delen de NemotronStreamingASR Swift target. Beide zijn 600M-parameter cache-aware FastConformer encoders gekoppeld aan een RNN-T decoder, beide zenden native punctuatie en kapitalisatie als reguliere BPE tokens, beide draaien op de Apple Neural Engine via CoreML, en de meertalige variant heeft bovendien MLX bundels voor GPU-ingezeten gevolgtrekking. Kies degene die overeenkomt met uw toepassing:
| Variant | Dekking | Standaard brok | Upstream |
|---|---|---|---|
| Nemotron 3,5 Meertalig | 40 language-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 (Engels) | Engels alleen | 160 ms | nvidia/nemotron-speech-streaming-en-0.6b |
Gedeelde eigenschappen
- Native punctuation and capitalization Geen post-processor nodig; periodes, komma's en geval maken deel uit van de woordenschat
- 600M parameters andere cache-aware 24-layer FastConformer encoder + 2-layer LSTM RNN-T decoder + gewrichtsnetwerk
- Cache-bewuste streaming
- Meerdere brokgroottes Meertalig: 80, 320, 560, 1120 ms (320 ms default); Engels: 80, 160, 560, 1120 ms (160 ms standaard)
- Alleen meertalig: een prompt kernel (Linear 1152→2048→1024) vouwt een één-hot taal slot in elk gecodeerd frame, zodat dezelfde gewichten alle 40 taal-lokales dienen. De Engels-only variant heeft geen prompt Kernel.
Architectuur
Drie CoreML modellen die per audioblok worden gepipelined:
| Onderdeel | Omschrijving |
|---|---|
| Encoder | 24-layer cache-aware FastConformer, 1024 verborgen. Neemt een 32-frame mel brok (320 ms standaard) plus zes staat tensors . attentie KV cache [24, 1, 56, 1024], dieptewijs conv cache [24; 1, 1024, 8], pre_cache mel loopback, en een language_mask 128-slot one-hot die de prompte kernel voortstuwt. |
| Waarschuwingskernel | Linear(1152→2048) → ReLU → Linear (-)2048→1024) .Vouwt de taal een-hot in elk gecodeerd frame zodat dezelfde 600M gewichten dienen alle 40 taal-lokalen. |
| Decoder | Tweelaags LSTM-voorspellingsnetwerk, 640 verborgen. Consumeert het vorige niet-blanco token, zendt een inbedding uit plus bijgewerkt (h, c) status. |
| Gezamenlijk | Fouten encoder en decoder uitgangen in logits over 13 087 BPE tokens + blanco. Punctuatie, kapitalisering, en per-taal tags zijn gewoon meer tokens in de BPE vocab . Geen extra hoofden. |
Geen GOO-hoofd
In tegenstelling tot Parakeet-EOU, zendt Nemotron geen speciaal teken voor einde-van-toettering uit. Twee manieren om continue audio te segmenteren in uitingen:
- VAD Verbind de sessie met Silero VAD; bij aanhoudende stilte, aanroep
finalize()om de huidige uitspraak te doen encreateSession()Voor de volgende. - Puntgrens Wanneer de gedeeltelijke transcriptie eindigt in
.,?, of!Geen extra model, maar hangt af van de audio die terminale interpunctie oproept.
Bundels
Vijf gepubliceerde varianten van Nemotron-3.5-ASR-Streaming-0.6B, plus het oudere Engels-only model op hetzelfde Swift doel:
| Variant | On-disk | Streaming peak (M5 Pro) | HuggingFace |
|---|---|---|---|
| CoreML INT8 (default) | 612 MB | 1238 MB | aufklarer/Nemotron-3.5-ASR-Streaming-0.6B-CoreML-INT8 |
| MLX bf16 | 1217 MB | 1474 MB | aufklarer/...MLX-bf16 |
| MLX 5-bit (native default) | 538,6 MB | 800 MB | aufklarer/...MLX-5bit |
| MLX 8-bit | 732,6 MB | 992 MB | aufklarer/...MLX-8bit |
| MLX 4-bit | 473 MB | 747 MB | aufklarer/...MLX-4bit |
| Alleen-Engels (CoreML INT8) | ~580 MB | — | aufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8 |
Upstream: nvidia/nemotron-3.5-asr-streaming-0.6b (meertalig) en nvidia/nemotron-speech-streaming-en-0.6b (alleen-Engels).
Op het eigenlijke cache-aware 320 ms pad, MLX 5-bit gemiddelden 11.53% WER in zes FLEURS talen versus 11,01% voor MLX 8-bit. De 5-bit standaard slaat ongeveer 193 MB op schijf en 192 MB op piek RSS; MLX 4-bit blijft een onderzoeksexport omdat het kwaliteitsverlies groter is.
Snel starten met de oorspronkelijke MLX streaming
De Swift runtime ondersteunt de gepubliceerde MLX 5-bits en 8-bits bundels. Deze bundels zijn standaard 5-bits, houden de caches van elke sessie onafhankelijk, en serialiseert de gevolgtrekking wanneer sessies één geladen model delen. MLX maakt gebruik van de gevalideerde 320 ms geometrie en stelt momenteel geen woordversterker bloot.
import NemotronStreamingASR
let model = try await NemotronStreamingASRMLXModel.fromPretrained(
variant: .int5
)
let session = try model.createSession(language: "en-US")
for chunk in microphoneChunks16kHz {
for partial in try session.pushAudio(chunk) {
print(partial.text)
}
}
let final = try session.finalize().last?.text
Snel starten met CoreML batchtranscriptie
Conforms to SpeechRecognitionModel, so it drops in any code pad that takes a generic STT model:
import NemotronStreamingASR
let model = try await NemotronStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000, language: "en-US")
Snel starten met een async-streaming
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
if partial.isFinal { print("FINAL: \(partial.text)") }
else { print("... \(partial.text)") }
}
Elke PartialTranscript draagt text, isFinal (true only for the last part part after finalize()), confidence, and a monotone segmentIndex.
Langlevende sessie API (mic input)
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 --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 | |
|---|---|---|
| Parameters | 600M | 120M |
| Encoder | 24-layer FastConformer, 1024 verborgen | 17-layer FastConformer, 512 verborgen |
| Decoder | 2-laags LSTM, RNN-T | 1-laags LSTM, RNN-T |
| EOU-detectie | Extern (VAD of interpunctie) | Ingebouwd <EOU> token |
| Punctuatie | Native inline BPE tokens | Nr. (post-proces) |
| Talen | 40 language-locales (en-US, en-GB, es-ES, fr-FR, de-DE, ja-JP, ko-KR, zh-CN, hi-IN, ar, ...) | 25 Europees |
| Standaard brok | 320 ms | 320 ms |
| Bundelgrootte | 612 MB (CoreML INT8); 538.6 MB (native MLX 5-bit) | 150 MB |
...je hebt meertalige streaming transcriptie (een van de 40 taal-lokales) nodig met punctuatie en kapitalisatie uit de doos, en je bent OK segmenteren uitingen (VAD of punctuation cue). Voor beperkt-apparaat iOS dictie die alleen Engels is met een ingebouwd EOU-signaal, is Parakeet-EOU nog steeds de kleinere keuze.
Regressietests
De overlappende speech regressie maakt gebruik van een ingecheckte WAV met twee Kokoro stemmen: de tweede start 320 ms later en wordt verzwakt met 3 dB. Elke decode moet een niet-leeg transcript produceren zonder taaltags. De vaste audio verwijdert live synthese variabiliteit, en de nachtelijke workflow loopt Nemotron in zijn eigen scherf. Start de Core ML regressie met dezelfde CPU-enkele instelling als nachtelijk:
SPEECH_COREML_COMPUTE_UNITS=cpuOnly \
swift test --disable-sandbox --no-parallel \
--filter '^NemotronStreamingASRTests[.]E2ENemotronHarshAudioTests/'