Maskinöversättning · Engelskt original
Nemotron Streaming
Två NVIDIA streaming ASR modeller delar NemotronStreamingASR Swift-målet. Båda är 600M-parameter cache-aware FastConformer-kodare parade med en RN-T-avkodare, både avger infödda skiljetecken och kapitalisering som vanliga BPE-tokens, båda körs på Apple Neural Engine via CoreML, och den flerspråkiga varianten har dessutom MLX buntar för GPU-bostadsinferens.
| Variant | Täckning | Default chunk | Upstream |
|---|---|---|---|
| Nemotron 3.5 Multilingual | 40 språklokaler (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 (engelska) | Engelska bara - mindre bunt, lägre standard latens | 160 ms | nvidia/nemotron-speech-streaming-en-0.6b |
Delade egenskaper
- Nativa skiljetecken och kapitalisering - ingen efterbehandlare behövs; perioder, kommatecken och fallet är en del av ordförrådet
- 600M parametrar -- cache-aware 24-lager FastConformer-kodare + 2-lager LSTM RN-T-dekoder + gemensamt nätverk
- Cache-aware streaming - uppmärksamhet och konv caches flöde chunk-to-chunk för kontinuerlig kontext över bitgränser
- Multiple chunk sizes - flerspråkig: 80, 320, 560, 1120 ms (320 ms standard); Engelska: 80, 160, 560 , 1120 meter (160 ms standard).
- Multilingual-only: en snabb kärna (Linear 1152→2048→1024) viker en en-hetsspråkslot i varje kodad ram, så samma vikter tjänar alla 40 språk-lokaler. Den engelsk-bara varianten har ingen snabb kärna.
Arkitektur
Tre CoreML modeller pipelined per audio chunk:
| Komponent | Beskrivning |
|---|---|
| Encoder | 24-lagers cache-aware FastConformer, 1024 dold. tar en 32-rams mel chunk (320 ms standard) plus sex statliga tensorer - uppmärksamhet KV cache [24, 1, 56, 1024], sidled konv cache [ 24, 1, 1024, 8], pre_cache mel loopback, och en language_mask 128-slot one-hot som driver prompel. |
| Prompt kernel | Linjär (1152 →2048) → ReLU → Linjär (2048 → 1024) - viker språket en-het i varje kodade ram så att samma 600M vikter tjänar alla 40 språklokaler. |
| Decoder | Tvåskikts LSTM-prediktionsnätverk, 640 dolda. Konsumerar den tidigare icke-blank token, avger ett inbäddnings plus uppdaterat (h, c)-tillstånd. |
| Joint | Fuses kodare och avkodare utgångar i logiter över 13 087 BPE tokens + blank. Punctuation, kapitalization och per-language taggar är bara fler tokens i BPE vocab - inga extra huvuden. |
Inget EOU huvud
Till skillnad från Parakeet-EOU avger Nemotron inte ett dedikerat tokenstoken. Två sätt att segmentera kontinuerligt ljud till yttranden:
- External VAD -- par sessionen med Silero VAD; på långvarig tystnad, ring
finalize()för att begå det aktuella yttrandet ochcreateSession() - Punctuation boundary - när den partiella transkript slutar i
.,?, eller!, behandla det som en naturlig begå cue. Ingen extra modell, men beror på att ljudet faktiskt inducerar terminal skiljetecken.
Bundles
Fem publicerade varianter av Nemotron-3.5-ASR-Streaming-0.6B, plus den äldre engelsk-bara modellen på samma Swift mål:
| Variant | On-disk | Streaming topp (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 5-bitars (infödd standard) | 538.6 MB | 800 MB | aufklarer/...MLX-5bit |
| MLX 8-bitars | 732,6 MB | 992 MB | aufklarer/...MLX-8bit |
| MLX 4-bitars | 473 MB | 747 MB | aufklarer/...MLX-4bit |
| Engelsk-bara (CoreML INT8) | ~580 MB | — | aufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8 |
Upstream: nvidia/nemotron-3.5-asr-streaming-0.6b (multilingual) och nvidi/nemotron-speech-streaming-en-0.6b (endast engelska).
På den faktiska cache-aware 320 ms bana, MLX 5-bitars genomsnitt 11,53% WER över sex FLEURS språk kontra 11,01% för MLX 8-bit. 5-bits standard sparar ca 193 MB på disk och 192 MB topp RSS; MLX 4-bit förblir en export eftersom dess förlust kvalitet är större.
Snabbstart - infödd MLX streaming
Den Swift runtime stöder den publicerade MLX 5-bitars och 8-bitar paket. Det standarder till 5-bit, håller varje sessions caches oberoende och serialiserar slutsatsen när sessioner delar en laddad modell. MLX använder den validerade 320 ms geometri och för närvarande inte exponerar ordet boosting.
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
Snabbstart - CoreML batch transkription
Överensstämmer med SpeechRecognitionModel, så det faller i någon kodbana som tar en generisk STT-modell:
import NemotronStreamingASR
let model = try await NemotronStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000, language: "en-US")
Snabbstart - Async streaming
for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
if partial.isFinal { print("FINAL: \(partial.text)") }
else { print("... \(partial.text)") }
}
Varje PartialTranscript bär text, isFinal (endast för den sista partiella efter finalize()), confidence och en monotonic segmentIndex.
Långlivad session API (mikinput)
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 | |
|---|---|---|
| Parametrar | 600M | 120M |
| Encoder | 24-skiktet FastConformer, 1024 dold | 17-skiktet FastConformer, 512 dolda |
| Decoder | 2-skikt LSTM, RNN-T | 1-skiktet LSTM, RNN-T |
| EOU-detektering | Extern (VAD eller punktering) | Inbyggd <EOU> token |
| Punctuation | Native Inline BPE Tokens | Ingen (efter-processen) |
| Språk | 40 språklokaler (en-US, en-GB, es-ES, fr-FR, de-DE, ja-JP, ko-KR, zh-CN, hi-IN, ar, ...) | 25 Europeiska |
| Default chunk | 320 ms | 320 ms |
| Bundle storlek | 612 MB (CoreML INT8); 538,6 MB (infödd MLX 5-bit) | ~150 MB |
...du behöver flerspråkig streaming transkription (någon av 40 språklokaler) med skiljetecken och kapitalisering ur lådan, och du är OK segmenterar yttranden själv (VAD eller skiljedomskö). För nedsatt enhet iOS diktation som endast är engelsk med en inbyggd EOU-signal är Parakeet-EOU fortfarande det mindre valet.
Regressionstester
Den överlappande-tal regression använder en incheckad incheckning WAV med två Kokoro röster: den andra startar 320 ms senare och är försvagad av 3 dB. Varje avkodning måste producera ett icke-tomt transkript utan språk taggar. Det fasta ljudet tar bort levande syntesvariation, och det nattliga arbetsflödet körs. Nemotron I sin egen skägg. Kör Core ML regression med samma CPU-bara inställning som nattlig:
SPEECH_COREML_COMPUTE_UNITS=cpuOnly \
swift test --disable-sandbox --no-parallel \
--filter '^NemotronStreamingASRTests[.]E2ENemotronHarshAudioTests/'