Tłumaczenie automatyczne · Oryginał angielski

Streaming Nemotron

Dwa modele NVIDIA streaming ASR współdzielą się NemotronStreamingASR Swift docelowy. Oba są 600M- świadomość parametru cache- enkodery FastConformer połączone z dekoderem RNN- T, zarówno emitują natywną punktualizację i kapitalizację jako zwykłe żetony BPE, zarówno uruchomione na Apple Neural Engine przez CoreML, a wielojęzyczny wariant dodatkowo ma pakiety MLX dla GPU- rezydent. Wybierz ten, który pasuje do aplikacji:

WariantZakresDomyślny kawałekUpstream
Nemotron 3.5 Wielojęzyczny40 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 (angielski)Tylko angielski - mniejszy pakiet, niższe domyślne opóźnienie160 msnvidia / nemotron-speech-streaming-en-0.6b

Właściwości dzielone

Architektura

Trzy modele CoreML wbudowane na dźwięk:

SkładnikOpis
Enkoder24-warstwa cache- świadomość FastConformer, 1024 Ukryte. 32-frame mel chunk (320 ms default) plus sześć stresorów stanu - uwaga KV cache [24, 1, 56, 1024], depthwise conv cache [24, 1, 1024, 8], pre_cache Pętla melowa i language_mask 128- slot one- hot który napędza szybkie jądro.
Jądro szybkieLiniowy (1152 → 2048) → ReLU → Liniowy (2048 → 1024) - składa język jeden - gorąco w każdej zakodowanej ramce, więc te same 600M wagi służą wszystkim 40 językoznawstwo-locales.
DekoderDwuwarstwowa sieć prognozowania LSTM, ukryta 640. Spożywa poprzedni nie-pusty symbol, emituje osadzanie plus zaktualizowane (h, c) Stan.
WspólneZabezpiecza wyjścia kodera i dekodera do logi ponad 13 087 żetonów BPE + puste. Punktualizacja, kapitalizacja i znaczniki języka nadjęzykowego są po prostu więcej żetonów w słowniku BPE - bez dodatkowych głowic.

Brak głowy EOU

W przeciwieństwie do Parakeet- EOU, Nemotron nie emituje dedykowanego symbolu end- of- utterance. Dwa sposoby segmentacji ciągłego dźwięku w wypowiedzi:

  1. Zewnętrzne VAD - sparuj sesję z Silero VAD; po długotrwałej ciszy, wywołaj finalize() do zobowiązania bieżącego wypowiedzenia i createSession() dla następnego.
  2. Granica punktualności - gdy częściowy zapis kończy się ., ?lub !Nie ma dodatkowego modelu, ale zależy to od dźwięku wywołującego interpunkcję terminala.

Zespoły

Pięć opublikowanych wariantów Nemotron-3.5-ASR-Streaming-0.6B, plus starszy model tylko angielski na tym samym celu Swift:

WariantDysk pokładowySzczyt strumieniowy (M5 Pro)HuggingFace
CoreML INT8 (domyślnie)612 MB1238 MBaufklarer / Nemotron-3.5-ASR-Streaming-0.6B-CoreML-INT8
MLX bf161217 MB1474 MBaufklarer /... MLX-bf16
MLX 5- bit (wartość domyślna)538.6 MB800 MBaufklarer /... MLX-5bit
MLX 8- bit732,6 MB992 MBaufklarer /... MLX-8bit
MLX 4- bit473 MB747 MBaufklarer /... MLX-4bit
Tylko angielski (CoreML INT8)~ 580 MB—aufklarer / Nemotron-Speech-Streaming-0.6B-CoreML-INT8

Upstream: nvidia / nemotron-3.5-asr-streaming-0.6b (wielojęzyczny) oraz nvidia / nemotron-speech-streaming-en-0.6b (tylko angielski).

Na faktyczne cache-aware 320 Ścieżka ms, MLX 5-bitowe średnie 11.53% WER w ciągu sześciu FLEURS języki kontra 11.01% zamiast MLX 8- Bit. 5-bit domyślnie zapisuje o 193 MB na dysku i 192 MB szczytowego RSS; MLX 4-bit pozostaje eksportem badawczym, ponieważ jego utrata jakości jest większa.

Szybki start - natywny strumieniowanie MLX

W Swift runtime wspiera opublikowane MLX 5-bit i 8-bit paczki. Domyślnie do 5-bit, utrzymuje każdą sesję w pamięci niezależnej i serializuje wniosek, gdy sesje dzielą jeden załadowany model. MLX wykorzystuje zatwierdzony 320 ms geometria i obecnie nie ujawnia słowa zwiększające.

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

Szybki start - transkrypcja partii CoreML

Zgodnie z SpeechRecognitionModel, więc spada do dowolnej ścieżki kodu, który ma ogólny model STT:

import NemotronStreamingASR

let model = try await NemotronStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000, language: "en-US")

Szybki start - strumieniowanie async

for await partial in model.transcribeStream(audio: samples, sampleRate: 16000) {
    if partial.isFinal { print("FINAL: \(partial.text)") }
    else               { print("... \(partial.text)") }
}

Każdy PartialTranscript przewożone text, isFinal (prawda tylko dla ostatniej części po finalize()), confidence, i monotonii segmentIndex.

Sesja długowieczna API (wejście mikrofonu)

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
Parametry600M120M
Enkoder24- warstwa FastConformer, 1024 ukryte17-warstwa FastConformer, 512 ukryte
Dekoder2-warstwa LSTM, RNN- T1-warstwa LSTM, RNN- T
Wykrywanie EOUZewnętrzne (VAD lub interpunkcja)Budowa - w <EOU> token
PunktualizacjaNative inline żetony BPENie (po zakończeniu procesu)
Języki40 Language- locales (en- US, en- GB, es- ES, fr- FR, de- DE, ja- JP, ko- KR, zh- CN, hi- IN, ar,...)25 Europejska
Domyślny kawałek320 ms320 ms
Rozmiar zestawu612 MB (CoreML INT8); 538.6 MB (rodzimy MLX 5- bit)- 150 MB
Wybierz Nemotron kiedy...

... musisz wielojęzyczny strumieniowa transkrypcja (dowolny z 40 language- locales) z interpunkcją i kapitalizacją z pudełka, i jesteś OK segmentacji wypowiedzi siebie (VAD lub cue interpunkcji). Dla ograniczonego urządzenia iOS dictation to angielski - tylko z budynkiem w EOU sygnał, Parakeet- EOU jest nadal mniejszy wybór.

Badania regresji

Regresja słów na siebie nakłada się na sprawdzanie w WAV z dwoma głosami Kokoro: drugi rozpoczyna 320 ms później i jest atenuowany przez 3 dB. Każdy dekoder musi produkować niepusty transkrypt bez znaczników językowych. Stałe audio usuwa zmienność syntezy na żywo, a nocny przepływ pracy działa Nemotron w swoim własnym odłamku. Uruchom regresję Core ML tylko z tego samego ustawienia CPU- jak nocnie:

SPEECH_COREML_COMPUTE_UNITS=cpuOnly \
  swift test --disable-sandbox --no-parallel \
    --filter '^NemotronStreamingASRTests[.]E2ENemotronHarshAudioTests/'