Nemotron-3-Diarization API详解:4种输入方式与输出结果怎么用对
【免费下载链接】Nemotron-3-Diarization项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Nemotron-3-Diarization
Nemotron-3-Diarization 是 NVIDIA 开源的说话人分离(Speaker Diarization)模型,专门回答音频中"谁在什么时候说话"。它最多支持 8 位说话人,同时覆盖流式与离线两种推理场景。本文带你一次看懂diarize()API 的 4 种输入方式与 2 种输出结果,并按延迟需求选对流式参数组,让 API 第一次就用对。
1️⃣ 快速认识:这个模型能做什么?
Nemotron 3 Diarization 是一个 1 亿参数的 Transformer 编码器(31 层,带 RoPE 位置编码),把 10 ms 梅尔频谱特征降采样为 80 ms 帧率处理;流式推理时通过AOSC(按到达顺序的说话人缓存)+ FIFO 队列在分块之间保持说话人身份稳定。
一句话概括:输入一段音频,输出"每个时刻是谁在说话"。
| 关键能力 | 说明 |
|---|---|
| 说话人数上限 | 最多 8 人,通道按"谁先出现"自动排序 |
| 输入音频 | 16 kHz 单声道,支持.wav/.flac/.opus/.mp3 |
| 时长限制 | 分块推理下无固定上限 |
| 输出帧分辨率 | 默认 10 ms,可配置为 10 ms 的任意倍数 |
| 最低输入缓冲延迟 | 0.32 s(离线配置为 30.4 s) |
2️⃣ 四种输入方式:diarize()的 audio 参数怎么传?
调用核心只有一行:
predicted_segments = diar_model.diarize(audio=audio_input, batch_size=1)区别全在audio_input的传法上,官方支持 4 种:
方式一:单个音频文件路径(最简单)
适合快速验证:
audio_input = "/path/to/multispeaker_audio1.wav"方式二:文件路径列表(批量推理)
一次处理多段音频,batch_size与之配合:
audio_input = ["/path/to/multispeaker_audio1.wav", "/path/to/multispeaker_audio2.wav"]方式三:Numpy 数组(单个或列表,内存中音频)
适合流式管线中已经解码好的 PCM 数据:
import numpy as np audio_input = np.random.randn(16000 * 10).astype(np.float32) # 10秒@16kHz diar_model.diarize(audio=audio_input, batch_size=1, sample_rate=16000)⚠️重点提示:传 Numpy 数组时必须显式指定sample_rate(默认 16000),传数组列表时更不可省略。
方式四:JSONL manifest 文件(大批量/评测场景)
每行一个 JSON 对象,含audio_filepath、offset、duration字段:
{"audio_filepath": "/path/to/multispeaker_audio1.wav", "offset": 0, "duration": 600} {"audio_filepath": "/path/to/multispeaker_audio2.wav", "offset": 900, "duration": 580}📌 小贴士:非标准音频建议先用 ffmpeg 转成 16 kHz 单声道 PCM:
ffmpeg -i input.mp3 -ac 1 -ar 16000 -c:a pcm_s16le conversation.wav
3️⃣ 两种输出结果:拿到数据后怎么读?
默认输出:带说话人标记的片段列表
predicted_segments = diar_model.diarize(audio=audio_input, batch_size=1) # 每个片段形如:(开始秒, 结束秒, speaker_index)这是最常用的形式——直接得到"起止时间 + 说话人编号"。
可选输出:说话人活动概率张量
加一个参数即可同时拿到逐帧概率:
predicted_segments, predicted_probs = diar_model.diarize( audio=audio_input, batch_size=1, include_tensor_outputs=True)读这个张量只需记住 4 点:
- 形状为
[T, 8]:T 个输出帧 × 8 个说话人通道,取值是 0~1 的活动概率; - 8 个通道按说话人在音频中首次出现的时间排序,第 0 通道就是最先开口的人;
- 默认帧分辨率 10 ms,可配置为 30 ms、80 ms、240 ms 等任意 10 ms 倍数;
- 概率经后处理即可得到类似
["speaker1", 0.51, 12.62]的通用标签 + 时间戳。
4️⃣ 流式参数速查:一张表选对延迟配置
流式配置以80 ms 帧为单位定义,官方给出 4 档推荐参数(详见 README.md):
| 配置 | 延迟 | SPKCACHE_LEN | FIFO_LEN | CHUNK_LEN | RIGHT_CONTEXT | UPDATE_PERIOD |
|---|---|---|---|---|---|---|
| 离线(精度优先) | 30.4 s | 264 | 40 | 340 | 40 | 300 |
| 低延迟 | 1.04 s | 264 | 264 | 9 | 4 | 222 |
| 超低延迟 | 0.64 s | 264 | 264 | 6 | 2 | 222 |
| 极超低延迟 | 0.32 s | 264 | 264 | 3 | 1 | 222 |
两个使用要点:
- 延迟 = (CHUNK_LEN + RIGHT_CONTEXT) × 80 ms,不含计算耗时;
- 参数设置完成后记得调用
diar_model._check_streaming_parameters()做校验,延迟越低精度会略有下降,按业务取舍。
5️⃣ 进阶一步:从"谁说了"到"说了什么"
分离模型只回答who spoke when;要生成"谁说了什么"的说话人归属转写,需搭配流式 ASR 模型。官方给出两种受支持组合及完整命令参数,完整流程见 ASR_INTEGRATION_GUIDE.md。
如果你要做效果评测,DER / SCA / MAE 指标的定义与推荐评测命令见 diarization_evaluation.md。
6️⃣ 常见坑位清单
- 说话人编号≠真名:输出的
speaker_index只是会话内身份编号,不代表真实姓名,展示人名需要应用层另行映射; - 超过 8 人:模型只有 8 个通道,更多说话人会漏检或被错分;
- 忘了 sample_rate:传 Numpy 数组而不指定采样率,结果会整体跑偏;
- 音频格式不对:务必 16 kHz 单声道,否则可能被拒绝或效果变差;
- 重连后编号变了:标签是"会话局部"的,断开重连后身份编号会重新分配,这属于正常行为。
📎相关资料:README.md(完整使用说明与性能数据) · ASR_INTEGRATION_GUIDE.md(ASR 集成指南) · diarization_evaluation.md(评测协议) · Nemotron-3-Diarization.nemo(模型检查点)
【免费下载链接】Nemotron-3-Diarization项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Nemotron-3-Diarization
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考