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:

VariantDekking Standaard brokUpstream
Nemotron 3,5 Meertalig40 language-locales (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 (Engels) Engels alleen 160 msnvidia/nemotron-speech-streaming-en-0.6b

Gedeelde eigenschappen

Architectuur

Drie CoreML modellen die per audioblok worden gepipelined:

Onderdeel Omschrijving
Encoder24-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.
WaarschuwingskernelLinear(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.
GezamenlijkFouten 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:

  1. VAD Verbind de sessie met Silero VAD; bij aanhoudende stilte, aanroep finalize() om de huidige uitspraak te doen en createSession() Voor de volgende.
  2. 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:

VariantOn-diskStreaming peak (M5 Pro)HuggingFace
CoreML INT8 (default)612 MB1238 MBaufklarer/Nemotron-3.5-ASR-Streaming-0.6B-CoreML-INT8
MLX bf161217 MB1474 MBaufklarer/...MLX-bf16
MLX 5-bit (native default)538,6 MB800 MBaufklarer/...MLX-5bit
MLX 8-bit732,6 MB992 MBaufklarer/...MLX-8bit
MLX 4-bit473 MB747 MBaufklarer/...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,6BParakeet-EOU 120M
Parameters600M120M
Encoder24-layer FastConformer, 1024 verborgen17-layer FastConformer, 512 verborgen
Decoder2-laags LSTM, RNN-T 1-laags LSTM, RNN-T
EOU-detectie Extern (VAD of interpunctie)Ingebouwd <EOU> token
PunctuatieNative inline BPE tokensNr. (post-proces)
Talen40 language-locales (en-US, en-GB, es-ES, fr-FR, de-DE, ja-JP, ko-KR, zh-CN, hi-IN, ar, ...)25 Europees
Standaard brok320 ms320 ms
Bundelgrootte612 MB (CoreML INT8); 538.6 MB (native MLX 5-bit)150 MB
Kies Nemotron wanneer...

...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/'