三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

什么是说话人分离?用diar_streaming_sortformer_4spk-v2理解“谁在何时说了什么“

什么是说话人分离?用diar_streaming_sortformer_4spk-v2理解“谁在何时说了什么“

什么是说话人分离?用diar_streaming_sortformer_4spk-v2理解"谁在何时说了什么"

【免费下载链接】diar_streaming_sortformer_4spk-v2项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/diar_streaming_sortformer_4spk-v2

🎙️ 听一段多人会议录音,你能分辨出每一句是谁说的吗?这正是说话人分离(Speaker Diarization)要解决的核心问题:它不关心"说了什么",只回答"谁在何时说了什么"。NVIDIA 开源的diar_streaming_sortformer_4spk-v2是一款基于 Sortformer 架构的流式说话人分离模型,能在音频输入的同时实时区分最多 4 位说话人。本文用大白话带你理解说话人分离的原理,并快速上手体验这个模型。

说话人分离是什么?一个场景让你秒懂

想象一下:你把一段 1 小时的会议录音交给转写工具,得到的文字稿里,老板和同事的发言混在一起,根本分不清是谁说的——这份稿子几乎没法用。说话人分离模型要做的,就是把录音切成一段段时间,并给每一段贴上"说话人 A / 说话人 B"的标签。

它的输出非常直观,形如:

开始时间(秒)结束时间(秒)说话人
0.03.2speaker_0
3.48.1speaker_1
8.312.6speaker_0

有了这份"时间轴 + 说话人"的标签,再配合语音识别(ASR)的转写文字,就能生成带人名标识的会议纪要、字幕或客服质检报告。

说话人分离和语音识别有什么区别?

很多人容易把两者搞混,其实分工完全不同:

  • 语音识别(ASR):把声音变成文字,解决"说了什么"。
  • 说话人分离(Diarization):区分不同人的声音,解决"谁在说"。

在实际产品中,两者常常"组队"出场:先分离说话人,再对每个说话人的片段做识别,最终得到"何时说了什么"的完整结构化结果。这也正是 diar_streaming_sortformer_4spk-v2 在语音转写、智能会议、语音助手场景中不可或缺的原因。

Sortformer:端到端说话人分离模型如何工作?

传统说话人分离采用"语音活动检测 + 声纹聚类"的流水线方案,步骤多、误差会层层累积。而Sortformer是端到端(End-to-End)神经模型,直接学习"每一帧音频属于哪位说话人",结构上由 Fast-Conformer(NEST)编码器和 18 层 Transformer 组成,参数规模约 1.17 亿。

它有一个巧妙的思路:按说话人开口的先后顺序编号(Arrival-Order),第一位开口的是 speaker_0,第二位是 speaker_1……以此类推,从根源上绕开了传统端到端模型头疼的"排列问题"。

流式说话人分离:一边听,一边判断"谁在说话"

diar_streaming_sortformer_4spk-v2 最亮眼的地方是流式(Streaming)能力——它不需要等整段音频播完,而是边接收音频边输出结果,非常适合实时会议、直播字幕等场景。

它的秘诀是AOSC(到达顺序说话人缓存):模型会把之前听到的每个说话人的声学特征缓存在内存里,处理新音频块时,直接与缓存中的特征比对,就能快速判断"这段声音像谁"。

流式处理还依赖一个FIFO(先进先出)帧缓冲队列,用来保存紧邻当前块的历史音频帧,保证前后文连贯:

你可以通过 5 个参数自由调节"延迟 vs 精度"的平衡(单位:80ms 帧):

配置档位输入缓冲延迟实时率 RTFCHUNK_SIZE
高延迟(高精度)30.4s0.002340
中延迟10.0s0.005124
低延迟1.04s0.0936
超低延迟0.32s0.1803

需要实时字幕就选低延迟档位,追求离线高精度就选高延迟档位。

如何快速上手 diar_streaming_sortformer_4spk-v2?

在项目仓库中可以找到diar_streaming_sortformer_4spk-v2.nemodiar_streaming_sortformer_4spk-v2.q8_0.gguf两个模型文件。最简单的方式是安装 NVIDIA NeMo 工具包后,用几行 Python 完成第一次说话人分离:

from nemo.collections.asr.models import SortformerEncLabelModel diar_model = SortformerEncLabelModel.from_pretrained("nvidia/diar_streaming_sortformer_4spk-v2") diar_model.eval() predicted_segments = diar_model.diarize(audio=["/path/to/your/audio.wav"], batch_size=1) for segment in predicted_segments[0]: print(segment)

如需获取模型文件,可 clone 仓库:

git clone https://gitcode.com/hf_mirrors/nvidia/diar_streaming_sortformer_4spk-v2

如果你更偏好轻量级本地部署,仓库中的 GGUF 量化版(q8_0)可以配合 NeMo-Speech.cpp 直接运行,无需搭建完整的深度学习环境。🎉

效果如何?用 DER 错误率说话

评价说话人分离模型,业界最常用指标是DER(Diarization Error Rate,说话人分离错误率),数值越低越好。diar_streaming_sortformer_4spk-v2 在公开评测集上的表现:

评测集说话人数DER
DIHARD III Eval(1-4 人)1-413.24%
CALLHOME part2(2 人)26.57%
CH109(2 人)24.88%

作为参考,在 CALLHOME 电话语音场景下错误率可低至 5% 左右,已经相当接近人工标注水平。

使用限制与适用场景

⚠️ 使用前请注意模型的边界:

  • 最多支持4 位说话人,超过 4 人效果会明显下降;
  • 训练数据以英语为主,非英语场景效果可能打折扣;
  • 属于流式在线模式,适合长音频,但超长录音可能影响精度。

推荐场景:✅ 会议录音转写 ✅ 客服电话质检 ✅ 播客/采访字幕 ✅ 语音助手对话理解 ✅ 视频会议实时字幕。

总结

一句话记住说话人分离:它是语音领域回答"谁在何时说了什么"的技术。而 diar_streaming_sortformer_4spk-v2 用端到端 Sortformer + 流式说话人缓存,把这个问题的答案做到了实时、准确、开箱即用。无论是想做会议纪要工具,还是给语音产品加上"认人"能力,它都是一个值得一试的开源选择。🚀

【免费下载链接】diar_streaming_sortformer_4spk-v2项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/diar_streaming_sortformer_4spk-v2

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

← 返回列表