pyannote

关注
义项:语音说话人分析工具库
pyannote

pyannote 是一个以 Python 编写、基于 PyTorch 的开源说话人分析工具库,其核心模块 pyannote.audio 用于说话人日志(又称说话人分割聚类),即回答「谁在什么时候说话」这一问题[1]。它提供可训练、可联合优化的神经网络构件,并附带覆盖多领域数据的预训练模型与流水线,被广泛用于会议转写、呼叫中心分析、语音助手与视频配音等语音处理场景[2]。该项目由法国国家科学研究中心(CNRS)研究员埃尔韦·布雷丹(Hervé Bredin)主导开发,相关成果发表于 2020 年的 ICASSP 会议[1]。

百科 图文
目录
  1. 定义
  2. 原理
  3. 发展历程
  4. 应用
  5. 局限
  6. 参见

定义

pyannote 是一个用 Python 编写、以 PyTorch 深度学习框架为基础的开源工具库,其主体组件 pyannote.audio 面向说话人日志(speaker diarization)任务,即把一段音频按说话人身份切分为若干连续时段并加以标注[1]。用一句话概括这一任务,就是判断「谁在什么时候说话」[2]。

工具库以「神经网络构件」的方式组织:语音活动检测、说话人变化检测、重叠语音检测与说话人嵌入等子任务各自有独立的模型实现,这些构件既可以单独训练,也可以组合成完整流水线并联合调优[3]。除 pyannote.audio 外,同一项目下还包含用于可复现评测与误差分析的 pyannote.metrics、用于管理实验协议的 pyannote.database 等辅助库[4]。

原理

工具库中的多数子任务被统一建模为序列标注问题:输入是一段特征向量序列 $\mathbf{X}=\{x_1, x_2, \ldots, x_T\}$,输出是长度相同的标签序列 $\mathbf{y}=\{y_1, y_2, \ldots, y_T\}$,类别数 $K$ 随任务而定[1]。由于直接处理长度可变的长音频并不实际,训练时从语料中随机抽取定长子序列组成小批量,测试时则以与训练等长的重叠滑窗逐段处理,再把每个时间步上的多组预测分数取平均得到最终结果[1]。

各子任务只是 $K$ 的取值不同:语音活动检测令 $K=2$,区分「有人说话」与「无人说话」;说话人变化检测同样令 $K=2$,但训练时把变化点附近约 200 毫秒邻域的人为标注为正类,以缓解类别不平衡;重叠语音检测令 $K=2$,判断该时刻是否同时有两人及以上在说话[1]。

自 2.1 版起,默认流水线改为三阶段结构:先以短滑窗对局部音频做端到端说话人分割,再为窗口内每个活跃说话人提取神经说话人嵌入,最后用凝聚层次聚类把所有局部说话人归并为全局说话人[5][6]。分割阶段采用 5 秒窗口、500 毫秒步长,对最多 3 名说话人每个 16 毫秒帧输出一次活跃概率[6]。第 3 步之所以选择经典的凝聚层次聚类而非谱聚类,是因为它只需要 1 个距离阈值作为停止条件,且不要求嵌入按严格周期排列[6]。


flowchart LR

A[输入音频<br/>16 kHz 单声道] --> B[局部神经网络说话人分割<br/>5 秒滑窗 / 500 毫秒步长]

B --> C[按阈值二值化<br/>得到瞬时说话人数]

C --> D[逐窗口提取说话人嵌入]

D --> E[凝聚层次聚类<br/>距离阈值停止]

E --> F[按瞬时人数重构<br/>输出说话人日志]

发展历程

项目源起于埃尔韦·布雷丹 2008 年的博士论文工作,其主题为自动语音处理;自 2014 年起,他把研究重心放在「谁在何时说话」这一问题上[7]。作为开源库的 pyannote.audio 自 2019 年前后已在代码托管平台上公开开发,1.x 系列支持 Python 3.7 及以上版本,主要面向 Linux 与 macOS[8]。

2020 年 5 月,团队在国际声学、语音与信号处理会议(ICASSP)上发表论文,正式介绍 pyannote.audio 及其面向语音活动检测、说话人变化检测、重叠语音检测与说话人嵌入的预训练模型[1]。2022 年 10 月发布的 2.1 版对默认流水线做了大幅重构,形成分割、嵌入、聚类三阶段范式[9]。该版本流水线被用于多项评测竞赛,在 Ego4D 2022 与 Albayzin 2022 中获得第 1 名,在 VoxSRC 2022 中获得第 6 名[5]。

2023 年 11 月发布的 3.1 版移除了对 ONNX 运行时的依赖,分割与嵌入均改由纯 PyTorch 执行,以简化部署[10]。同年团队在 VoxSRC 2023 技术报告中改用 10 秒窗与 1 秒步长、用于重叠语音建模的幂集多类交叉熵损失、WavLM 自监督特征以及 WeSpeaker 预训练 ResNet,最终单系统在测试集上取得 4.77% 的日志错误率(带 250 毫秒容差)[11]。2024 年,布雷丹与樊尚·莫利纳(Vincent Molina)共同创办 pyannoteAI 公司,将非开源的商业模型与云端服务与开源库并行推进[7]。

应用

说话人日志被视作对话式人工智能的基础层,为人类之间以及人机之间的对话提供说话人层面的结构化信息,进而支撑会议转写、呼叫中心分析、语音智能体与视频配音等下游应用[2]。开源模型还常与语音识别系统配合,用于生成带有说话人归属的转写文本[12]。

在具体用法上,预训练流水线可通过从模型仓库加载后直接调用,输入为 16 千赫兹单声道音频,立体声或多声道文件会被自动下混为单声道,采样率不符的文件在载入时自动重采样[10]。若已知说话人数,可通过参数指定精确人数或给出上下界;流水线默认在处理器上运行,也可迁移至图形处理器加速[10]。输出结果可写为 RTTM 格式,便于与其他评测工具衔接[10]。

除日志任务外,配套的能力还包括说话人识别与声纹。日志只给出 SPEAKER_00、SPEAKER_01 之类的通用标签,识别则借助声纹把片段对应到具体身份,二者解决的问题不同[12]。声纹要求音频只含目标说话人且没有重叠,时长上限为 30 秒,模型与语言无关[13]。此外,同一项目下的 pyannote.metrics 提供日志错误率、纯度与覆盖率、识别错误率等指标,并支持在 Python 或 Jupyter Notebook 环境中直接可视化流水线各步骤的输出,用于误差诊断[14]。

局限

该工具库只支持 Python 3.7 及以上版本,且官方面向 Linux 与 macOS,虽有在 Windows 上运行的可能,但并不保证可用,也没有添加官方支持的打算[8]。使用预训练流水线需要从模型仓库下载权重并配置访问令牌、接受模型使用条件,离线部署时还需自行准备本地模型文件与配置文件[10][15]。

聚类这一步本身依赖上游分割模型的结果,分割出错会连带劣化说话人嵌入的质量[6]。分割模型在训练时被设计为置换不变,并限定每个窗口内最多 3 名活跃说话人,因此同一说话人在不同窗口可能被赋予不同编号,需要靠后续聚类重新归并[6]。在 AVA-AVD、Ego4D 等包含大量重叠语音与远场拾音的公开评测集上,各版本流水线的日志错误率仍在 37% 至 46% 区间,说明复杂声学条件下的准确率仍有明显提升空间[2]。

评测口径本身也会影响结论:人工标注无法精确到音频采样级,研究中常在说话人段落边界附近去除 500 毫秒的容差区间,而重叠语音在带容差评测中会被大量剔除,使得最难的部分反而被回避,因此不同系统之间的错误率并不总能直接比较[14][16]。

参见

  • 说话人日志 —— 本工具库处理的核心任务,即判定音频中每个时段由哪位说话人发声

  • PyTorch —— pyannote.audio 所依赖的深度学习框架

  • 语音活动检测 —— 用于判断音频中是否存在语音的前置子任务

  • 说话人识别 —— 与日志任务互补,用于把说话人片段对应到具体身份

  • Hugging Face —— 托管该工具库预训练模型与流水线的平台

  • 日志错误率 —— 衡量说话人日志系统性能的主要评价指标

参考资料

  1. arxiv.org 上的网页 [引用日期2026-10-14]
  2. README.md · pyannote/README at main [引用日期2026-10-14]
  3. spsicassp20vid0175 [引用日期2026-10-14]
  4. pyannote | GitHub owners [引用日期2026-10-14]
  5. bredin23_interspeech [引用日期2026-10-14]
  6. document [引用日期2026-10-14]
  7. cnrsinnovation.com 上的网页 [引用日期2026-10-14]
  8. pypi.org 上的网页 [引用日期2026-10-14]
  9. Changelog [引用日期2026-10-14]
  10. README [引用日期2026-10-14]
  11. pyannote.audio speaker diarization pipeline at VoxSRC 2023 [引用日期2026-10-14]
  12. Feature overview [引用日期2026-10-14]
  13. How to identify speakers with voiceprints [引用日期2026-10-14]
  14. INTERSPEECH 2017 [引用日期2026-10-14]
  15. { [引用日期2026-10-14]
  16. pyannote.audio speaker diarization pipeline at VoxSRC 2022 [引用日期2026-10-14]
词条评价
词条统计

浏览次数:1 次

阅读量:0 次 · 阅读完成量:0 次

最近更新:2026-10-13T19:58:58Z

历史版本

本条目引用的词条
说话人日志 PyTorch 语音活动检测 说话人识别 Hugging Face 日志错误率