什么是说话人分离?工作原理及应用场景
- 发布时间
说话人分离会处理说话人数量未知的音频流,并生成带标签片段的时间线:说话人 A 从 0:00 到 0:42,说话人 B 从 0:42 到 1:15,之后又是说话人 A。系统不知道说话人的真实身份,但能识别他们是不同的人,并在整段录音中保持标签一致。
这一过程让多说话人音频变得可用。会议纪要、呼叫中心分析、访谈转写、播客编辑和法律记录,都不仅需要知道说了什么,还需要知道是谁说的。
本指南将介绍说话人分离的工作原理、它与分段和识别等相关技术的区别、可用的开源工具,以及如何衡量说话人分离系统的表现。
摘要
- 说话人分离按发言者对录音进行分段,生成带标签的说话人轮次,但不会按姓名识别个人。
- 说话人分离不同于说话人分段,后者用于找出说话人变化的时间点;也不同于说话人识别,后者将声音匹配到真实姓名。
- 说话人分离性能通常通过说话人分离错误率(DER)衡量整体准确性,并通过 Jaccard 错误率(JER)检查每位说话人的准确性是否稳定。
什么是说话人分离?它如何工作?
说话人分离是按发言者将音频流划分为多个片段的过程。带说话人分离标签的转录会为每段音频标记说话人身份。简单说,它回答的是“谁在何时说话?”
原始会议转录只提供文字;经过说话人分离的转录则会告诉你,说话人 1 提出了问题,说话人 2 作了回答,而说话人 3 在中途插话。
大多数说话人分离系统都采用包含 4 个阶段的流程:

下面详细介绍这些阶段。
语音活动检测(VAD)
语音活动检测会将语音与其他声音分开:静音、背景噪声、音乐或键盘敲击声。只有包含实际语音的音频片段才会进入下一阶段。
这一阶段一旦出错,误差会传递到后续所有阶段。
分段
接着,系统会在说话人可能切换的位置划分含语音片段,例如声调变化、发言轮次间的停顿或音高模式变化。大多数系统会比较候选边界两侧的声学特征,直接检测这些变化点。
有些分段工具会将音频切成时长统一的短窗口,例如每段 2 秒,再依靠聚类阶段合并属于同一说话人的相邻窗口。
嵌入提取
每个语音片段都会被转换为说话人嵌入,即一个捕捉该片段发言者声音特征的数值向量。同一说话人的嵌入在向量空间中彼此接近,不同说话人的嵌入则相距较远。
聚类
系统随后将嵌入分组,让同一说话人的片段共享同一个标签。通常系统并不知道说话人数量,因此聚类算法必须自行推断:这个听起来略有不同的片段是新说话人,还是同一个人换了一种语气。

输出结果是一组关联到时间范围的说话人标签,通常会与转录文本配对。例如,一段双人通话经过说话人分离后的转录如下:
- [speaker_0] 感谢来电。有什么可以帮你?
- [speaker_1] 你好,我想咨询上个月的账单。
- [speaker_0] 好的,我来查一下。
这些标签是匿名且内部一致的。每次出现的 Speaker_0 都是同一种声音,但系统不知道 speaker_0 的名字叫 Fergal。关联真实身份是另一项任务,下面会介绍。
说话人分段与说话人识别的主要区别
说话人分段和说话人识别都与说话人分离密切相关,因此三者常被混为一谈。
它们解决的问题略有不同,因此评估工具时理解其中区别很重要。
如前所述,说话人分段是说话人分离流程早期的一个步骤。它找出说话人从一种声音切换到另一种声音的边界,但不分配标签。分段会告诉你,0:42 处发生了变化。说话人分离则进一步对这些片段分组,生成完整的带标签结果,让你知道 1:15 处的声音与录音开头发言的声音相同。
说话人识别是独立于说话人分离的功能,但经常与其结合使用。识别用于确定说话人的真实身份。识别系统会将声音与已注册的声纹比对,以已知说话人作为参考返回身份。完成识别后,speaker_0 和 speaker_1 就变成了“Fergal”和“Eric”。
许多产品会结合这些工具,生成更完整的最终转录。例如,会议工具可能自动完成这一过程,甚至从用户在 Teams 或 Meet 中设置的姓名等字符串提取信息,让每位参会者的发言无需人工审核即可按姓名归属。

常用的开源说话人分离工具和库
如果需要控制力、灵活性或本地部署,值得考虑开源说话人分离工具。最佳选择取决于处理的音频类型(电话、会议、播客、广播)、延迟要求,以及可投入的工程时间。
以下是一些常用选项。
Pyannote.audio
Pyannote.audio 是一个基于 PyTorch、专为说话人分离构建的工具包,也是最常用的开源方案之一。它提供覆盖完整说话人分离技术栈的预训练流程,包括 VAD、分段、嵌入和聚类,也提供了在自有数据上训练或微调模型所需的组件。
其预训练模型通过 Hugging Face 发布,常作为大型转录项目中的说话人分离层。
WhisperX
WhisperX 将 OpenAI 的 Whisper 转录与说话人分离及强制对齐相结合。Whisper 本身能生成高质量转录,但不会分配说话人标签,时间戳也只是近似值。WhisperX 增加了词级时间戳对齐,并集成基于 pyannote 的说话人分离,使转录中的每个词都有准确时间戳和说话人标签。
NVIDIA NeMo
NVIDIA NeMo 将说话人分离纳入更广泛的 对话式 AI 框架。它提供可训练的说话人分离模型,包括可处理重叠语音的端到端方案,适合在 GPU 基础设施上大规模构建自定义语音系统的团队。
这些工具都需要自行管理说话人分离基础设施,包括模型部署、扩展、监控和更新。不想承担这些运维成本的团队,可以选择托管式说话人分离 API。它们既可集成到现有 workflow,也可处理完整的说话人分离流程,适合用于生产环境,例如客户支持分析、会议转录和播客处理。
实时说话人分离:挑战和应用场景
实时说话人分离比处理完整录音难得多,因为系统必须在上下文不完整时作出决策。
离线系统会在作出判断前查看整段录音。它能对比第 2 分钟和第 40 分钟的声音,并有把握地判断它们是否来自同一位说话人,因为两个时刻的信息都可获取。实时系统没有这种条件:语音一到就必须打上标签,既无法知道之后会说什么,作出决定后也几乎没有机会修改。
正是由于缺少未来上下文,以下 3 个问题在实时场景中更难解决:
- 延迟与准确性: 无法来回查看整段对话时,满足更严格的响应时间预算会直接牺牲准确性。
- 语音重叠: 多人同时说话时,能重新处理音频的系统或许可以将其拆分。实时系统必须立即将其归为单一标签,或使用专门的重叠感知模型。
- 短发言: 简短的“是”或“请说”几乎无法提供足够的声音特征;没有可参考的周边上下文时,系统仍须立即确定标签。
尽管存在难度,有些应用无法等到录音结束。实时字幕需要在会议和直播中随发言提供说话人标签。联络中心软件需要在通话中向智能体提供指导,因此必须实时了解客户说了哪些话。语音智能体处理多方参与的通话时,也需要即时追踪是谁提出了什么问题。在这些场景中,稍低但即时的准确性优于更高但延迟的准确性。
对于分析、合规审查和生成转录等并非真正需要实时标签的工作负载,批量说话人分离仍是更好的选择,因为准确性显著更高。
如何评估说话人分离性能
衡量说话人分离准确性时,最重要的两个指标是:反映整体准确性的说话人分离错误率(DER),以及检查每位说话人准确性是否稳定的 Jaccard 错误率(JER)。
DER 专门计算总语音时长中被错误归属的比例,包含 3 类错误:
- 误报语音: 没有人说话时,系统将片段标记为语音。
- 漏检语音: 有人在说话,但系统将其标记为静音。
- 说话人混淆: 检测到了语音,但归属给了错误的说话人。
DER = (误报 + 漏检语音 + 说话人混淆)/ 总语音时长
DER 为 10% 表示上述 3 类错误合计占总语音时长的十分之一。数值越低越好,且只有在相同条件下用相同数据测得的分数才具有可比性。DER 会因音频质量、说话人数量和录音中的重叠程度而大幅变化。
Jaccard 错误率(JER)分别衡量每位说话人的分离准确性,再对所有说话人的结果取平均值。对于每位参考说话人,评估器会匹配系统中最接近的说话人标签,并比较二者正确重叠的时长与分配给任一说话人的总时长。
例如,假设一场 60 分钟的会议中,说话人 A 发言 50 分钟,说话人 B 发言 10 分钟。某个说话人分离系统正确标记了说话人 A 的 50 分钟中的 48 分钟,却只正确标记了说话人 B 的 10 分钟中的 4 分钟。由于会议大部分时间属于说话人 A,整体 DER 看起来可能仍然不错。JER 会让说话人 B 的较差结果获得同等权重,因为它会先独立评估说话人 A 和 B,再对其分数取平均值。
JER_speaker = 1 - (correct_overlap / (ref_time + sys_time - correct_overlap))
最终 JER 是各说话人错误率的平均值:
JER = (1 / N)* Σ[JER_speaker_i],其中 i = 1..N
同时跟踪 DER 和 JER 能更全面地了解说话人分离准确性:DER 衡量整体准确性,JER 则衡量这种准确性是否适用于包括较少发言者在内的每位参与者。
使用代表生产环境的音频进行测试
评估说话人分离系统时,应在与实际部署条件相符的音频上同时计算 DER 和 JER,包括常见的说话人数量、音频质量和串音程度。
公开的基准分数可能是在干净、受控的数据集上测得,例如录音室录音;它们很少能反映真实通话录音或实时会议的声音。即使系统在基准测试中表现优异,也可能在嘈杂、有重叠的真实音频中显著表现不佳。确定采用说话人分离产品前,先使用自己的数据进行测试。
使用 ElevenAPI 开始说话人分离
如果准备构建支持多说话人的转录功能, Scribe v2 是 ElevenLabs 的产品,可通过单个说话人分离功能调用文本转语音 API。将 diarize=true 与音频一同发送至端点,JSON 响应就会为每个词标记说话人 ID,支持最多 32 位说话人、90 多种语言和最长 10 小时的文件。
两项选项可扩展标准的说话人分离输出。对于通话录音,detect_speaker_roles=true 会将说话人标记为智能体和客户,而非匿名编号。如果工作区已注册说话人档案,use_speaker_library=true 可将检测到的说话人与已注册声音匹配,在一次请求中结合说话人分离和识别。
一个说话人分离阈值参数可用于调整过度拆分和合并说话人之间的权衡。如果说话人已在独立音频通道中分离,例如立体声通话录音,多通道转录会按通道分配说话人,完全跳过说话人分离。
文本转语音快速入门将逐步讲解首次集成。针对受监管的部署,平台符合 SOC 2、ISO 27001、PCI DSS L1 和 HIPAA 标准,并提供 EU 数据驻留和零保留模式。
准备在系统中加入说话人分离功能?先获取 API 密钥,或查看ElevenLabs 文档了解更多。


