🚀 🎹 说话人分割 3.1
本流水线是用于音频处理的开源工具,主要解决说话人分割问题,即识别音频中不同说话人的发言时段。它改进了之前版本对 onnxruntime
的使用问题,采用纯 PyTorch 运行,更易于部署且可能加快推理速度。
🚀 快速开始
若要在生产环境中使用此开源流水线,可充分利用我们的咨询服务。
✨ 主要特性
- 此流水线与
pyannote/speaker-diarization-3.0
基本相同,但移除了对 onnxruntime
的有问题使用。现在,说话人分割和嵌入均以纯 PyTorch 运行,这将简化部署并可能加快推理速度。
- 它要求
pyannote.audio
版本为 3.1 或更高。
- 它接收采样率为 16kHz 的单声道音频,并将说话人分割结果输出为一个
Annotation
实例:
- 立体声或多声道音频文件会通过对声道求平均值自动降混为单声道。
- 采样率不同的音频文件在加载时会自动重新采样为 16kHz。
📦 安装指南
- 使用
pip install pyannote.audio
安装 pyannote.audio
3.1
版本。
- 接受
pyannote/segmentation-3.0
的用户使用条款。
- 接受
pyannote/speaker-diarization-3.1
的用户使用条款。
- 在
hf.co/settings/tokens
创建访问令牌。
💻 使用示例
基础用法
from pyannote.audio import Pipeline
pipeline = Pipeline.from_pretrained(
"pyannote/speaker-diarization-3.1",
use_auth_token="HUGGINGFACE_ACCESS_TOKEN_GOES_HERE")
diarization = pipeline("audio.wav")
with open("audio.rttm", "w") as rttm:
diarization.write_rttm(rttm)
高级用法
在 GPU 上处理
pyannote.audio
流水线默认在 CPU 上运行。你可以使用以下代码将其发送到 GPU:
import torch
pipeline.to(torch.device("cuda"))
从内存中处理
将音频文件预加载到内存中可能会加快处理速度:
import torchaudio
waveform, sample_rate = torchaudio.load("audio.wav")
diarization = pipeline({"waveform": waveform, "sample_rate": sample_rate})
监控进度
可以使用钩子来监控流水线的进度:
from pyannote.audio.pipelines.utils.hook import ProgressHook
with ProgressHook() as hook:
diarization = pipeline("audio.wav", hook=hook)
控制说话人数量
如果事先知道说话人的数量,可以使用 num_speakers
选项:
diarization = pipeline("audio.wav", num_speakers=2)
也可以使用 min_speakers
和 max_speakers
选项提供说话人数量的下限和/或上限:
diarization = pipeline("audio.wav", min_speakers=2, max_speakers=5)
📚 详细文档
此流水线已在大量数据集上进行了基准测试。处理过程完全自动化:
- 无需手动进行语音活动检测(文献中有时会这样做)
- 无需手动指定说话人数量(尽管可以向流水线提供此信息)
- 无需对内部模型进行微调,也无需针对每个数据集调整流水线的超参数
... 采用最严格的说话人分割错误率(DER)设置(在本文中称为 "Full"):
基准测试数据集 |
DER% |
FA% |
Miss% |
Conf% |
预期输出 |
文件级评估 |
AISHELL - 4 |
12.2 |
3.8 |
4.4 |
4.0 |
RTTM |
评估 |
AliMeeting (通道 1) |
24.4 |
4.4 |
10.0 |
10.0 |
RTTM |
评估 |
AMI (头戴式麦克风混音, [仅单词)](https://github.com/BUTSpeechFIT/AMI - diarization - setup) |
18.8 |
3.6 |
9.5 |
5.7 |
RTTM |
评估 |
AMI (阵列 1,通道 1, [仅单词)](https://github.com/BUTSpeechFIT/AMI - diarization - setup) |
22.4 |
3.8 |
11.2 |
7.5 |
[RTTM](https://huggingface.co/pyannote/speaker-diarization-3.1/blob/main/reproducible_research/AMI - SDM.SpeakerDiarization.Benchmark.test.rttm) |
[评估](https://huggingface.co/pyannote/speaker-diarization-3.1/blob/main/reproducible_research/AMI - SDM.SpeakerDiarization.Benchmark.test.eval) |
AVA - AVD |
50.0 |
10.8 |
15.7 |
23.4 |
[RTTM](https://huggingface.co/pyannote/speaker-diarization-3.1/blob/main/reproducible_research/AVA - AVD.SpeakerDiarization.Benchmark.test.rttm) |
[评估](https://huggingface.co/pyannote/speaker-diarization-3.1/blob/main/reproducible_research/AVA - AVD.SpeakerDiarization.Benchmark.test.eval) |
DIHARD 3 (完整) |
21.7 |
6.2 |
8.1 |
7.3 |
RTTM |
评估 |
[MSDWild](https://x - lance.github.io/MSDWILD/) |
25.3 |
5.8 |
8.0 |
11.5 |
RTTM |
评估 |
[REPERE (阶段 2)](https://islrn.org/resources/360 - 758 - 359 - 485 - 0/) |
7.8 |
1.8 |
2.6 |
3.5 |
RTTM |
评估 |
VoxConverse (v0.3) |
11.3 |
4.1 |
3.4 |
3.8 |
RTTM |
评估 |
📄 许可证
本项目采用 MIT 许可证。
🔧 技术细节
在使用此开源流水线时,收集的信息将有助于更好地了解 pyannote.audio
的用户群体,并帮助维护者进一步改进它。尽管此流水线采用 MIT 许可证,并且将始终保持开源,但我们偶尔会通过电子邮件向你介绍有关 pyannote
的高级流水线和付费服务。
📚 引用
@inproceedings{Plaquet23,
author={Alexis Plaquet and Hervé Bredin},
title={{Powerset multi-class cross entropy loss for neural speaker diarization}},
year=2023,
booktitle={Proc. INTERSPEECH 2023},
}
@inproceedings{Bredin23,
author={Hervé Bredin},
title={{pyannote.audio 2.1 speaker diarization pipeline: principle, benchmark, and recipe}},
year=2023,
booktitle={Proc. INTERSPEECH 2023},
}