10 分钟上手 Nemotron-3-Diarization从下载模型到跑出带说话人标签的会议转写【免费下载链接】Nemotron-3-Diarization项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Nemotron-3-Diarization会议录音转写一直存在一个尴尬的断层ASR 模型能把语音变成文字但文字上不标注这句话是谁说的。一场 8 人的项目周会转写稿里十几段话来回穿插事后要靠人工回忆去猜归属——这正是说话人分离Speaker Diarization要解决的问题判断谁在什么时候说了话who spoke when。2026 年 9 月 23 日NVIDIA 发布了开源权重模型Nemotron-3-Diarization把这一能力从企业级专有服务拉到了单张消费级 GPU 即可本地运行的层面约 1 亿参数、支持最多 8 位说话人、流式推理输入缓冲延迟最低可到 0.32 秒且遵循 OpenMDW 1.1 许可允许商用。本文基于仓库源码带你从零开始装环境、拉权重、跑通离线 Demo并逐字段读懂带说话人标签的输出。先看全景这个模型解决什么凭什么快在进入实操前先建立一个直观认知。说话人分离的经典方案是先声纹聚类、后时间切分流程长、依赖多且对重叠语音敏感。Nemotron-3-Diarization 走的是端到端路线输入 16 kHz 单声道音频直接输出 8 个说话人通道的逐帧活动概率。根据 README.md 中的架构描述模型核心是 31 层带 RoPE 旋转位置编码的 Transformer 编码器10 ms 的 Mel 频谱特征先做 8 倍堆叠feature stacking得到 80 ms 的编码器帧率这是 0.32 秒超低延迟的关键前提编码器上方接一层 Conv1D把 80 ms 的预测上采样回 10 ms 的输入特征分辨率流式推理时采用 Streaming Sortformer 提出的 AOSC按到达顺序的说话人缓存与 FIFO 队列缓存保留此前各说话人的身份信息FIFO 为每个处理块提供近期帧上下文从而在分块流式推理下保持身份不漂移且音频时长不受限制。与仓库一并提供的演示动图streaming_diarization_demo.gif直观展示了这套模型配合流式 ASR 时边说话、边出带说话人标签转写的效果。两个关键数字值得一提在 DIHARD III 评测集上离线配置30.4 s 缓冲下模型的 DER 为 12.73%而上一代 4 说话人基线diar_streaming_sortformer_4spk-v2.1为 19.09%在 5–9 说话人子集上DER 从 40.21% 大幅降至 27.58%这正是8 人会议场景最吃力的部分。而把延迟压到 0.32 s 后DER 仅微增至 13.55%——低延迟与准确率之间的权衡控制得相当好。第 1 步装好 NeMo 依赖把权重拿到本地模型本体是一份.nemo格式的检查点仓库根目录即包含 Nemotron-3-Diarization.nemo约 198 MBGit LFS 指针指向的真实文件约 189 MB。推理依赖 NVIDIA NeMo Speechnemo-toolkit[asr]官方推荐的安装命令出自 README.mdapt-get update apt-get install -y libsndfile1 ffmpeg uv pip install Cython packaging uv pip install nemo-toolkit[asr]要求 Python 3.12。如果你打算用仓库自带的这份.nemo文件做离线推理这是最省事的路径如果希望走 Hugging Face 模型库自动下载也可以直接使用模型 IDnvidia/Nemotron-3-Diarizationfrom_pretrained方式需要可读取该仓库的 HF Token。两种加载方式在代码中差异很小from nemo.collections.asr.models import SortformerEncLabelModel # 方式一从本地 .nemo 文件恢复推荐本仓库自带该文件 diar_model SortformerEncLabelModel.restore_from( restore_pathNemotron-3-Diarization.nemo, map_locationcuda, strictFalse, ) # 方式二从 Hugging Face 直接拉取 # diar_model SortformerEncLabelModel.from_pretrained(nvidia/Nemotron-3-Diarization) diar_model.eval()模型运行时要求 NVIDIA GPU 环境官方支持 Ampere 及更新的架构评估配置默认使用 BF16 精度一张 24 GB 显存级别的显卡即可流畅承载离线与流式推理。第 2 步一条路径跑通离线 Demo仓库 README.md 的 Quick Start 给出了最小可用示例这里拆解成配置流式参数 调用 diarize两步。SortformerEncLabelModel的流式行为由一组以80 ms 帧为单位的参数控制离线场景对应Very high latency档位diar_model.sortformer_modules.chunk_len 340 diar_model.sortformer_modules.chunk_right_context 40 diar_model.sortformer_modules.fifo_len 40 diar_model.sortformer_modules.spkcache_update_period 300 diar_model._check_streaming_parameters() predicted_segments diar_model.diarize(audio[/path/to/your/audio.wav], batch_size1)diarize()的入参有 4 种形态覆盖从单文件快速验证到批量/流式服务的全部场景输入方式写法注意事项单个文件路径audio/path/to/a.wav支持.wav/.flac/.opus/.mp3路径列表audio[a.wav, b.wav]批量推理Numpy 数组audionp.random.randn(16000*10).astype(np.float32)必须同时传sample_rate默认 16000JSONL manifestaudio/path/to/manifest.json每行含audio_filepath、offset、duration对于 numpy 数组和 manifest 输入官方文档反复强调numpy 数组必须显式指定sample_rate默认 16 kHzmanifest 则允许按offset/duration切片例如只处理一段 600 秒会议录音中的指定区间{audio_filepath: /path/to/multispeaker_audio1.wav, offset: 0, duration: 600}如果手头音频不是 16 kHz 单声道先做一次转换见 ASR_INTEGRATION_GUIDE.mdffmpeg -i input.mp3 -ac 1 -ar 16000 -c:a pcm_s16le conversation.wav想对效果做量化验证、按collar/ignore_overlap复现 DER 指标的读者可以进一步使用 NeMo Speech 的e2e_diarize_speech.py评测脚本传入 manifest、RTTM 参考标注与上述流式参数组合——评估协议的完整说明见仓库的 diarization_evaluation.md。第 3 步读懂输出——两种形态一个逻辑diarize()的默认返回是一份带说话人标记的时间片段列表形如[speaker1, 0.51, 12.62] [speaker2, 12.98, 25.10] ...每个元素包含三个字段通用说话人标签speaker index、起始秒、结束秒。这正是会议转写下游最需要的形态——不关心声纹是谁只关心第几号发言人、在哪段时间说话。如果需要更细粒度的信息传入include_tensor_outputsTrue会额外返回逐帧说话人活动概率张量predicted_segments, predicted_probs diar_model.diarize( audio[/path/to/your/audio.wav], batch_size1, include_tensor_outputsTrue, )predicted_probs是一个[T, 8]的浮点张量T是输出帧数默认帧步长 10 ms可配置为 30/80/240 ms 等 10 的倍数8 个通道分别对应 8 位说话人的活动概率取值范围[0, 1]。理解这 8 个通道的顺序很重要通道按说话人在音频中的首次出现时间排序arrival-time ordering。这是 Sortformer 系列模型置换解耦设计的核心——传统 diarization 模型存在说话人排列歧义permutation problem即同一个说话人在不同片段可能被分到不同通道Nemotron-3-Diarization 通过按首现排序统一了通道语义再配合流式场景下的 AOSC 说话人缓存使得1 号说话人从头到尾都指向同一个人不会中途漂移。这也意味着输出标签是会话内匿名的身份编号而非真实姓名或生物特征。若应用需要显示人名必须在系统层面单独做注册映射详见 ASR_INTEGRATION_GUIDE.md 的说明。时间片段可以直接喂给下游 ASR 做切段转写但仓库更推荐的是与多说话人流式 ASR 的联合部署以multitalker-parakeet-streaming-0.6b-v1或nemotron-3.5-asr-streaming-0.6b作为 ASR 侧由speech_to_text_multitalker_streaming_infer.py脚本把 diarization 的逐帧活动概率与 ASR 流对齐最终产出谁说了什么的完整转写输出到 SegLST 格式 JSONSpeaker 0: Welcome, everyone. Let us begin. Speaker 1: I have the latest numbers. Speaker 2: I agree, but there is one remaining issue.延迟与精度的取舍四档配置怎么选流式推理的延迟由(CHUNK_LEN RIGHT_CONTEXT) × 80 ms决定即输入缓冲延迟不含计算时间。README.md 给出了四档推荐配置配置延迟SPKCACHE_LENFIFO_LENCHUNK_LENRIGHT_CONTEXTUPDATE_PERIODVery high离线30.4 s2644034040300Low1.04 s26426494222Very low0.64 s26426462222Ultra-low0.32 s26426431222选择逻辑很直观录好的会议文件直接走离线档准确率最高实时同传、现场速记等服务按可接受的延迟选低档或超低档。实测数据显示README.md 性能表从离线切到 0.32 s 超低延迟DIHARD III 的 DER 仅从 12.73% 升到 13.55%而推理速度方面离线档 eager 模式下 RTFx 达 1340batch1/ 12196batch32即便超低延迟档也有 12.5 / 199远超实时需求。最后提醒三件容易踩坑的事其一模型上限是 8 位说话人音频中说话人超过 8 个时必然出现漏检或错配explainability.md 明确标注了这一技术限制其二numpy 数组输入漏传sample_rate会得到错误结果其三说话人标签是会话级、非持久化的重连新会话后标签编号可能变化不能把标签当身份标识使用。至于数据合规模型本身输出不含身份信息、训练数据均已授权但你上传到服务的音频仍属个人数据采集与存储责任在自己一方详见 privacy.md 与 safety.md。从安装依赖到读懂第一段带标签的输出整个链路不超过 10 分钟。下一步可以顺着 ASR_INTEGRATION_GUIDE.md 把多说话人流式 ASR 接进来把谁在何时说话升级成完整的谁说了什么。【免费下载链接】Nemotron-3-Diarization项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Nemotron-3-Diarization创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?