ローカル音声認識・音声合成

Nemotron 3.5 Transcribeで1時間の会議を一度に書き起こす

30B-A4Bの音声LLMが話者と時刻まで付けます

Nemotron 3.5 TranscribeはNVIDIAが10月28日に公開した音声LLM1です。40言語を扱い、65,536トークン2の文脈に1時間の録音を入れます。話者タグと単語タイムスタンプを一度に得られ、韓国語はFLEURS CER 2.78%と報告されています。BF163は67.5GBなので、24GBのGPU4では19.68GBの4ビットファイルを使います。

実行条件と要点
  • 1時間の録音を一度に入れ、話者タグと単語タイムスタンプを受け取ります。
  • 韓国語はFLEURS CER 2.78%と報告されています。
  • BF16は67.5GB、24GBのGPUは19.68GBの4ビットを使います。
  • リアルタイムではなく、ファイルを渡して待つ方式です。

何を入れて何を受け取る?

Nemotron 3.5 Transcribeは音声エンコーダーと話者エンコーダーをNemotron 3.5 Lightning 30B-A3Bに接続した音声LLMです。活性4.3Bで、音声とテキストを入力に取り、書き起こしを返します。

文脈は65,536トークンで録音は1時間まで入ります。会議や通話を分割せずに渡せるので、文が途中で切れません。

書き起こしの様式は指示文で決めます。発話どおり、言いよどみを除いた読み物向け、固有名词一覧を与える文脈付き、話者タグ、他言語への翻訳まで一つのモデルで処理します。

中央にマイクが置かれ、4脚の椅子に囲まれた木製の会議テーブル
1時間の会議を分割せず一度に渡すと、文が途中で切れません。

リアルタイム0.6Bとの違い

名前の似たNemotron 3.5 ASR5ストリーミング0.6Bはマイクの前でそのまま書き起こすモデルです。Transcribeはファイルを渡して待つオフラインモデルなので、使う場面が分かれます。

会議中に字幕が必要ならストリーミングモデルを使い、このモデルは勧めません。終わった後に話者別に整理するときがTranscribeの出番です。

両方を併用しても構いません。会議中はストリーミングで字幕を出し、終わった後にTranscribeで話者と時刻を付け直します。

同じ名前、違う用途
項目ストリーミング0.6BTranscribe 30B-A4B
パラメータ0.6B30B-A4B、活性4.3B
コンテキスト短いチャンク65,536トークン、1時間
話者分離単体では不可指示文で話者タグ
韓国語ko-KRロケールFLEURS CER 2.78%
実行NeMo-Speech.cppvLLM, Transformers, GGUF

まずメモリーを計算します

BF16の重みは67.5GBなので、80GB級のメモリーが必要です。公式例がH100一枚を前提にする理由がここにあります。

24GBのGPUやMacでは4ビットGGUF6を使います。19.68GBのデコーダーに1.67GBのエンコーダーを足して約21.4GB、16GBのGPUは13.57GBのファイルまで下げます。このときのピークGPUメモリーは15.6GiBでした。

どのデコーダーでもエンコーダーファイルが必要です。デコーダーが名前で探すので、ファイル名は変えないでください。

ファイルと対応する機器
ファイルサイズ合う機器
AD-IQ4_NL19.68GB24GB GPUとMacの基本
AD-IQ4_NL_L22.55GB32GBで余裕を持って
AD-Q2_0_L15.55GB24GBのMac
AD-Q2_0_M13.57GB16GB GPU
AD-NVFP419.68GBRTX 50, DGX Spark
Q8_035.00GB48GB以上
作業台にデータセンター用アクセラレーターカードが1枚置かれ、横にルーペとノートがあります。
BF16は67.5GBです。24GBのカードでは4ビットに下げ、その分一部の言語で誤差が増えます。

NeMo-Speech.cppで動かします

CMake 3.26とSentencePiece 0.2.0以上が必要です。NVIDIAはcuda-server、Appleシリコンはmetal-serverプリセットでビルドします。

ビルドと書き起こし
git clone https://github.com/NVIDIA/NeMo-Speech.cpp && cd NeMo-Speech.cpp
git submodule update --init --depth 1 llama.cpp third_party/cpp-httplib

# NVIDIA
scripts/configure.sh cuda-server && cmake --build --preset cuda-server
# Apple silicon
scripts/configure.sh metal-server && cmake --build --preset metal-server

hf download AtomicChat/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-GGUF --local-dir models \
  --include "*Encoder-F16.gguf" --include "*AD-IQ4_NL.gguf"

build/cuda-server/bin/nemo-speech transcribe meeting.wav --json \
  --model models/NVIDIA-Nemotron-3.5-Transcribe-30B-A4B-AD-IQ4_NL.gguf

JSONには単語ごとに時刻が付きます。字幕が必要なら--format srtでそのまま書き出します。

Macではbuild/metal-server/bin/nemo-speechを使います。バイナリのパスだけが違い、オプションは同じです。

話者と時刻を取り出します

話者タグが必要なら、指示文にPut speaker tags on the transcription.のような一文を入れます。Transformersの経路ではapply_transcription_requestに指示文を渡します。

単語の時刻はreturn_word_timestamp_logitsを有効にし、align_word_timestampsで整列します。発話区間ごとに開始と終了が付き、話者情報も一緒に出ます。

話者ラベルは同じ録音の中で声を区別する印です。実際の人物が誰かは分かりません。

三色の音声トラックを表示するノートパソコンと色別のノート
話者ラベルは声を分ける印です。誰が話したかの名前は自分で付ける必要があります。

数字の読み方

英語Open ASRリーダーボードの9セット平均WERは4.71%、多言語は4.62%です。

重なり発話のある会議データでは平均cpWERが15.80です。次に良い公開構成のDiCoW v3.3とDiariZenが16.83なので、専用構成より低い値です。

韓国語の2.78%は元のBF16での値です。4ビットで韓国語がどれだけ変わるかは公開表にないので、自分の録音で一度突き合わせます。

モデルカードの比較
指標結果次の公開結果
会議cpWER(AMIなど)15.80DiCoW v3.3+DiariZen 16.83
Preference-ASR WER(既定)7.56Canary-Qwen 8.16
Preference-ASR WER(指示)6.16Canary-Qwen 8.36
英語Open ASR平均WER4.71—
多言語Open ASR平均WER4.62—
FLEURS韓国語CER2.78—

どこが弱いか

リアルタイムのストリーミングはしません。モデルカードもオフラインモデルと明記し、内部のチャンク分割はストリーミングではないと断っています。

16GB GPU向けの13.57GBファイルは中国語のCERが1.5ポイント悪化します。小さくするほど他の言語も損をする可能性があります。

公式対応はLinuxとWindowsで、MacはGGUFとMetal7の組み合わせだけが動きます。ライセンスはOpenMDW-1.1なので、商用利用の条件は自分で確認します。

用語の注釈

  1. 大規模言語モデル — 大量のテキストデータから言語パターンを学び、文脈に沿ったテキストを処理・生成するモデルです。

    本文に戻る
  2. トークン — モデルが入力や出力を分けて処理する単位です。

    本文に戻る
  3. BF16 — モデルの数値に使う16ビット浮動小数点形式です。指数部はFP32と同じ幅で、同程度に広い値の範囲を表せます。

    本文に戻る
  4. GPU — 多くの計算を並列に処理するプロセッサーです。AIモデルの実行ではモデル計算を担います。

    本文に戻る
  5. 自動音声認識 — 音声中の発話を認識してテキストに変換する技術です。

    本文に戻る
  6. GGUF — モデル情報を格納するファイル形式で、llama.cpp系のツールで広く使われます。

    本文に戻る
  7. Metal — Apple機器でグラフィックスやGPUの並列計算を実行する低水準の技術です。

    本文に戻る

よくある質問

この記事で最初に確認すべきことは何ですか?
Nemotron 3.5 TranscribeはNVIDIAが10月28日に公開した音声LLMです。40言語を扱い、65,536トークンの文脈に1時間の録音を入れます。話者タグと単語タイムスタンプを一度に得られ、韓国語はFLEURS CER 2.78%と報告されています。BF16は67.5GBなので、24GBのGPUでは19.68GBの4ビットファイルを使います。
必要なメモリはどのくらいですか?
BF16の重みは67.5GBなので、80GB級のメモリーが必要です。公式例がH100一枚を前提にする理由がここにあります。
選ばないほうがよいのはどのような場合ですか?
会議中に字幕が必要ならストリーミングモデルを使い、このモデルは勧めません。終わった後に話者別に整理するときがTranscribeの出番です。
条件と出典はどこで確認できますか?
公式対応はLinuxとWindowsで、MacはGGUFとMetalの組み合わせだけが動きます。ライセンスはOpenMDW-1.1なので、商用利用の条件は自分で確認します。