Nemotron 3 Diarization:支援最多 8 位說話者的開放權重模型
語音轉文字(ASR)可以把錄音變成文字,但多人會議還有另一個問題:每一句話是誰說的?Speaker diarization 會將音訊切成不同時間區段,並為每個區段標記匿名的說話者,例如 speaker_0、speaker_1。這些時間軸再與 ASR 的逐字時間戳結合,才能產生帶有說話者標籤的逐字稿。
NVIDIA 的 Nemotron 3 Diarization 就是用來處理這項工作的開放權重模型。它支援離線與串流推論,最多處理 8 位說話者,也能表示重疊語音。模型只會輸出匿名頻道與時間資訊,不會判斷 speaker_0 實際是哪一個人。
模型輸入與輸出
模型接受 16 kHz、單聲道的 .wav、.flac、.opus 或 .mp3 音訊。輸出可以是每個時間框的說話者活動機率,也可以後處理成開始時間、結束時間與說話者標籤。
它最多提供 8 個說話者頻道,頻道順序依照說話者首次出現的時間排列。這個設計讓串流處理時可以沿用前面區塊的頻道順序,但它仍不是身分辨識系統;若需要對應到真實姓名,還要由應用程式結合會議名單、使用者資料或其他驗證方式處理。
如何處理串流音訊
Nemotron 3 Diarization 採用 31 層 Transformer 編碼器,搭配 RoPE 位置編碼。輸入的 Mel 頻譜以 10 ms 為步長,再透過特徵堆疊形成 80 ms 的編碼器幀率,最後由 Conv1D 層將預測結果轉回 10 ms 的輸出解析度。模型大小約為 99.2M 參數。
在串流模式中,模型使用 Arrival-Order Speaker Cache(AOSC)保存較早出現的說話者資訊,並以 FIFO queue 提供近期音訊上下文。兩者分工不同:前者協助跨區塊維持說話者順序,後者提供目前區塊附近的聲音資訊。這有助於降低串流過程中的頻道切換,但實際效果仍會受到噪音、混響與錄音環境影響。
延遲設定
官方提供同一個 checkpoint 的多組推論設定。輸入緩衝延遲的計算方式是:
(CHUNK_LEN + RIGHT_CONTEXT) × 80 ms
| 模式 | 輸入緩衝延遲 | FIFO | 區塊長度 | 右側上下文 |
|---|---|---|---|---|
| 離線風格 | 30.4 秒 | 40 | 340 | 40 |
| 低延遲 | 1.04 秒 | 264 | 9 | 4 |
| 極低延遲 | 0.64 秒 | 264 | 6 | 2 |
| 超低延遲 | 0.32 秒 | 264 | 3 | 1 |
這裡的延遲只代表模型開始推論前需要累積的音訊,不包含模型運算、網路傳輸、ASR 或應用程式處理時間。模型技術上可以使用更短的輸入緩衝,但官方建議的最低設定是 0.32 秒;選擇設定時仍需要在自己的資料上測試準確率與端到端延遲。
評測結果應如何解讀
NVIDIA 官方文章表示,Nemotron 3 Diarization 在 VoiceArena 初始 Diarization-Bench 中,於 12 個系統、17 組設定裡排名第一,DER 為 14.72%。該評測使用約 22 小時的 139 段英文對話,並將重疊語音納入計分。這是特定資料集與評測規則下的結果,不能直接當成所有語言或所有錄音環境的表現。
在模型卡列出的 1.04 秒設定中,與 NVIDIA 過去的四人 Sortformer 基準相比,8 組測試條件的平均相對 DER 降幅為 41.0%。例如:
- DIHARD III 全部資料:13.18%,基準為 19.60%。
- AliMeeting Test Near:6.59%,基準為 12.47%。
- NOTSOFAR1 MHM:7.70%,基準為 22.12%。
- CALLHOME-Part2:10.29%,基準為 11.31%。
DER 越低代表錯誤越少,但不同資料集的錄音距離、說話者數量、語言與標註方式都不同。模型卡也提醒,這些速度與準確率數據是在 NVIDIA Blackwell RTX PRO 5000、BF16 與 NeMo PyTorch backend 條件下測得;例如 30.4 秒、Batch Size 32、使用 torch.compile() 時的 RTFx 為 15,113。這類批次吞吐量不等於單一串流的實際端到端延遲。
開始使用
模型卡提供 Transformers 的載入方式,基本流程如下:
import torch
from transformers import AutoModelForAudioFrameClassification, AutoProcessor
from transformers.audio_utils import load_audio
model_id = "nvidia/Nemotron-3-Diarization"
processor = AutoProcessor.from_pretrained(model_id)
model = AutoModelForAudioFrameClassification.from_pretrained(
model_id,
device_map="auto",
)
audio = load_audio("conversation.mp3", sampling_rate=16_000)
inputs = processor(audio, sampling_rate=16_000).to(
model.device,
dtype=model.dtype,
)
with torch.inference_mode():
logits = model(**inputs).logits
segments = processor.extract_speaker_dict(
logits,
inputs.attention_mask,
)[0]
如果要處理即時音訊,可以使用 low_latency、very_low_latency 或 ultra_low_latency 串流模式。若要在本地以命令列執行,也可以參考模型卡列出的 NeMo-Speech.cpp 用法:
nemo-speech diarize meeting.wav
nemo-speech transcribe meeting.wav --diarize --json
需要完整逐字稿時,還要另外使用 ASR 模型取得文字與 word timestamps,再把文字時間點與 diarization 區段對齊。重疊語音可能同時對應多個說話者,簡單的時間中點對齊法只能作為起點,正式系統仍應使用實際資料評估。
部署限制與授權
- 模型最多支援 8 個說話者;超過上限時,語音可能遺失或被分配到錯誤頻道。
- 噪音、嚴重混響、遠場收音、長時間錄音與資料分布差異,都可能增加漏認、誤報、邊界錯誤或說話者混淆。
- 輸出是匿名說話者頻道與時間戳,不是身分驗證結果。
- 模型卡標示使用 OpenMDW License Agreement 1.1,並說明可用於商業與非商業用途;實際部署前仍應閱讀完整授權條款。

