NVIDIA 說話者分離 Demo 顯示音檔與不同說話者時間軸

NVIDIA Nemotron 3 安裝教學:可以分辨八位說話者與重疊發言

如果今天就要把 NVIDIA Nemotron 3 Diarization 跑起來,我建議先用 Hugging Face 官方網頁確認效果,正式處理自己的錄音則用 Python 加 Transformers 開發版。

Nemotron 3 Diarization 在 2026 年 9 月 23 日發布,但 NeMo-Speech.cpp 現行的 0.1.0 預編譯版本早在 8 月 19 日釋出,預設仍是舊的四人 Sortformer,我用 0.1.0 載入新模型的 GGUF 檔時,實際會遇到文件已經更新,新版執行檔卻還沒跟上。

30 秒看懂:它是在錄音上標出誰正在說話

可以把一段會議錄音想成一條沒有標記的時間軸,Nemotron 3 Diarization 的工作,就是拿不同顏色的螢光筆,把每個人的發言區段標出來。它會告訴你「Speaker 0 從 0.35 秒講到 9.31 秒」,但不會自動知道 Speaker 0 是誰。

  • 你放進去:會議、訪談、Podcast 或課程錄音。
  • 它輸出:每位匿名說話者的開始時間與結束時間。
  • 它不會單獨完成:逐字稿、姓名辨識與字幕檔,這些要再接語音辨識工具。

如果不會寫程式,只想試用效果,直接看「完全不想安裝」這一節,做到官方 Demo 就可以停下來。

後面的 Python、GGUF 與 C++ 是給需要批次處理或整合產品的人。

先分清楚:它不會直接產生會議逐字稿

Nemotron 3 Diarization 做的是 speaker diarization,也就是判斷「誰在什麼時間說話」,它不負責把聲音轉成文字,也不會知道 Speaker 0 是王經理還是陳老師。

需求Nemotron 3 Diarization 能不能做
把不同人的發言時間分開可以,最多追蹤 8 位匿名說話者
保留兩人同時說話的重疊區段可以,同一時間能有多個說話者處於發言狀態
把語音轉成文字不行,要再接 ASR 語音辨識模型
自動認出真實姓名不行,要用會議名單、登入資料或另外的聲紋辨識流程對應
輸出 SRT 字幕模型本身不會,要先結合 ASR 與時間對齊

這個差別很重要,如果需求只是「我有一段訪談,想知道哪一段是誰講的」,它可以直接使用,如果想得到「Speaker 2:下週五前交企劃」這種逐字稿,還要把它與 Whisper、Parakeet 或 Nemotron ASR 的文字及字詞時間碼合併。

NVIDIA 公開的模型有約 1 億參數,輸入是 16 kHz 單聲道音訊,能處理錄音檔與即時串流,支援最多 8 位說話者及重疊發言,輸出則是每 10 毫秒一組的說話者活動機率,再轉成開始時間、結束時間與匿名標籤,完整規格可查看 NVIDIA 官方模型卡。

四條使用路線,現在該選哪一條?

路線適合對象安裝難度我的判斷
Hugging Face 官方 Demo只想先看效果的人不用安裝最快,但不是批次處理工具
Python+Transformers 開發版要處理自己的錄音、做原型或串工作流中等目前最可靠,已實際跑通
NeMo-Speech.cpp想用輕量命令列、本機 CPU、Metal 或 CUDA原本應該最簡單新模型支援已進入主分支,預編譯 0.1.0 尚未跟上
NVIDIA NeMo Speech要做即時 ASR、多人語音代理或正式服務高適合 Linux+NVIDIA GPU 開發團隊

如果只是一般使用者,先不要看到「開放權重」就以為它是可雙擊安裝的會議軟體,它目前更像一個可以裝進會議工具、客服系統或 Podcast 後製流程的模型元件。

完全不想安裝:先用官方網頁 Demo

NVIDIA 在 Hugging Face 提供 Live Speaker Diarization Demo,這條路適合先確認模型怎麼把多人對話分成不同 Speaker,也能觀察重疊發言的時間軸。

測試時不要只讓一個人輪流朗讀,建議找兩到三個人自然對話,刻意加入一次打斷、一次同時說話,再看 Speaker 標籤有沒有在整段對話中維持一致,這比只看官方排行榜更接近實際工作環境。

網頁 Demo 也支援上傳錄音檔,但上傳錄音會交由線上服務處理,處理敏感訪談前應先確認資料使用方式,Demo 適合看效果,不代表批次處理流程已經完成,如果要批次處理客戶訪談、會議錄音或課程影片,仍要走本機 Python 或自行部署服務。

免安裝操作:五步驟上傳自己的錄音

  1. 開啟官方 Demo,點上方的 Audio File。
  2. 點 Choose audio file,上傳兩分鐘內的 WAV、MP3、M4A、OGG、WebM 或 FLAC。
  3. 在聲音波形上選取要測試的區段。第一次測試可先選 30 秒,等待時間較短。
  4. 在 Maximum speakers 選擇最多有幾個人。如果錄音是兩人訪談就選 2,不確定時保留 8。
  5. 先按 Preview selection 試聽,再按 Stream selection,下方就會出現不同顏色的說話者時間軸與文字。

結果中的 Speaker 1、Speaker 2 是匿名標籤,彩色橫線代表這個人在該段時間說話。兩條線重疊,表示兩個人同時開口。要把 Speaker 1 換成真實姓名,仍要由人對照聲音或會議名單。

Nemotron 3 Diarization 官方 Demo 的 Audio File 音檔上傳介面
切換到 Audio File 後,上傳兩分鐘內的音檔,再選取片段並執行 Stream selection。(圖片來源:NVIDIA/Hugging Face)

實際跑通的本機安裝方式

以下使用 Python 3.12,並需預先安裝 Git,macOS、Windows、Linux 都能建立相同環境,我這次是在 Linux 的 CPU 環境完成測試,沒有使用 NVIDIA GPU。

建立獨立環境

macOS 或 Linux 開啟終端機後輸入:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install --upgrade pip

Windows PowerShell 輸入:

py -3.12 -m venv .venv
.venv\Scripts\Activate.ps1
python -m pip install --upgrade pip

如果 PowerShell 阻擋啟用虛擬環境,可在目前視窗執行 Set-ExecutionPolicy -Scope Process Bypass 後再啟用,這只影響當次 PowerShell 工作階段。

安裝 PyTorch 與必要套件

macOS 或 Apple Silicon 想先確認能不能跑,可使用:

python -m pip install torch accelerate librosa soundfile
python -m pip install "transformers @ git+https://github.com/huggingface/transformers.git"

Windows 或 Linux 沒有 NVIDIA 顯示卡,建議明確安裝 CPU 版 PyTorch,避免下載用不到的 CUDA 套件:

python -m pip install torch --index-url https://download.pytorch.org/whl/cpu
python -m pip install accelerate librosa soundfile
python -m pip install "transformers @ git+https://github.com/huggingface/transformers.git"

有 NVIDIA 顯示卡的人,先到 PyTorch 官方安裝頁 依自己的 CUDA 版本取得指令,再安裝 accelerate、librosa、soundfile 與 Transformers 開發版。

這裡不能只裝目前 PyPI 的 Transformers 穩定版,Hugging Face 文件明確標示 Nemotron 3 Diarization 在 2026 年 9 月 23 日才合併到 main,現行穩定版 5.17.0 還沒有這個模型,因此需要從 GitHub 安裝開發版。

官方快速範例還漏列了 librosa,少裝時會看到 NemotronAsrStreamingFeatureExtractor requires the librosa library,上面的指令已經補上。

建立可以直接處理音檔的程式

新增一個 diarize.py,貼入以下內容:

import json
import sys
from pathlib import Path

import torch
from transformers import AutoModelForAudioFrameClassification, AutoProcessor
from transformers.audio_utils import load_audio


if len(sys.argv) != 2:
    raise SystemExit("用法:python diarize.py 你的錄音檔.wav")

audio_path = Path(sys.argv[1])
model_id = "nvidia/Nemotron-3-Diarization"

processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForAudioFrameClassification.from_pretrained(
    model_id,
    device_map="auto",
)

sampling_rate = processor.feature_extractor.sampling_rate
audio = load_audio(str(audio_path), sampling_rate=sampling_rate)
inputs = processor(audio, sampling_rate=sampling_rate).to(
    model.device,
    dtype=model.dtype,
)

with torch.inference_mode():
    logits = model(**inputs).logits

segments = processor.extract_speaker_dict(
    logits,
    inputs.attention_mask,
)[0]

result = [
    {
        "speaker": f"speaker_{segment['Speaker']}",
        "start": round(segment["Start"], 2),
        "end": round(segment["End"], 2),
    }
    for segment in segments
]

output_path = audio_path.with_suffix(".diarization.json")
output_path.write_text(
    json.dumps(result, ensure_ascii=False, indent=2),
    encoding="utf-8",
)

for item in result:
    print(f"{item['speaker']}: {item['start']:.2f}s - {item['end']:.2f}s")

print(f"已輸出:{output_path}")

官方範例最後一行使用了 :.2 f,小數位數與 f 之間多了一個空格,照貼會在輸出結果時出錯,上面的版本已修正為 :.2f。

執行自己的錄音

把音檔放到同一個資料夾,執行:

python diarize.py meeting.mp3

第一次執行會從 Hugging Face 下載模型,公開模型可以不登入使用,未登入時會看到請求速率較低的提醒,這不是錯誤,之後再次執行會直接使用電腦中的快取。

如果音檔格式複雜、聲道很多或取樣率不確定,我建議先用 FFmpeg 統一轉成 16 kHz 單聲道 WAV:

ffmpeg -i input.mp3 -ac 1 -ar 16000 -c:a pcm_s16le meeting.wav
python diarize.py meeting.wav

實際輸出長什麼樣?

我使用 NVIDIA 官方提供、長度約 97 秒的測試音檔,在 Python 3.12.14、PyTorch 2.14.0 CPU 版與 Transformers 5.18.0 開發版執行成功,模型辨識出 speaker_0 到 speaker_5 共 6 位匿名說話者,部分輸出如下:

speaker_0: 0.35s - 9.31s
speaker_1: 9.15s - 13.81s
speaker_2: 13.55s - 18.32s
speaker_3: 18.38s - 23.59s
speaker_4: 23.77s - 28.10s
speaker_5: 27.80s - 32.67s

speaker_0 到 9.31 秒才結束,speaker_1 卻在 9.15 秒開始,兩段時間重疊,表示模型保留了同時發言,而不是強迫每一秒只能屬於一個人。

這份 JSON 仍然只有說話者與時間,沒有逐字稿,也沒有真實姓名,下一步要用 ASR 取得帶時間碼的文字,再把每個字或句子的時間對應到這些說話者區段。

為什麼我現在不推薦官方的一行命令列?

NVIDIA 模型卡已經寫出以下用法:

nemo-speech diarize meeting.wav

NeMo-Speech.cpp 的方向很吸引人,它是輕量 C++ 執行環境,官方文件列出 CPU、NVIDIA CUDA、Apple Silicon Metal 與 Vulkan 支援,也提供 macOS、Windows、Linux 的安裝程式,長期來看,它會比完整 Python 環境更接近一般人想要的一鍵工具。

問題是目前公開的 NeMo-Speech.cpp 0.1.0 release 只列出上一代 Streaming Sortformer v2,內建模型清單的預設 diarization 模型也仍是四人版,我下載 0.1.0 Linux CPU 版本,再指定新模型的 107 MB Q8 GGUF 檔,程式在載入階段就出現:

sortformer: pre_ln transformer variant is not supported

目前 GitHub 主分支的文件已加入 V3 最多 8 人與 v3-offline 設定,代表原始碼正在往正確方向前進,只是預編譯 release 還沒更新,如果有能力自己編譯,官方安裝器提供 --source 選項:

curl -fsSL https://github.com/NVIDIA/NeMo-Speech.cpp/raw/main/scripts/install.sh |
  sh -s -- --source

這條路需要 Git、CMake 3.26 以上、Ninja、C++17 編譯器與 SentencePiece 開發套件,Apple Silicon 還要準備 Homebrew 的 sentencepiece 與 abseil,它已經不是「貼上一行就能完成」的初學者流程。

這次我驗證的是 0.1.0 預編譯版本的失敗結果,沒有把最新主分支的自行編譯版本列為已跑通路線。

我的建議很明確:一般開發者先用前面的 Python 版本,等 NeMo-Speech.cpp 出現晚於 2026 年 9 月 23 日、並在 release notes 明列 Nemotron 3 Diarization 的新版二進位檔,再把 C++ 命令列改成首選。

想要「誰說了什麼」,還差 ASR 這一步

NVIDIA 的 ASR 整合指南 提供兩種組合,一種接 multitalker-parakeet-streaming-0.6b-v1,另一種接 Nemotron 3.5 ASR,最後輸出包含文字、時間與匿名說話者標籤的 JSON。

但這條完整流程需要安裝 NVIDIA NeMo Speech,官方主路線是 Linux、Python 3.12 與支援的 NVIDIA GPU,還要調整多人數、快取、即時延遲與 ASR 策略,適合要做客服錄音、會議助理或語音代理的開發團隊,不適合只想整理一次訪談的一般使用者。

如果需求只是把現有會議或 Podcast 錄音做成逐字稿,我會先使用成熟的 ASR 工具產生文字和字詞時間碼,再用 Nemotron 3 Diarization 補上說話者,這樣比較容易單獨檢查「字有沒有聽對」和「人有沒有分對」。

這個模型真正值得注意的地方

Nemotron 3 Diarization 的價值不是讓大家多裝一個 AI 工具,而是把過去常被藏在雲端會議服務裡的說話者分段能力,變成可下載、可在本機執行、可整合進產品的開放權重模型。

它採 OpenMDW 1.1 授權,可用於商業或非商業情境,權重也同時提供 NeMo、Safetensors 與 GGUF 格式,本機處理時,自己的錄音不需要上傳給第三方推論服務,不過錄音本身仍涉及參與者告知、保存期限與存取權限,模型授權不會取代這些資料治理工作。

對一般使用者來說,現在最實際的答案不是「一行指令就能裝好」,而是先確認自己要的是說話者時間軸,還是完整逐字稿,如果只要試效果,開官方 Demo,如果要拿自己的音檔工作,使用本文已跑通的 Python 路線,如果要做即時多人語音產品,再投入 NeMo Speech 或等待 NeMo-Speech.cpp 的下一個正式版本。


延伸閱讀

NotebookLM 可以抓無字幕 YouTube 逐字稿嗎?實測免費匯出

到現場觀察後疑問,AI NAS 找鏡頭還得全公司問一輪嗎?

Claude Code + Obsidian 工作流教學:2026 最新 AI 第二大腦與 LLM Wiki 打造指南

常見問題 FAQ

Nemotron 3 Diarization 會直接產生逐字稿嗎?

不會。它主要負責分辨每位匿名說話者的發言時間與重疊區段,不能單獨把語音轉成文字,也不會知道 Speaker 0 的真實姓名。要做成「誰說了什麼」的逐字稿,還要接 ASR 語音辨識工具,再把文字時間碼與說話者區段對齊。

完全不會寫程式,也能先試 Nemotron 3 嗎?

可以,先使用 NVIDIA 在 Hugging Face 提供的 Live Speaker Diarization Demo,不需要先安裝 Python 或模型。上傳兩分鐘內的音檔、選擇最多說話者人數,再執行 Stream selection,就能先觀察說話者時間軸與重疊發言。敏感訪談或未公開會議錄音,則要先確認線上服務的資料處理方式。

一般電腦沒有 NVIDIA GPU,可以在本機執行嗎?

可以,本文實測的是 CPU 版 PyTorch 加 Transformers 開發版,macOS、Windows 與 Linux 都能依相同概念建立 Python 3.12 環境。CPU 會比 GPU 慢,長錄音也需要更多等待時間,但不代表沒有 NVIDIA 顯示卡就完全不能使用。

為什麼不直接用 NeMo-Speech.cpp 的一行指令?

目前公開的 NeMo-Speech.cpp 0.1.0 預編譯版本仍以舊的四人 Sortformer 為主,載入 Nemotron 3 Diarization 的 GGUF 檔時,實測會出現 sortformer: pre_ln transformer variant is not supported。主分支已經往 V3 支援前進,但自行編譯需要 Git、CMake、Ninja、C++17 與 SentencePiece,因此本文先把已跑通的 Python 路線列為首選。

模型能辨認出錄音裡每個人的真實姓名嗎?

不能。輸出中的 speaker_0、speaker_1 等只是匿名標籤,模型能分辨不同聲音在什麼時間說話,卻不知道那個人是誰。若要換成真實姓名,需要由人對照聲音、會議名單、登入資料或另外的聲紋辨識流程,而且仍要先處理參與者告知與個人資料治理問題。

參考資料

Similar Posts