Nemotron Streaming

Hai mô hình ASR streaming của NVIDIA dùng chung target Swift NemotronStreamingASR. Cả hai đều là encoder FastConformer cache-aware 600M tham số kết hợp với decoder RNN-T, cả hai đều phát native dấu câu và viết hoa dưới dạng token BPE thông thường, cả hai đều chạy trên Apple Neural Engine qua CoreML, và phiên bản đa ngôn ngữ còn có thêm bundle MLX để suy luận thường trú trên GPU. Hãy chọn phiên bản phù hợp với ứng dụng của bạn:

Phiên bảnPhạm viChunk mặc địnhNguồn
Nemotron 3.5 Đa ngôn ngữ40 locale ngôn ngữ (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 (tiếng Anh)Chỉ tiếng Anh — bundle nhỏ hơn, độ trễ mặc định thấp hơn160 msnvidia/nemotron-speech-streaming-en-0.6b

Đặc tính chung

Kiến trúc

Ba mô hình CoreML chạy pipeline cho mỗi chunk âm thanh:

Thành phầnMô tả
EncoderFastConformer cache-aware 24 lớp, 1024 hidden. Nhận chunk mel 32 frame (mặc định 320 ms) cộng với sáu tensor state — cache attention KV [24, 1, 56, 1024], cache conv depthwise [24, 1, 1024, 8], loopback mel pre_cache, và one-hot language_mask 128 slot điều khiển prompt kernel.
Prompt kernelLinear(1152→2048) → ReLU → Linear(2048→1024) — chèn one-hot ngôn ngữ vào mỗi frame đã mã hoá, nên cùng một bộ 600M trọng số phục vụ cả 40 locale.
DecoderMạng dự đoán LSTM hai lớp, 640 hidden. Nhận token non-blank trước đó, phát embedding cùng state (h, c) được cập nhật.
JointHợp nhất đầu ra encoder và decoder thành logits trên 13 087 token BPE + blank. Dấu câu, viết hoa và tag theo ngôn ngữ chỉ là các token bổ sung trong từ vựng BPE — không có head riêng.

Không có head EOU

Khác với Parakeet-EOU, Nemotron không phát token chuyên biệt cho kết thúc phát ngôn. Hai cách phân đoạn audio liên tục thành các phát ngôn:

  1. VAD bên ngoài — ghép session với Silero VAD; khi im lặng kéo dài, gọi finalize() để commit phát ngôn hiện tại và createSession() cho phát ngôn kế.
  2. Biên dấu câu — khi transcript tạm thời kết thúc bằng ., ? hoặc !, coi đó là tín hiệu commit tự nhiên. Không cần mô hình thêm nhưng phụ thuộc vào việc audio có thực sự gây ra dấu câu kết thúc hay không.

Bundle

Bốn biến thể đã phát hành của Nemotron-3.5-ASR-Streaming-0.6B, cộng thêm mô hình chỉ tiếng Anh cũ hơn trên cùng target Swift:

Phiên bảnTrên đĩaĐỉnh streaming (M5 Pro)HuggingFace
CoreML INT8 (mặc định)612 MB1238 MBaufklarer/Nemotron-3.5-ASR-Streaming-0.6B-CoreML-INT8
MLX bf161217 MB1474 MBaufklarer/…MLX-bf16
MLX 8-bit732 MB997 MBaufklarer/…MLX-8bit
MLX 4-bit473 MB747 MBaufklarer/…MLX-4bit
Chỉ tiếng Anh (CoreML INT8)~580 MBaufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8

Nguồn: nvidia/nemotron-3.5-asr-streaming-0.6b (đa ngôn ngữ) và nvidia/nemotron-speech-streaming-en-0.6b (chỉ tiếng Anh).

Lượng tử hoá gần như không mất chất lượng: CoreML INT8, MLX bf16 và MLX 8-bit nằm trong ±0,3 pp WER so với nguồn fp32 NeMo. MLX 4-bit tốn ~6 pp WER trung bình để đổi lấy kích thước trên đĩa và RSS streaming nhỏ nhất.

Bắt đầu nhanh — phiên âm theo lô

Tuân thủ SpeechRecognitionModel, nên có thể đặt vào bất kỳ code path nào nhận mô hình STT tổng quát:

import NemotronStreamingASR

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

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 text, isFinal (chỉ true cho partial cuối sau finalize()), confidencesegmentIndex tăng đơn điệu.

API session dài (đầ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) }

Dòng lệnh

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 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
Decoder2-layer LSTM, RNN-T1-layer LSTM, RNN-T
Phát hiện EOUNgoài (VAD hoặc dấu câu)Token <EOU> tích hợp
Dấu câuToken BPE native inlineKhông (hậu xử lý)
Ngôn ngữ40 locale ngôn ngữ (en-US, en-GB, es-ES, fr-FR, de-DE, ja-JP, ko-KR, zh-CN, hi-IN, ar, …)25 ngôn ngữ châu Âu
Chunk mặc định320 ms320 ms
Kích thước bundle612 MB (CoreML INT8); 473 MB (MLX 4-bit)~150 MB
Chọn Nemotron khi…

…bạn cần phiên âm streaming đa ngôn ngữ (bất kỳ trong 40 locale) với dấu câu và viết hoa sẵn dùng, và chấp nhận tự phân đoạn phát ngôn (VAD hoặc tín hiệu dấu câu). Đối với dictation iOS hạn chế chỉ tiếng Anh có tín hiệu EOU tích hợp, Parakeet-EOU vẫn là lựa chọn nhỏ hơn.