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ản | Phạm vi | Chunk mặc định | Nguồ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 ms | nvidia/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ơn | 160 ms | nvidia/nemotron-speech-streaming-en-0.6b |
Đặc tính chung
- Dấu câu và viết hoa native — không cần hậu xử lý; dấu chấm, dấu phẩy và case là một phần của từ vựng
- 600M tham số — encoder FastConformer cache-aware 24 lớp + decoder LSTM RNN-T 2 lớp + mạng joint
- Streaming cache-aware — cache attention và conv chảy giữa các chunk để giữ ngữ cảnh liên tục qua biên chunk
- Nhiều kích thước chunk — đa ngôn ngữ: 80, 320, 560, 1120 ms (mặc định 320 ms); tiếng Anh: 80, 160, 560, 1120 ms (mặc định 160 ms)
- Chỉ có ở bản đa ngôn ngữ: prompt kernel (Linear 1152→2048→1024) chèn one-hot slot ngôn ngữ vào từng frame đã mã hoá, nên cùng một bộ trọng số phục vụ cả 40 locale. Phiên bản chỉ tiếng Anh không có prompt kernel.
Kiến trúc
Ba mô hình CoreML chạy pipeline cho mỗi chunk âm thanh:
| Thành phần | Mô tả |
|---|---|
| Encoder | FastConformer 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 kernel | Linear(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. |
| Decoder | Mạ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. |
| Joint | Hợ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:
- 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ế. - 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ản | Trên đĩa | Đỉnh streaming (M5 Pro) | HuggingFace |
|---|---|---|---|
| CoreML INT8 (mặc định) | 612 MB | 1238 MB | aufklarer/Nemotron-3.5-ASR-Streaming-0.6B-CoreML-INT8 |
| MLX bf16 | 1217 MB | 1474 MB | aufklarer/…MLX-bf16 |
| MLX 8-bit | 732 MB | 997 MB | aufklarer/…MLX-8bit |
| MLX 4-bit | 473 MB | 747 MB | aufklarer/…MLX-4bit |
| Chỉ tiếng Anh (CoreML INT8) | ~580 MB | — | aufklarer/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()), confidence và segmentIndex 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.6B | Parakeet-EOU 120M | |
|---|---|---|
| Tham số | 600M | 120M |
| Encoder | FastConformer 24 lớp, 1024 hidden | FastConformer 17 lớp, 512 hidden |
| Decoder | 2-layer LSTM, RNN-T | 1-layer LSTM, RNN-T |
| Phát hiện EOU | Ngoài (VAD hoặc dấu câu) | Token <EOU> tích hợp |
| Dấu câu | Token BPE native inline | Khô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 định | 320 ms | 320 ms |
| Kích thước bundle | 612 MB (CoreML INT8); 473 MB (MLX 4-bit) | ~150 MB |
…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.