Nemotron 스트리밍

Nemotron-Speech-Streaming-0.6B는 NVIDIA의 저지연 영어 스트리밍 ASR입니다. 캐시 인식 FastConformer 인코더와 RNN-T 디코더가 결합되어 구두점과 대소문자를 일반 BPE 토큰으로 직접 출력합니다. 본 사이트의 CoreML 번들은 INT8 팔레트화 인코더를 포함하며 Apple Neural Engine에서 실행됩니다.

개요

아키텍처

오디오 청크마다 세 개의 CoreML 모델이 파이프라인으로 실행됩니다:

ComponentDescription
인코더24-layer cache-aware FastConformer, 1024 hidden. Takes a 17-frame mel chunk (160 ms default) plus five state tensors — attention KV cache [24, 1, 70, 1024], depthwise conv cache [24, 1, 1024, 8], and a pre_cache mel loopback that prepends recent-past audio so chunk boundaries stay continuous.
디코더Two-layer LSTM prediction network, 640 hidden. Consumes the previous non-blank token, emits an embedding plus updated (h, c) state.
JointFuses encoder and decoder outputs into logits over 1024 BPE tokens + blank. Punctuation and capitalization are just more tokens in the BPE vocab — no extra heads.

EOU 헤드 없음

Parakeet-EOU와 달리 Nemotron은 전용 발화 종료 토큰을 출력하지 않습니다. 연속 오디오를 발화로 분할하는 두 가지 방법:

  1. 외부 VAD — 세션을 Silero VAD와 결합. 지속적인 무음 시 finalize()로 현재 발화를 커밋하고 createSession()으로 다음 세션을 생성.
  2. 구두점 경계 — 부분 전사가 ., ?, !로 끝나면 자연스러운 커밋 신호로 처리. 추가 모델 불필요하지만 오디오가 실제로 종결 구두점을 유도하는지에 의존.

모델

ComponentSizeHuggingFace
Encoder (INT8)562 MBaufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8
Decoder14 MB
Joint3.3 MB

Upstream: nvidia/nemotron-speech-streaming-en-0.6b (NeMo .nemo 체크포인트).

빠른 시작 — 배치 전사

SpeechRecognitionModel을 따르므로 일반 STT 모델을 받는 어떤 코드 경로에도 그대로 사용할 수 있습니다:

import NemotronStreamingASR

let model = try await NemotronStreamingASRModel.fromPretrained()
let text = try model.transcribeAudio(audioSamples, sampleRate: 16000)

빠른 시작 — 비동기 스트리밍

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

PartialTranscripttext, isFinal(finalize() 이후 마지막 부분 결과에서만 true), confidence, 단조 증가하는 segmentIndex를 포함합니다.

지속 세션 API (마이크 입력)

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) }

커맨드라인

audio transcribe recording.wav --engine nemotron                    # batch
audio transcribe recording.wav --engine nemotron --stream           # streaming final
audio transcribe recording.wav --engine nemotron --stream --partial # with partials

Nemotron vs Parakeet-EOU

Nemotron Streaming 0.6BParakeet-EOU 120M
파라미터600M120M
Encoder24-layer FastConformer, 1024 hidden17-layer FastConformer, 512 hidden
Decoder2-layer LSTM, RNN-T1-layer LSTM, RNN-T
EOU 감지외부 (VAD 또는 구두점)내장 <EOU> 토큰
구두점네이티브 인라인 BPE 토큰없음 (후처리)
언어영어 전용유럽 25개 언어
기본 청크160 ms320 ms
번들 크기~580 MB~150 MB
Nemotron을 선택해야 할 때…

구두점과 대소문자가 기본으로 제공되는 더 높은 품질의 영어 전사가 필요하고 발화 분할을 직접 처리(VAD 또는 구두점 큐)할 수 있을 때. 내장 EOU 신호가 있는 제약된 iOS 받아쓰기에는 여전히 Parakeet-EOU가 더 작고 단순한 선택입니다.