Nemotron-3-Diarization搭配流式ASR实现谁说了什么:说话人归属转写完整实战指南
【免费下载链接】Nemotron-3-Diarization项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Nemotron-3-Diarization
Nemotron-3-Diarization是 NVIDIA 开源的说话人分离(Speaker Diarization)模型,专门回答音频中"谁在什么时候说话"这个问题。将它与流式 ASR(语音识别)模型搭配,就能进一步生成"谁说了什么"的说话人归属转写——会议记录、客服通话、播客字幕等场景的刚需能力。本指南带你从零跑通这条流水线:支持最多8 位说话人、流式延迟最低0.32 秒、单检查点即可覆盖流式与离线两种模式。
先搞懂:分离模型 + 流式ASR 如何配合
很多人以为"语音转文字 + 区分说话人"是两件事,实际上它们是一条流水线:
| 环节 | 负责模型 | 输出 |
|---|---|---|
| 谁在什么时候说话 | Nemotron-3-Diarization | 帧级说话人活动概率(每 10 ms 一帧、8 路通道) |
| 说了什么 | 流式 ASR 模型 | 每个说话人一条独立的转写流 |
这是一条耦合的流式流水线:分离模型持续输出"当前哪些人在说话",ASR 阶段则为每个被发现的说话人维护一条转写流。两者共用同一条音频流,边听边转,无需先录完再处理。
✨ 模型核心亮点:
- 最多 8 位说话人(基线模型只有 4 人),靠"按到达顺序排列输出通道"自动解决说话人顺序问题
- 单一检查点多延迟:输入缓冲延迟从 80 ms(极限)到 30.4 s(离线风格)可调,最低推荐配置为0.32 s
- 仅100M 参数,轻量好部署;输入要求 16 kHz 单声道音频
- 支持分块推理,音频时长无上限
准备工作:跑通分离模型的 3 个快速步骤
第 1 步:安装 NeMo Speech 运行环境
模型基于 NeMo 框架 v3.0,需要 Python 3.12+ 与较新的 PyTorch。最简安装路径:
apt-get update && apt-get install -y libsndfile1 ffmpeg uv pip install Cython packaging uv pip install 'nemo-toolkit[asr]'第 2 步:准备标准格式的音频
配对模型只吃16 kHz、单声道音频。任何格式(mp3、opus、flac)先转换一下:
ffmpeg -i input.mp3 -ac 1 -ar 16000 -c:a pcm_s16le conversation.wav第 3 步:加载模型
模型仓库自带检查点文件 Nemotron-3-Diarization.nemo,可通过模型名nvidia/Nemotron-3-Diarization直接从模型仓库加载,也可用restore_from()加载本地.nemo文件。详细加载方式与流式参数设置见 README.md。
两种开箱即用的流式ASR搭配方案
官方集成指南 ASR_INTEGRATION_GUIDE.md 给出两套验证过的搭配,按需二选一:
| 方案 1:Multitalker Parakeet | 方案 2:Nemotron 3.5 ASR | |
|---|---|---|
| 模型 | nvidia/multitalker-parakeet-streaming-0.6b-v1 | nvidia/nemotron-3.5-asr-streaming-0.6b |
| 语言 | 仅英文 | 开箱支持 32 种语言地区 |
| 重叠语音处理 | 针对重叠语音微调,直接消费说话人活动作为条件 | 用分离活动的掩码识别重叠语音 |
| 关键开关 | masked_asr=false | masked_asr=true |
| 推荐上下文 | att_context_size='[70,13]' | att_context_size='[56,13]' |
方案 1:重叠会议首选 Multitalker Parakeet
在 NeMo Speech 仓库根目录运行多说话人流式推理脚本:
python examples/asr/asr_cache_aware_streaming/speech_to_text_multitalker_streaming_infer.py \ asr_model=nvidia/multitalker-parakeet-streaming-0.6b-v1 \ diar_model=nvidia/Nemotron-3-Diarization \ audio_file=/absolute/path/to/conversation.wav \ max_num_of_spks=8 single_speaker_mode=false masked_asr=false \ parallel_speaker_strategy=true cache_gating=true binary_diar_preds=true \ att_context_size='[70,13]' fifo_len=264 spkcache_update_period=222 \ output_path=./speaker_attributed_output.json方案 2:多语言场景选 Nemotron 3.5 ASR
换 ASR 模型并改 3 个参数即可:asr_model=nvidia/nemotron-3.5-asr-streaming-0.6b、masked_asr=true、att_context_size='[56,13]',再按需指定target_lang=auto(自动推断语言)或具体语言。
关键参数速览
| 参数 | 含义 |
|---|---|
max_num_of_spks=8 | 会话中维护的说话人转写流上限,说话人少时可调低省算力 |
parallel_speaker_strategy=true | 并行处理各说话人的 ASR 流 |
cache_gating=true | 只对有语音活动的说话人跑 ASR,减少无效计算 |
fifo_len/spkcache_update_period | 流式几何参数,保持默认值即可,两个模型的对齐关系不要单独调 |
读懂输出:说话人归属转写长什么样
脚本把最终结果写入speaker_attributed_output.json(NeMo 的 SegLST 格式),每条记录包含文本 + 时间范围 + 匿名说话人标签。渲染后大致是:
Speaker 0: Welcome, everyone. Let us begin. Speaker 1: I have the latest numbers. Speaker 2: I agree, but there is one remaining issue.💡 注意:Speaker 编号是会话内的身份(按该说话人首次出现的时间排序),不代表真实姓名。如果应用要显示人名,需自行通过声纹注册或应用层映射来关联。想实时看流式假设,把generate_realtime_scripts设为true。
流式延迟配置速查表
同一个检查点支持四档延迟,全部以 80 ms 帧为单位配置(来自 README.md):
| 配置 | 输入缓冲延迟 | CHUNK_LEN | RIGHT_CONTEXT | FIFO_LEN | 适用场景 |
|---|---|---|---|---|---|
| 高延迟(离线) | 30.4 s | 340 | 40 | 40 | 批处理、精度优先 |
| 低延迟 | 1.04 s | 9 | 4 | 264 | 准实时字幕 |
| 极低延迟 | 0.64 s | 6 | 2 | 264 | 实时对话 |
| 超低延迟 | 0.32 s | 3 | 1 | 264 | 低延迟交互(推荐最低档) |
延迟 =(CHUNK_LEN + RIGHT_CONTEXT)× 80 ms,不含计算耗时。
SPKCACHE_LEN=264与UPDATE_PERIOD(离线 300 / 流式 222)在所有档中保持一致。
常见问题快速排查 ⚠️
来自 ASR_INTEGRATION_GUIDE.md 的故障排查清单:
- 只出现纯文本、没有说话人标签:确认用的是同时传
asr_model和diar_model的多说话人脚本,而不是单独调asr_model.transcribe() - 模型下载失败:检查模型条款是否已接受、Token 是否同时有权限读取两个模型仓库
- 音频被拒绝或效果差:转成 16 kHz、16 位 PCM 单声道再试
- 显存不足(CUDA OOM):调低
max_num_of_spks——多说话人架构会为每个活跃说话人保留独立 ASR 状态 - 重连后说话人编号变了:编号是会话内的,属正常现象,不是生物特征身份
性能有多强?看 DER 指标
说话人分离的通用指标是DER(说话人分离错误率),越低越好。Nemotron-3-Diarization 对比上一代 4 人基线模型(30.4 s 离线档):
| 基准测试 | 基线 DER | Nemotron-3 DER |
|---|---|---|
| DIHARD III(整体) | 19.09 | 12.73 |
| CALLHOME-Part2(电话) | 10.32 | 9.10 |
| NOTSOFAR1 MHM(会议) | 21.77 | 6.77 |
| AMI SDM(远场会议) | 21.42 | 11.14 |
在 5–9 人、远场、重叠语音等困难场景下提升尤为明显,且超低延迟档(0.32 s)仅付出 0.4~1 个点的 DER 代价。完整的 8 组基准对比与推理速度(RTFx)数据见 README.md 性能评测章节;用 NeMo 评测脚本复现 DER 的方法(含 manifest 格式与 collar 设置)见 diarization_evaluation.md。
安全与合规提示
- 部署前请用你自己的业务数据验证效果,模型卡强调需按用例做迭代测试
- 语音属于个人数据:处理前请确认录音合规与用户知情,详见 privacy.md
- 公平性与偏见评估:bias.md;可解释性说明:explainability.md;安全与漏洞上报:safety.md
🎯一句话总结:Nemotron-3-Diarization 负责"谁在说",流式 ASR 负责"说了啥",一条命令即可串起整条流水线——0.32 s 延迟、8 人上限、无时长限制,会议与实时对话场景的"谁说了什么"问题到此解决。
【免费下载链接】Nemotron-3-Diarization项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/Nemotron-3-Diarization
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考