Nemotron ストリーミング

NVIDIA のストリーミング ASR モデル 2 種類が NemotronStreamingASR Swift ターゲットを共有します。いずれも 600M パラメータのキャッシュ対応 FastConformer エンコーダと RNN-T デコーダの組み合わせで、句読点と大文字化を通常の BPE トークンとしてネイティブに出力し、CoreML 経由で Apple Neural Engine 上で動作します。多言語版にはさらに GPU 常駐推論用の MLX バンドルも用意されています。用途に合わせて選択してください:

バリアント対応デフォルトチャンクアップストリーム
Nemotron 3.5 多言語版40 言語ロケール(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(英語版)英語のみ — バンドルが小さく、デフォルトレイテンシが低い160 msnvidia/nemotron-speech-streaming-en-0.6b

共通プロパティ

アーキテクチャ

音声チャンクごとに 3 つの CoreML モデルをパイプライン実行:

コンポーネント説明
エンコーダ24 層のキャッシュ対応 FastConformer、隠れ次元 1024。32 フレームの mel チャンク(デフォルト 320 ms)に加え、6 つの状態テンソル — attention KV キャッシュ [24, 1, 56, 1024]、depthwise conv キャッシュ [24, 1, 1024, 8]、pre_cache mel ループバック、そしてプロンプトカーネルを駆動する 128 スロットのワンホット language_mask — を受け取ります。
プロンプトカーネルLinear(1152→2048) → ReLU → Linear(2048→1024) — 言語のワンホットを各エンコード済みフレームに織り込み、同じ 600M の重みで 40 言語ロケールすべてに対応します。
デコーダ2 層 LSTM 予測ネットワーク、隠れ次元 640。直前の非空白トークンを入力として、埋め込みと更新された (h, c) 状態を出力します。
Jointエンコーダとデコーダの出力を融合し、13 087 BPE トークン + 空白の logits を生成。句読点・大文字化・言語タグはすべて BPE 語彙内の追加トークンで、専用ヘッドはありません。

EOU ヘッドなし

Parakeet-EOU と異なり、Nemotron は専用の発話終端トークンを出力しません。連続音声を発話に分割する方法は 2 通り:

  1. 外部 VAD — セッションを Silero VAD と組み合わせ、無音が続いたら finalize() を呼び出して現在の発話をコミットし、次の発話用に createSession() を呼びます。
  2. 句読点境界 — 部分文字起こしが .?! で終わったら自然なコミットの合図とみなします。追加モデル不要ですが、終端句読点が実際に生成されることに依存します。

バンドル

Nemotron-3.5-ASR-Streaming-0.6B の公開バリアントは 4 つ、それに加えて同じ Swift ターゲットに乗る旧来の英語専用モデル:

バリアントディスク使用量ストリーミングピーク(M5 Pro)HuggingFace
CoreML INT8 (デフォルト)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
英語専用(CoreML INT8)~580 MBaufklarer/Nemotron-Speech-Streaming-0.6B-CoreML-INT8

アップストリーム: nvidia/nemotron-3.5-asr-streaming-0.6b(多言語版)および nvidia/nemotron-speech-streaming-en-0.6b(英語専用)。

量子化はほぼロスレス:CoreML INT8、MLX bf16、MLX 8-bit は fp32 NeMo ソースに対して WER ±0.3 pp 以内に収まります。MLX 4-bit は平均 WER で約 6 pp の損失と引き換えに、最小のディスクサイズとストリーミング RSS を実現します。

クイックスタート — バッチ文字起こし

SpeechRecognitionModel に準拠しているため、汎用 STT モデルを受け取るあらゆるコードパスにそのまま組み込めます:

import NemotronStreamingASR

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

クイックスタート — 非同期ストリーミング

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

PartialTranscript には textisFinalfinalize() 後の最後の部分結果のみ true)、confidence、単調増加の segmentIndex が含まれます。

長時間セッション API(マイク入力)

let session = try model.createSession(language: "en-US")

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

コマンドライン

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
speech transcribe meeting.wav   --engine nemotron --language de-DE                    # any of the 40 locales

Nemotron と Parakeet-EOU の比較

Nemotron Streaming 0.6BParakeet-EOU 120M
パラメータ600M120M
エンコーダ24 層 FastConformer、隠れ次元 102417 層 FastConformer、隠れ次元 512
デコーダ2-layer LSTM, RNN-T1-layer LSTM, RNN-T
EOU 検出外部(VAD または句読点)内蔵 <EOU> トークン
句読点BPE トークンとしてネイティブなし(後処理)
言語40 言語ロケール(en-US、en-GB、es-ES、fr-FR、de-DE、ja-JP、ko-KR、zh-CN、hi-IN、ar、…)欧州 25 言語
デフォルトチャンク320 ms320 ms
バンドルサイズ612 MB(CoreML INT8)/473 MB(MLX 4-bit)~150 MB
Nemotron を選ぶべき場面…

多言語のストリーミング文字起こし(40 言語ロケールのいずれか)が必要で、句読点と大文字化を箱から出してすぐ得たく、発話分割は自分で行ってよい場合(VAD または句読点キュー)。組み込み EOU 信号を持つ端末制約付き iOS ディクテーション(英語のみ)であれば、Parakeet-EOU の方が依然として小さい選択肢です。