Traduzione automatica · Originale inglese
Nemotron Streaming
Due modelli NVIDIA in streaming ASR condividono NemotronStreamingASR Swift Entrambi sono bersaglio. 600Gli encoder FastConformer con cache a parametri M abbinati ad un decoder RNN-T, emettono sia la punteggiatura nativa che la capitalizzazione come token BPE regolari, entrambi eseguiti sull'Apple Neural Engine via via via via CoreML, e la variante multilingue ha anche MLX fasci per l'inferenza di GPU-resident. Scegli quello che corrisponde alla tua applicazione:
| Variante | Copertura | Blocco predefinito | A monte |
|---|---|---|---|
| Nemotron 3.5 multilingue | 40 lingua-locali | 320 ms | Nvidia/nemotron-3.5-asr-streaming-0.6b |
| Nemotron Speech Streaming (inglese) | Solo inglese — bundle più piccolo, latenza di default inferiore | 160 ms | Nvidia/nemotron-speech-streaming-en-0.6b |
Proprietà condivise
- punteggiatura e capitalizzazione di carattere non necessaria; periodi, virgole e casi fanno parte del vocabolario
- 600M parametri — cache-aware 24 strati FastConformer encoder + decoder 2 strati LSTM RNN-T + rete comune
- Cache-aware streaming — l'attenzione e le cache conv fluiscono a pezzi per un contesto continuo attraverso i confini di pezzi
- Taglie multiple di pezzi — multilingue: 80, 320, 560, 1120 ms (S).320 ms default); Inglese: 80, 160, 560, 1120 ms (S).160 ms default)
- Multilingual-only : un kernel del prompt (Linear 1152→2048→1024) folda uno slot linguistico a un hot in ogni frame codificato, quindi gli stessi pesi servono tutti i 40 lingua-locali. La variante inglese-only non ha un kernel rapido.
Architettura
Tre modelli CoreML conduttivi per gruppo audio:
| Componenti | Designazione |
|---|---|
| Encoder | 24-layer cache-aware FastConformer, 1024 nascosto, prende un 32- fotogramma mel chunk (320 ms default) più sei tensori di stato — attenzione cache KV [24, 1, 56, 1024], cache del conv profondo [24, 1, 1024, 8], pre_cache mel loopback, e un language_mask 128-slot one-hot che guida il kernel del prompt. |
| kernel Prompt | Lineare(1152→2048) → ReLU → Lineare(2048→1024) — piega la lingua a un punto in ogni cornice codificata in modo che gli stessi pesi 600M servano tutti i 40 lingua-locali. |
| Decoder | Rete di previsione LSTM a due strati, nascosta 640. Consuma il precedente token non-blank, emette un incorporamento più aggiornato (h, c) Stato. |
| Joint Joint Joint | Fusibili encoder e decoder uscite in logits oltre 13 087 BPE tokens + blank. Puntuazione, capitalizzazione e tag per lingua sono solo più gettoni nel vocab BPE — nessuna testa in più. |
No, no, no.
A differenza di Parakeet-EOU, Nemotron non emette un token end-of-utterance dedicato. Due modi per segmentare l'audio continuo in espressioni:
- VAD esterno — abbinare la sessione con Silero VAD; su silenzio sostenuto, chiamata
finalize()per commettere l'enunciazione attuale ecreateSession()per il prossimo. - Limiti di valutazione — quando la trascrizione parziale termina in
.,?o!
Bundles
Cinque varianti pubblicate di Nemotron-3.5-ASR-Streaming-0.6B, più il modello di sola inglese più vecchio sullo stesso obiettivo Swift:
| Variante | Su richiesta | Picco di trasmissione ( 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 (predefinito nativo) | MB 538.6 | MB 800 | aufklarer/...MLX-5bit |
| MLX 8 bit | 732.6 MB | 992 MB | aufklarer/...MLX-8bit |
| MLX 4-bit | MB 473 | MB 747 | aufklarer/...MLX-4bit |
| Solo in inglese ( CoreML INT8) | ~ 580 MB | — | aufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8 |
A monte: Nvidia/nemotron-3.5-asr-streaming-0.6b (multilingue) e Nvidia/nemotron-speech-streaming-en-0.6b (solo in inglese).
Sulla cache-aware reale 320 sentiero ms, MLX 5-bit medie 11.53% WER attraverso sei FLEURS lingue contro 11.01% per MLX 8- Il mio amico. 5-bit default salva circa 193 MB su disco e 192 MB di picco RSS; MLX 4-bit rimane un'esportazione di ricerca perché la sua perdita di qualità è più grande.
Avvio rapido — nativo MLX
Il Swift runtime supporta il pubblicato MLX 5-bit e 8-bit bundle. 5-bit, mantiene le cache di ogni sessione indipendenti e serializza l'inferenza quando le sessioni condividono un modello caricato. MLX utilizza il validato 320 ms geometria e attualmente non espongono la parola che aumenta.
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
Avvio rapido — CoreML
Conformi a SpeechRecognitionModel, così si scende in qualsiasi percorso di codice che prende un modello STT generico:
import NemotronStreamingASR
let model = try await NemotronStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000, language: "en-US")
Avvio rapido — lo streaming asinc
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
if partial.isFinal { print("FINAL: \(partial.text)") }
else { print("... \(partial.text)") }
}
Ciascuno PartialTranscript trasporta text, isFinal (vero solo per l'ultimo parziale dopo finalize()), confidence, e un monotonico segmentIndex.
Sessione di lunga durata API (input dinamico)
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 | |
|---|---|---|
| Parametri | 600M | 120M |
| Encoder | 24 strati FastConformer, 1024 nascosto | 17 strati FastConformer, 512 nascosto |
| Decoder | 2 strati LSTM, RNN-T | 1 strato LSTM, RNN-T |
| Rilevamento EOU | Esterno (VAD o punteggiatura) | Incorporato <EOU> token |
| Puntuazione | Token BPE in linea nativo | No (post-processo) |
| Lingue | 40 lingua-locali | 25 euro |
| Blocco predefinito | 320 ms | 320 ms |
| Dimensione del Bundle | 612 MB ( CoreML INT8); 538.6 MB (nativo MLX 5-bit) | ~ 150 MB |
...è necessario multilingue multilingue trascrizione di streaming (qualsiasi lingua-locale 40) con punteggiatura e capitalizzazione fuori dalla scatola, e sei OK segmentando pronuncia te stesso (VAD o punctuation cue). Per il distacco iOS deviazione che è inglese-solo con un segnale EOU incorporato, Parakeet-EOU scelta è ancora più piccola.
Test di regressione
La regressione a sovrapposizione utilizza un check-in WAV con due Kokoro voci: il secondo inizia 320 ms più tardi ed è attenuato da 3 dB. Ogni decodificatore deve produrre una trascrizione non vuota senza tag di lingua. L'audio fisso rimuove la variabilità della sintesi dal vivo, e il flusso di lavoro notturno corre Nemotron nel proprio shard. Core ML regressione con la stessa impostazione della CPU solo di notte:
SPEECH_COREML_COMPUTE_UNITS=cpuOnly \
swift test --disable-sandbox --no-parallel \
--filter '^NemotronStreamingASRTests[.]E2ENemotronHarshAudioTests/'