NeMo ASRは、NVIDIAが公開している音声認識(ASR: Automatic Speech Recognition)のモデル群と、それを学習・推論するPythonツールキットです。2026年8月7日の NeMo Speech 3.0 でリポジトリ名とスコープが変わり、8月には推論だけを担うC++ランタイム NeMo-Speech.cpp も出ました。この記事では、どのモデルを選ぶか、日本語でどこまで認識できるか、PythonとC++のどちらでどう動かすかを、モデルカードと公式リポジトリ、そして手元のMacで同じ日本語音声を3モデルに通した結果で整理します。
まとめ:NeMo ASRの要点
- NeMo Speech 3.0(2026年8月7日)でリポジトリが
NVIDIA-NeMo/Speechへ改称し、LLMなど非音声のコレクションが分離された。本体はASR・TTS・音声処理・話者タスク・SpeechLMに絞られている。 - ダウンロード最多の Nemotron 3.5 ASR は、英語の平均WERではNVIDIA製で最も低い順位。Open ASR Leaderboard の原表(2026年10月20日取得)で Nemotron 3.5 ASR は10.51、parakeet-tdt-0.6b-v3 は6.51。ストリーミングと多言語が要件のときに選ぶモデルで、精度の最上位ではない。
- Parakeet TDT v3とCanary v2の「多言語」に日本語は入っていない。重みが公開されていて日本語で使えるのは Nemotron 3.5 ASR(ja-JP)と日本語専用の
parakeet-tdt_ctc-0.6b-jaの2系統(NIM経由でのみ提供される Parakeet RNNT 1.1B Multilingual も ja-JP に対応)。今回の日本語3文では、v3はローマ字風の文字列を返した(実測)。 - 同じ日本語音声3文では、日本語専用Parakeetの誤りが少なかった。Nemotron 3.5 ASRは「精度」を「制度」、「お問い合わせ」を「おとい合わせ」と誤り、日本語専用Parakeetの誤りは「レイテンシ」の1語だけ。カタカナの技術語は両方とも外した。
- Pythonで使うなら
pip install 'nemo-toolkit[asr]'(3.0.0・Python 3.12以上推奨)。GPUもPythonも無い環境なら NeMo-Speech.cpp の配布バイナリで動き、2019年のIntel製CPUでも実時間のおよそ2〜2.8倍の速さで処理できた。 - Nemotron 3.5 ASRのチャンク長は
att_context_sizeの右コンテキストで決まり、80msから1120msまでの5段階を再学習なしで切り替えられる。
NeMo Speech 3.0で変わった対象範囲とリポジトリ
「NeMo」「NeMo Framework」「NeMo Speech」「NeMo-Speech.cpp」と名前が並ぶうえ、2026年にリポジトリ自体が動きました。参照先を取り違えないよう、最初に整理します。
リポジトリ改称と非音声コレクションの分離
GitHub APIで確認すると、NVIDIA/NeMo も NVIDIA-NeMo/NeMo も、現在は NVIDIA-NeMo/Speech という同一リポジトリを返します。NeMo Speech 3.0 のリリースノートは「NeMo Speech 3.0 is the first major release after the repo split and rename to NVIDIA-NeMo/Speech」と書き、LLM・VLM・拡散モデル・エクスポート・評価ツールは NVIDIA-NeMo 組織の別リポジトリへ移ったと明記しています。「NeMoは自然言語処理も音声合成も包括する統合フレームワーク」という説明は、3.0以降の本体リポジトリには当てはまりません。非音声まで含んだ最後の版は 2.7.3(2026年4月23日)で、3.0.0より後の正式リリースは2026年10月20日時点で出ていません。分割後のLLM側の構成はNVIDIA NeMo Frameworkの解説で扱っています。
3.0は技術的負債の解消を主眼に置いた版で、リリースノートは「removed 800k deprecated LOC」「Unsupported ASR/TTS models and old tutorials were removed.」と書いています。旧チュートリアルを使う場合は、対象のNeMoバージョンと、利用するモデル・APIが現行版に残っているかを個別に確認してください。
NeMo・Speech NIM(Riva)・NeMo-Speech.cppの役割分担
音声認識の実行環境は3系統に分かれました。
| 系統 | 役割 | 実行に要るもの | 向く場面 |
|---|---|---|---|
| NeMo(Python) | 学習・微調整・評価・推論 | Python 3.12以上・PyTorch | 独自データで微調整 |
| Speech NIM(旧Riva) | 本番の推論サーバー | NVIDIA GPU・コンテナ | 常時稼働のAPI提供 |
| NeMo-Speech.cpp | ローカル推論 | 単体バイナリ(GPU任意) | PC・エッジで動かす |
NeMo Framework User Guideは「NeMo models that have been trained or customized using the NeMo Framework can be optimized and deployed with NVIDIA Riva.」と書き、本番提供は別製品の担当です。デプロイ側のドキュメントは現在 docs.nvidia.com/nim/speech/ 配下にあり、旧Rivaのパスはここへ転送されます。NeMo-Speech.cpp のREADMEは自らを「NVIDIA’s official solution for local speech inference」と位置づけ、ggmlで推論します。NeMoで動くモデルがすべてNIMやNeMo-Speech.cppでそのまま動くわけではない点は、後の日本語の章で具体的に扱います。
主力ASRモデルの選び分けとOpen ASR Leaderboardの値
この記事で比較する主力ASRモデルのエンコーダはFastConformer(Conformerを8倍ダウンサンプリングで軽くしたもの)で、違いはデコーダの方式(CTC・RNN-T・TDT・AED)と学習言語にあります。TDT(Token-and-Duration Transducer)はトークンと継続時間を分けて予測し、空白の予測を飛ばして速くした方式です。
WERとRTFx(実時間の何倍速で処理できるか)はOpen ASR Leaderboardの結果データセット(2026年10月19日のコミット)の実値、ダウンロード数はHugging Face APIの直近30日値で、いずれも2026年10月20日に取得しました。順位はこのCSVのavg列を昇順に並べて数えています。この原表は2026年10月7日に雑音・劣化音声のURGENT2024列が追加され、全モデルの値が入れ替わりました。9月以前の記事に載っている数字(Nemotron 3.5 ASRの7.88など)とは比べられません。
| モデルID | 主用途 | 言語 | 規模 | ライセンス | 日本語 | 英語平均WER | RTFx | 30日DL |
|---|---|---|---|---|---|---|---|---|
| nvidia/nemotron-3.5-asr-streaming-0.6b | ストリーミング多言語 | 40ロケール | 0.64B | OpenMDW-1.1 | 対応 | 10.51 | 1,348 | 1,221,712 |
| nvidia/parakeet-tdt-0.6b-v3 | バッチ多言語 | 25言語 | 0.6B | CC-BY-4.0 | 非対応 | 6.51 | 6,228 | 626,738 |
| nvidia/parakeet-tdt-0.6b-v2 | バッチ英語 | 英語 | 0.6B | CC-BY-4.0 | 非対応 | 6.43 | 6,148 | 197,418 |
| nvidia/canary-1b-v2 | 認識+翻訳 | 25言語 | 0.978B | CC-BY-4.0 | 非対応 | 7.91 | 1,854 | 172,429 |
| nvidia/nemotron-speech-streaming-en-0.6b | ストリーミング英語 | 英語 | 0.62B | NVIDIA Open Model License | 非対応 | 6.89 | 1,114 | 141,856 |
| nvidia/canary-qwen-2.5b | 認識+LLM後処理 | 英語 | 2.5B | CC-BY-4.0 | 非対応 | 6.37 | 882 | 39,670 |
| nvidia/parakeet-tdt_ctc-0.6b-ja | 日本語バッチ | 日本語 | 0.6B | CC-BY-4.0 | 専用 | — | — | 8,021 |
ダウンロード数の順位と精度の順位は一致しません。原表の65行中、Nemotron 3.5 ASRは58位で、OpenAIの whisper-large-v3(7.84)よりも数字が悪い。首位はプロプライエタリの OtterAI/speech-v3.1(3.88)で、NeMoで評価したNVIDIA製の最上位は canary-qwen-2.5b の29位です。ストリーミング機はチャンクごとに区切って処理する以上、バッチ専用機とは条件が違うので、用途を固定してから比べてください。
2026年10月19日には、同じParakeet v2・v3を第三者の推論エンジン fast-gpu-asr(SoundsGoodAI・TensorRT利用)で測った行が「(fast-gpu-asr)」付きで追加されました。avg は v2 が5.44、v3 が5.46と上位に見えますが、データセット別のWERは元の行とほぼ同じで、avg が低いのは平均に入る列の組み合わせが違うためです。同じ9列で平均し直すと、元のv2の行も5.45になります。違いが出るのは速度のほうで、RTFxはv2で6,148から16,943へ、v3で6,228から14,126へ上がっています。
Nemotron 3.5 ASR:40ロケールを1モデルで賄うストリーミング機
2026年6月4日公開の nvidia/nemotron-3.5-asr-streaming-0.6b は、英語専用の nemotron-speech-streaming-en-0.6b に言語IDの条件付けを加えた多言語版です。アーキテクチャは Cache-Aware FastConformer-RNNT で、従来の「バッファ型」ストリーミングが重複区間を計算し直すのに対し、キャッシュした文脈を再利用して新しいチャンクだけを処理します。句読点と大文字小文字の付与も組み込み済みです。
40ロケールは3段に分かれ、モデルカードでは追加学習なしで使える Transcription-ready が19ロケール、実用水準の Broad-coverage が13ロケール、微調整が前提の Adaptation-ready が8ロケールです。日本語(ja-JP)は最上位の Transcription-ready に入っています。ライセンスは OpenMDW-1.1 で、Parakeet系のCC-BY-4.0とは条項が別物なので、法務確認は系統ごとにやり直してください。
多言語化の代償として、英語の精度は英語専用版に劣ります。原表の平均WERは多言語版10.51に対し、同じ構造の英語専用版が6.89。カード自身も「We would recommend Nemotron ASR Streaming (English) model for English-only transcription use cases」と英語専用版を推しています。
Parakeet TDT v2・v3と英語専用のunified版
Parakeet はバッチ文字起こしの主力系統で、RTFxが6,000を超えます。ここでも世代の新しさは精度を意味しません。英語の平均WERは v2 が6.43、v3 が6.51で、英語だけ扱うなら旧世代のv2のほうが良い数字です。v3の価値は多言語化にありますが、その言語リストは en, es, fr, de, bg, hr, cs, da, nl, et, fi, el, hu, it, lv, lt, mt, pl, pt, ro, sk, sl, sv, ru, uk の25言語で、日本語は含まれません。
2026年4月7日には、1つのモデルでオフラインとストリーミングの両方を扱う英語専用の nvidia/parakeet-unified-en-0.6b も公開されています。カードのWERはオフラインで5.91、ストリーミングは待ち時間2.08秒で6.14、0.16秒で8.44、0.08秒で15.63と、待ち時間を詰めるほど急に悪化します。リーダーボードの原表には未掲載で、ライセンスはNVIDIA Open Model Licenseです。
Canary系の音声認識・翻訳機能と対応言語
Canary は認識に加えて音声翻訳を扱う系統です。nvidia/canary-1b-v2(2025年8月14日公開)は「25 European languages」が対象で、日本語は含まれません。LLMと組み合わせた canary-qwen-2.5b は英語専用で、平均WER 6.37とNVIDIA製では最良です。ただしカードは「The model is not expected to preserve any of the underlying LLM’s capabilities into speech modality.」と書いており、音声のまま推論や要約をさせる用途には向きません。音声翻訳ならCanary v2、英語の認識精度ならCanary-Qwenと分けて選びます。
日本語音声認識で選べるモデルと実測の比較
この章で比べるのは、重みが公開されていてNeMoやNeMo-Speech.cppで手元に置ける日本語対応モデル、Nemotron 3.5 ASR と日本語専用の parakeet-tdt_ctc-0.6b-ja です。NVIDIAにはもう1つ、Parakeet RNNT 1.1B Multilingual という ja-JP を含む25言語のモデルがありますが、こちらはSpeech NIM(NVIDIA Community Model License)として提供され、Hugging Faceに重みがありません。APIとして使う前提なら候補に入ります。公開値の比較に入る前に、同じ音声を通した結果を見ます。
同じ日本語音声3文で3モデルを比べた結果
macOSの読み上げ音声(Kyoko・16kHzモノラル)で3文を作り、NeMo-Speech.cpp v0.2.0 で文字起こししました。実行環境は Intel Core i9-9880H(2019年のMacBook Pro)のCPUのみです。日本語専用Parakeetは後述の変換スクリプトでGGUFにしています。機械音声の3文なので精度の評価ではなく、誤り方の傾向を見るための比較です。
- 本日の会議では、来月リリース予定の音声認識機能について、精度とレイテンシの評価結果を共有します。
- お問い合わせありがとうございます。ご注文の商品は明日の午前中にお届けする予定です。
- 東京都港区の本社で、二千二十六年十月二十日に新製品の発表会を開催しました。
| モデル | 「精度」 | 「レイテンシ」 | 「お問い合わせ」 | 「東京都港区」 | 数字 |
|---|---|---|---|---|---|
| Nemotron 3.5 ASR(言語自動判定) | 制度 | 冷点士 | おとい合わせ | 東京と港 | 漢数字 |
| Nemotron 3.5 ASR(ja-JP指定) | 制度 | 礼天使 | おとい合わせ | 東京都港 | 漢数字 |
| parakeet-tdt_ctc-0.6b-ja | 精度 | 0点視 | お問い合わせ | 東京都港区 | 算用数字 |
日本語専用Parakeetの誤りは「レイテンシ」の1語だけで、「2026年10月20日」も算用数字で返しました。Nemotron 3.5 ASRは言語を ja-JP と指定すると「東京都港」まで近づきましたが、同音異義語の「制度」は直りません。カタカナの技術語はどちらのモデルも外したので、製品名や社内用語が多い音声では、後述の単語ブースティングを改善候補として、補正前後の誤認識を比較してください。
Parakeet v3 に同じ音声を入れると、「Otoyaba se ariga to gozaimas, gochumon no shohinba…」のように日本語をローマ字風に書き起こしました。エラーにならず出力が返るので、言語リストを見ずに選ぶと検証の終盤まで気づきません。
parakeet-tdt_ctc-0.6b-ja のCERとRiva非対応という制約
日本語専用Parakeetのカードによれば、Hybrid FastConformer-TDT-CTC構成の0.6Bパラメータ版で、ReazonSpeech v2.0(35,000時間超)で学習しています。NeMo 1.23.0での評価値は次のとおりで、外部言語モデルなしのgreedyデコード、句読点除去と数値の単語化を行ったCER(%)です。
| デコーダ | JSUT basic5000 | MCV 8.0 test | MCV 16.1 test | TEDxJP-10k |
|---|---|---|---|---|
| TDT(既定) | 6.4 | 7.1 | 13.2 | 9.0 |
| CTC | 6.5 | 7.2 | 13.3 | 9.1 |
読み上げ中心のJSUTで6.4%、講演のTEDxJPで9.0%、話者と収録環境が雑多なCommon Voice 16.1で13.2%。素材で倍の開きが出るので、読み上げ原稿の数字で議事録の精度を約束すると外します。
カードには「Although this model isn’t supported yet by Riva」とあり、NVIDIAのデプロイ基盤(NIM)では対象外です。NeMo-Speech.cpp の既定モデル一覧にも入っていません。ただし公式の変換スクリプトはこのモデルのTDTヘッドを自動判定してGGUFに変換でき、上の実測はその変換物で動かしたものです。常時稼働のAPIとしてNVIDIAの基盤に載せる前提なら Nemotron 3.5 ASR、手元やエッジで精度を優先するなら日本語専用Parakeet、という分け方になります。
Nemotron 3.5 ASR の日本語CER(FLEURS)
Nemotron 3.5 ASRのカードは、日本語をFLEURSのテストセットでCERとして測っています。チャンク長別の値は次のとおりです。
| 条件 | 80ms | 160ms | 320ms | 560ms | 1.12s |
|---|---|---|---|---|---|
| 言語を指定 | 13.87 | 12.90 | 12.22 | 11.91 | 11.48 |
| 自動判定 | 14.97 | 13.85 | 13.00 | 12.38 | 11.66 |
言語を指定したほうが一貫して良く、80msの最短設定では1ポイント以上差が開きます。日本語だけを流すシステムなら言語は固定してください。日本語専用ParakeetのJSUT 6.4%とはテストセットが違うので、数字を直接比べることはできません。
ReazonSpeech NeMo版の更新状況
日本語ASRでよく挙がる ReazonSpeech のNeMo版 reazon-research/reazonspeech-nemo-v2 は、6億1,900万パラメータのRNN-Tモデル(Apache-2.0)です。Hugging Face上の重みは2024年2月13日の更新で止まっている一方、ツール側は更新が続いています。ReazonSpeechリポジトリの最新リリースはv3.0.0(2026年1月15日)で、pkg/nemo-asr/pyproject.toml は nemo_toolkit[asr] >= 2.6.1 を指定しています。依存指定の下限だけでは3.0での動作は保証されません。同じReazonSpeechコーパスで学習したNVIDIA製の parakeet-tdt_ctc-0.6b-ja も候補ですが、こちらも公式の評価値はNeMo 1.23.0のものです。どちらも使う版で動作を確かめてから選んでください。
NeMo(Python)のインストールと文字起こしコード
3.0でパッケージ管理が uv ベースに変わり、extras の構成も入れ替わりました。手順を現行版に合わせます。
pip install nemo-toolkit[asr] とCUDA extras
PyPI上の nemo_toolkit は 3.0.0(2026年8月7日)が最新です。公式READMEが示す基本形は次のとおりです。
# 既存のPyTorch環境をそのまま使う場合
pip install 'nemo-toolkit[asr]'
# NVIDIA側のピン留めPyTorchを引く場合(CUDA 13.x)
pip install 'nemo-toolkit[asr,tts,cu13]' --extra-index-url https://download.pytorch.org/whl/cu132
# CUDA 12.x
pip install 'nemo-toolkit[asr,tts,cu12]' --extra-index-url https://download.pytorch.org/whl/cu129
バージョン要件は参照先で数字が違います。PyPIのメタデータ上の requires_python は3.10以上ですが、インストール文書は「Python 3.12 or above」「PyTorch 2.7 or above」を最低要件に挙げ、検証済みの構成は「Python 3.13, PyTorch 2.11 with CUDA 12.9 or PyTorch 2.12 with CUDA 13.2」です。迷ったら検証構成に寄せてください。READMEは uv sync --locked について、uv.lock に従って Python・PyTorch・CUDA を検証済みの基準構成に置き換えると警告しているので、既存環境を保ちたいなら pip か uv pip を使います。
インストール文書は「NVIDIA GPU + CUDA (required for training; CPU-only inference is possible but slow)」としており、CUDAが必須なのは学習で、推論はCPUでも動きます。ただしIntel Mac向けのPyTorchは2.2系で止まっていて要件の2.7に届かないため、Intel MacではメモリのたっぷりあるLinux環境で動かすか、次章のNeMo-Speech.cppを使うことになります。
nemo.collections.asr と transcribe() の現行シグネチャ
Python APIの入口は nemo.collections.asr です。次は日本語専用Parakeetのカードに載っている最小例で、16kHz・モノラルのwavを渡します。
import nemo.collections.asr as nemo_asr
asr_model = nemo_asr.models.ASRModel.from_pretrained(
model_name="nvidia/parakeet-tdt_ctc-0.6b-ja"
)
output = asr_model.transcribe(['speech.wav'])
print(output[0].text)
# 単語・文字単位のタイムスタンプ
hyp = asr_model.transcribe(['speech.wav'], timestamps=True)
print(hyp[0].timestamp['word'][:3])
CPUだけで試す場合はメモリに余裕を見てください。メモリ上限が約5.8GBのLinuxコンテナ(python:3.12-slim・CPU版PyTorch 2.14.1・nemo_toolkit 3.0.0)でこのコードを実行したところ、モデル初期化のログが出た後、プロセスが終了コード137で強制終了されました。保存ログでは、モデル読み込みの完了と文字起こしの開始を確認できません。メモリ上限を5.6GBにして batch_size=1 に絞った2回目は、読み込み完了の表示より前に終了しました。GPUの無いマシンで日本語専用Parakeetを動かすだけなら、次章のNeMo-Speech.cppのほうが軽く済みます。
旧コードを移行するときは、第1引数の名前に注意してください。CTCモデル実装(ctc_models.py)の現行定義は transcribe(self, audio, batch_size=4, return_hypotheses=False, num_workers=0, channel_selector=None, augmentor=None, verbose=True, timestamps=None, override_config=None) で、かつての paths2audio_files は audio に変わっています。引数や既定値はモデルクラスごとに異なるので、使うクラスの定義を確認してください。同じdocstringは1ファイルの推奨長を「between 5 and 25 seconds」としており、会議録のような長尺は無音区間で分割して渡すか、ストリーミング構成に寄せます。
誤認識を再学習なしで直す単語ブースティング
実測で外したカタカナ語や製品名は、NeMoのデコード時の補正で直せる可能性があります。Word Boostingのドキュメントは、GPU-PBを「supported for CTC, RNN-T/TDT, and AED (Canary) models」とし、語句リストから作る木でトークンの得点を引き上げる方式で、「You do not need to retrain the ASR model.」と書いています。語句は boosting_tree.key_phrases_file(1行1語句)か key_phrases_list で渡し、重みの boosting_tree_alpha はデータに合わせて調整します。RNN-T・TDTモデルを評価スクリプトで回す場合の指定は次の形です。examples/ 配下のスクリプトはpipのパッケージに含まれないので、ソースリポジトリ(NVIDIA-NeMo/Speech)をcloneしたディレクトリで実行します。山括弧の仮値は、モデル名か .nemo のパス、評価用のJSONLマニフェスト、1行1語句のテキストファイル、ブースティングの重み(数値)に置き換えてください。
python examples/asr/speech_to_text_eval.py \
model_path=<モデル> \
dataset_manifest=<マニフェスト> \
rnnt_decoding.strategy="greedy_batch" \
rnnt_decoding.greedy.boosting_tree.key_phrases_file=<語句リスト> \
rnnt_decoding.greedy.boosting_tree.context_score=1.0 \
rnnt_decoding.greedy.boosting_tree.depth_scaling=2.0 \
rnnt_decoding.greedy.boosting_tree_alpha=<重み>
既定の大文字小文字を区別する設定では、語句の表記をモデルの出力に合わせます。現行ドキュメントでは、boosting_tree.bpe_mode="case_insensitive" により大文字小文字を区別せず指定する方法も案内しています。後述のとおり、NeMo-Speech.cpp v0.2.0 では今回の2モデルとも語句指定が無効になったため、語彙の補正が要件なら推論はPython側で組むのが現時点の判断です。
NeMo-Speech.cppのCPU推論と配布バイナリの導入
NeMo-Speech.cpp は2026年8月19日にv0.1.0、10月2日にv0.2.0が出た、NVIDIA公式のC++推論ランタイムです(コードはApache-2.0、モデルは各モデルのライセンス)。ASRは Nemotron 3.5 ASR・英語専用Nemotron・Parakeet TDT v3・Parakeet CTC 1.1B に対応し、話者分離・翻訳・音声合成も同じCLIで扱えます。軽量のローカル音声認識としてはMoonshine Voiceも候補になりますが、NVIDIAのモデルをそのまま使えるのはこちらです。
インストールと transcribe コマンド
リリースにはLinux・Windows・macOS向けの配布物があり、macOSはApple Silicon向けに加えてIntel向けのCPU版(macos-x86_64-cpu)もあります。インストーラーを使わずに試すなら、配布物とチェックサムを取得して照合し、展開したバイナリをそのまま実行できます。
curl -sLO https://github.com/NVIDIA/NeMo-Speech.cpp/releases/download/v0.2.0/nemo-speech-0.2.0-macos-x86_64-cpu.tar.gz
curl -sLO https://github.com/NVIDIA/NeMo-Speech.cpp/releases/download/v0.2.0/nemo-speech-0.2.0-macos-x86_64-cpu.tar.gz.sha256
shasum -a 256 -c nemo-speech-0.2.0-macos-x86_64-cpu.tar.gz.sha256
tar xzf nemo-speech-0.2.0-macos-x86_64-cpu.tar.gz
cd nemo-speech-0.2.0-macos-x86_64-cpu
export PATH="$PWD/bin:$PATH"
./bin/nemo-speech transcribe speech.wav # 既定はNemotron 3.5 ASR
./bin/nemo-speech transcribe speech.wav -l ja-JP # 言語を固定
./bin/nemo-speech transcribe speech.wav -f srt -o speech.srt
./bin/nemo-speech transcribe --live # マイク入力
初回の transcribe で既定モデルのGGUF(Nemotron 3.5 ASRのQ8_0・707.2MiB)をHugging Faceから取得し、サイズとSHA-256を検証します。nemo-speech serve --asr-model nemotron-3.5 で 127.0.0.1:8080 にローカルAPIが立ち、READMEはOpenAI互換の範囲を「documented OpenAI-compatible subsets」としています。Riva互換のgRPCは別バイナリの riva_server が担います。
日本語専用ParakeetのGGUF変換と推論手順
既定のモデル一覧に無い日本語専用Parakeetは、リポジトリの convert_model.py で変換します。変換にはPython環境(PyTorch・librosa等)が要りますが、変換後の実行には要りません。
git clone --depth 1 --branch v0.2.0 https://github.com/NVIDIA/NeMo-Speech.cpp.git
cd NeMo-Speech.cpp
python3 -m venv .venv
. .venv/bin/activate
python -m pip install -r requirements.txt
python convert_model.py nvidia/parakeet-tdt_ctc-0.6b-ja --outfile parakeet-ja-q8.gguf
nemo-speech transcribe speech.wav --model parakeet-ja-q8.gguf
変換ログは head_type = tdt、24層・語彙3,073と判定し、716.9MBのQ8_0ファイルを書き出しました。Intel MacではPyTorchを2.2.2に、numpyを1.26系に固定した Python 3.11 の仮想環境で変換できています。librosaが入っていないと「skipping asr.preprocessor.fb」と警告して近似のフィルタバンクで変換されるので、警告が出ていないことを確認してください。量子化の形式(Q8_0・BF16など)の選び方はモデル量子化の解説と同じ考え方です。
CPUでの処理速度とv0.2.0で効かなかった機能
付属の nemo-speech bench asr で、上の日本語3文(合計約24.57秒)を2巡させた結果です。i9-9880HのCPUのみで、他の重い処理を止めて3回測った値の範囲です。
| モデル | ウォームアップ | 1文あたりP50 | RTFx |
|---|---|---|---|
| parakeet-tdt_ctc-0.6b-ja(Q8_0) | 6.9〜13.0秒 | 3.0〜3.2秒 | 2.59〜2.81 |
| Nemotron 3.5 ASR(Q8_0) | 11.8〜18.7秒 | 3.8〜4.0秒 | 1.94〜2.08 |
7年前のノートPCのCPUでも実時間のおよそ2〜2.8倍の速さで処理でき、3回とも日本語専用Parakeetのほうが速く終わりました。READMEには、英語専用Nemotron Speech Streaming 0.6B(Q8_0)をRTX 4090・160msチャンクで動かした67倍速の値があります。同じ表のCPU行は6倍速ですが、CPUの機種は書かれておらず、今回の日本語モデルのCPU実測とはモデルと推論条件が異なります。
一方で、v0.2.0では次の2点が想定どおりに動きませんでした。
- 単語ブースティング(
--speech-context):Nemotron 3.5 ASRでは「no embedded SentencePiece tokenizer in the GGUF?」と出て無効になり、日本語専用ParakeetのTDTヘッドでは「boosting requires the Flashlight decoder (–lm-path/–lexicon)」と出て無視された。 - 日本語の単語タイムスタンプ:日本語専用Parakeetで
--jsonを出すと、wordsが文全体で1要素になった。今回の構成では、字幕やハイライトに使える単語単位の時刻を取得できなかった。
ストリーミング認識のチャンクサイズとスループット設計
Nemotron 3.5 ASRでは、att_context_size の右文脈がチャンク長を決めます。値は {左文脈フレーム数, 右文脈フレーム数} で、単位は80msフレーム、右コンテキストに指定できるのは {0, 1, 3, 6, 13} の5通りです。チャンク長は音声をためる時間で、通信・推論・発話終端検出を含む実際の応答遅延とは別に見積もります。
| att_context_size | チャンク長 | 日本語CER(言語指定) | H100での並行ストリーム数 |
|---|---|---|---|
| [56, 0] | 80ms | 13.87 | 240 |
| [56, 1] | 160ms | 12.90 | — |
| [56, 3] | 320ms | 12.22 | — |
| [56, 6] | 560ms | 11.91 | — |
| [56, 13] | 1120ms | 11.48 | 2,400 |
この切り替えに再学習は要りません。カードは「Choose the optimal operating point on the latency-accuracy Pareto curve at inference time. No re-training is required」と書いています。NVIDIAの計測(単一H100で維持できるリアルタイムストリーム数)では、80ms設定でNemotron 3.5 ASRが240、バッファ型の Parakeet RNNT 1.1B が14。1120ms設定では2,400対400です。パラメータ数は約半分でありながら、最短遅延の条件で約17倍のストリームを捌きます。同時接続数がコストに直結する音声エージェントでは、ここが選定理由になります。
NeMo(Python)での実行は、ソースリポジトリのキャッシュアウェア推論スクリプトを使います。山括弧の仮値は、モデル、JSONLマニフェスト、バッチサイズ、出力先に置き換えてください。
git clone https://github.com/NVIDIA-NeMo/Speech.git NeMo
cd NeMo
python examples/asr/asr_cache_aware_streaming/speech_to_text_cache_aware_streaming_infer.py \
model_path=<model path> \
dataset_manifest=<manifest> \
batch_size=<batch size> \
target_lang=ja-JP \
att_context_size="[56,13]" \
strip_lang_tags=true \
output_path=<output path>
target_lang を auto にすると言語を自動判定し、文末に言語タグを付けて出力します。タグが不要なら strip_lang_tags=true で除去します。NeMo-Speech.cpp では transcribe --stream が録音済みwavをチャンクで流す動作になります。
話者分離とVADの現行モデル
NeMo Speech 3.0の対象範囲には話者ダイアライゼーションとVADが含まれ、3.0でPyannoteへの依存が取り除かれました。2026年9月23日には Nemotron 3 Diarization が公開され、カードは「It supports both streaming and offline inference and handles up to eight speakers.」と書いています(OpenMDW-1.1)。従来の diar_streaming_sortformer_4spk-v2 の4話者から上限が倍になりました。公式の統合ガイドが組み合わせ先に挙げるASRは、multitalker-parakeet-streaming-0.6b-v1 と Nemotron 3.5 ASR の2つです。
NeMo-Speech.cpp v0.2.0 でもNemotron 3 Diarizationが既定の話者分離モデルになり、transcribe --diarize で話者付きの文字起こし、transcribe --live --diarize で話しながら話者が切り替わる表示ができます。VADはSilero VADのGGUFを --vad-model で渡します。APIで話者分離まで済ませる選択肢はgpt-4o-transcribe-diarizeの解説で比較しています。
NeMo ASRの採用条件と運用コスト
NeMo ASRは、モデルを1つ差し替えるだけで動かせる環境も扱える言語も変わります。試す前に、使うモデルIDごとにライセンス(CC-BY-4.0・OpenMDW-1.1・NVIDIA Open Model License)、デプロイ先の対応可否(日本語専用ParakeetはNIM非対応)、モデルカードの言語リストに ja があるかの3点を確認してください。
次のどれかに当てはまるなら有力です。音声データを外部に出せずオンプレミスで完結させる必要がある、同時ストリーム数が多く従量課金のAPIでは採算が合わない、自社の語彙でファインチューニングしたい。逆に、GPUサーバーやモデル更新の運用担当者を確保できない議事録起こしなら文字起こしAPIの比較と選び方で扱うマネージドサービスのほうが総コストは下がりやすく、ローカルでOSS同士を比べるならWhisperをPyTorchで動かす手順と並べて検証してください。社内音声や業界用語に合わせた認識システムを組む場合は、AI音声認識システム開発として要件定義から相談を受けています。
よくある質問
nemo_toolkit[asr]のインストールで失敗します。何を確認すればよいですか?
Pythonの版とクォートを先に確認してください。インストール文書の要件は Python 3.12以上・PyTorch 2.7以上で、検証構成は Python 3.13 です。zshなど角括弧を展開するシェルでは pip install 'nemo-toolkit[asr]' のようにクォートが要ります。OS側に libsndfile1 と ffmpeg が無いと音声の読み込みで落ちます。Intel MacはPyTorchが要件に届かないので、Linux環境で動かすかNeMo-Speech.cppを使います。
NeMo ASRは日本語に対応していますか?
モデルによります。Nemotron 3.5 ASR は ja-JP を最上位のTranscription-readyに含み、FLEURSでのCERは11.48〜13.87%です。日本語専用の parakeet-tdt_ctc-0.6b-ja はJSUT basic5000でCER 6.4%。一方 parakeet-tdt-0.6b-v3 と canary-1b-v2 の25言語は欧州言語で、今回の日本語3文では、v3はローマ字風の文字列を返しました。重みが非公開でAPI提供のみの Parakeet RNNT 1.1B Multilingual(Speech NIM)も ja-JP に対応しています。
ConformerとFastConformer、TDTはどう違いますか?
Conformerは畳み込みと自己注意を組み合わせた音声エンコーダ、FastConformerはこれを8倍の深さ方向分離畳み込みでダウンサンプリングした軽量版で、現行のParakeetもNemotronもエンコーダはFastConformerです。TDTはデコーダ側の方式で、トークンと継続時間を分けて予測して空白を飛ばします。parakeet-tdt_ctc-0.6b-ja は最大4フレームをスキップでき、これが推論の速さにつながっています。
NeMo-Speech.cppとNeMo(Python)はどう使い分けますか?
学習・微調整・単語ブースティングを使うならNeMo(Python)、推論だけをPCやエッジ、GPUの無いサーバーで動かすならNeMo-Speech.cppです。NeMo-Speech.cppは単体バイナリで動き、Intel MacのCPUでも実時間のおよそ2〜2.8倍の速さで処理できました。ただしv0.2.0は公開から日が浅く、単語ブースティングや日本語の単語タイムスタンプは今回の構成では使えなかったため、本番投入の前に自分の音声で確かめてください。
WhisperとNemotron 3.5 ASRはどちらを選ぶべきですか?
英語のバッチ精度ではOpen ASR Leaderboardで whisper-large-v3 が7.84、Nemotron 3.5 ASRが10.51とWhisperが上です。Nemotron 3.5 ASRを選ぶ理由は精度ではなく、80msから選べるストリーミングと、単一H100で240〜2,400本を捌く同時接続数にあります。バッチ処理が中心で導入の手軽さを重視するなら、日本語の実装例も周辺ツールも厚いWhisper系が先に候補になります。
関連記事
- NVIDIA NeMo Frameworkとは?2026年の分割後の構成とNeMo-Run・Megatron Bridgeの使い方
- WhisperをPyTorchで動かす手順|openai-whisper・faster-whisper・Transformersと日本語・GPU設定
- 文字起こしAPIの比較と選び方|主要7サービスの料金・日本語対応・使い方【2026年最新】
- Moonshine Voiceとは?STT・TTSとWhisper比較、日本語モデルと導入手順【v0.1.5】
- gpt-4o-transcribe-diarizeとは?話者分離の使い方・料金・gpt-4o-transcribeとの違いと2027年2月の提供終了