Nemotron Streaming

Nemotron-Speech-Streaming-0.6B, NVIDIA'nın düşük gecikmeli İngilizce akışlı ASR'sidir: RNN-T decoder ile eşleştirilmiş önbellek farkındalıklı bir FastConformer encoder ve yerel noktalama ile büyük harf kullanımı normal BPE token'ları olarak yayılır. Bu sitedeki CoreML paketi INT8 palettized encoder ile gelir ve Apple Neural Engine üzerinde çalışır.

Nedir

Mimari

Ses parçası başına boru hattına alınan üç CoreML modeli:

BileşenAçıklama
Encoder24 katmanlı önbellek farkındalıklı FastConformer, 1024 hidden. 17 frame'lik bir mel parçası (varsayılan 160 ms) artı beş durum tensörü alır — attention KV önbelleği [24, 1, 70, 1024], depthwise conv önbelleği [24, 1, 1024, 8] ve parça sınırlarının sürekli kalması için yakın geçmiş sesi başa ekleyen bir pre_cache mel geri besleme.
Decoderİki katmanlı LSTM tahmin ağı, 640 hidden. Önceki non-blank token'ı tüketir, bir gömme ve güncellenmiş (h, c) durumu yayar.
JointEncoder ve decoder çıktılarını 1024 BPE token + blank üzerinde logit'lere kaynaştırır. Noktalama ve büyük harf kullanımı BPE sözcük dağarcığındaki ek token'lardan ibarettir — fazladan kafa yoktur.

EOU kafası yok

Parakeet-EOU'nun aksine, Nemotron özel bir end-of-utterance token'ı yaymaz. Sürekli sesi söylenişlere ayırmanın iki yolu:

  1. Harici VAD — oturumu Silero VAD ile eşleştirin; sürekli sessizlikte, mevcut söylenişi kaydetmek için finalize(), bir sonraki için createSession() çağırın.
  2. Noktalama sınırı — kısmi transkript ., ? veya ! ile bittiğinde, bunu doğal bir kaydetme ipucu olarak değerlendirin. Ek model gerekmez, ancak sesin gerçekten son noktalama getirmesine bağlıdır.

Model

BileşenBoyutHuggingFace
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 checkpoint).

Hızlı başlangıç — toplu transkripsiyon

SpeechRecognitionModel'a uyduğu için, genel bir STT modeli alan herhangi bir kod yoluna takılabilir:

import NemotronStreamingASR

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

Hızlı başlangıç — eşzamansız akış

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

Her PartialTranscript, text, isFinal (yalnızca finalize() sonrası son kısmi için true), confidence ve monoton bir segmentIndex taşır.

Uzun ömürlü oturum API'si (mikrofon girişi)

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                    # batch
speech transcribe recording.wav --engine nemotron --stream           # streaming final
speech transcribe recording.wav --engine nemotron --stream --partial # with partials

Nemotron vs Parakeet-EOU

Nemotron Streaming 0.6BParakeet-EOU 120M
Parametre600M120M
Encoder24 katmanlı FastConformer, 1024 hidden17 katmanlı FastConformer, 512 hidden
Decoder2 katmanlı LSTM, RNN-T1 katmanlı LSTM, RNN-T
EOU algılamaHarici (VAD veya noktalama)Yerleşik <EOU> token
NoktalamaYerel satır içi BPE token'larıYok (son işlem)
DillerYalnızca İngilizce25 Avrupa dili
Varsayılan parça160 ms320 ms
Paket boyutu~580 MB~150 MB
Nemotron'u şu durumlarda seçin…

…kutudan çıktığı gibi noktalama ve büyük harf kullanımıyla daha yüksek kaliteli İngilizce transkript istiyorsanız ve söylenişleri kendiniz segmentlere ayırmaya (VAD veya noktalama ipucu) razıysanız. Yerleşik EOU sinyaliyle kısıtlı cihaz iOS diktesi için Parakeet-EOU hâlâ daha küçük ve daha basit seçenektir.