Nemotron Streaming

Nemotron-Speech-Streaming-0.6B là ASR streaming tiếng Anh độ trễ thấp của NVIDIA: một encoder FastConformer có cache kết hợp với decoder RNN-T, kèm chấm câu và viết hoa tự nhiên được phát ra dưới dạng các token BPE thông thường. Gói CoreML trên trang này đi kèm encoder đã được palettize INT8 và chạy trên Apple Neural Engine.

Là gì

Kiến trúc

Ba mô hình CoreML được nối tiếp theo từng chunk âm thanh:

Thành phầnMô tả
EncoderFastConformer có cache 24 lớp, 1024 hidden. Nhận chunk mel 17 frame (160 ms mặc định) cộng với năm tensor trạng thái — KV cache attention [24, 1, 70, 1024], cache convolution depthwise [24, 1, 1024, 8] và một pre_cache mel loopback chèn lại audio quá khứ gần để các ranh giới chunk duy trì liên tục.
DecoderMạng dự đoán LSTM hai lớp, 640 hidden. Tiêu thụ token non-blank trước đó, phát ra một embedding cộng với trạng thái (h, c) đã cập nhật.
JointHợp nhất đầu ra encoder và decoder thành logits trên 1024 token BPE + blank. Chấm câu và viết hoa chỉ là thêm các token trong vốn BPE — không có head bổ sung.

Không có head EOU

Khác với Parakeet-EOU, Nemotron không phát ra token end-of-utterance dành riêng. Hai cách để phân đoạn audio liên tục thành các câu thoại:

  1. VAD bên ngoài — ghép phiên với Silero VAD; khi im lặng kéo dài, gọi finalize() để xác nhận câu thoại hiện tại và createSession() cho câu kế tiếp.
  2. Ranh giới chấm câu — khi bản chuyển một phần kết thúc bằng ., ? hoặc !, xem đó như một tín hiệu xác nhận tự nhiên. Không cần mô hình thêm, nhưng phụ thuộc việc audio thực sự dẫn đến chấm câu cuối câu.

Mô hình

Thành phầnDung lượngHuggingFace
Encoder (INT8)562 MBaufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8
Decoder14 MB
Joint3.3 MB

Upstream: nvidia/nemotron-speech-streaming-en-0.6b (checkpoint .nemo NeMo).

Bắt đầu nhanh — chuyển lời nói theo lô

Tuân thủ SpeechRecognitionModel, nên có thể lắp vào bất kỳ luồng code nào nhận một mô hình STT chung:

import NemotronStreamingASR

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

Bắt đầu nhanh — streaming bất đồng bộ

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

Mỗi PartialTranscript mang theo text, isFinal (chỉ true với phần partial cuối cùng sau finalize()), confidence và một segmentIndex đơn điệu.

API phiên dài hạn (đầu vào micro)

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 so với Parakeet-EOU

Nemotron Streaming 0.6BParakeet-EOU 120M
Tham số600M120M
EncoderFastConformer 24 lớp, 1024 hiddenFastConformer 17 lớp, 512 hidden
DecoderLSTM 2 lớp, RNN-TLSTM 1 lớp, RNN-T
Phát hiện EOUBên ngoài (VAD hoặc chấm câu)Token <EOU> tích hợp
Chấm câuToken BPE tự nhiên nội tuyếnKhông (hậu xử lý)
Ngôn ngữChỉ tiếng Anh25 ngôn ngữ châu Âu
Chunk mặc định160 ms320 ms
Kích thước gói~580 MB~150 MB
Hãy chọn Nemotron khi…

…bạn muốn bản chuyển lời nói tiếng Anh chất lượng cao hơn với chấm câu và viết hoa sẵn dùng, và bạn không ngại tự phân đoạn câu thoại (VAD hoặc tín hiệu chấm câu). Cho đọc chính tả iOS giới hạn tài nguyên với tín hiệu EOU tích hợp sẵn, Parakeet-EOU vẫn là lựa chọn nhỏ gọn và đơn giản hơn.