🚀 🎹 说话人分割 3.1
本管道与 pyannote/speaker-diarization-3.0
相同,只是它移除了对 onnxruntime
的 有问题的 使用。说话人分割和嵌入现在都完全在 PyTorch 中运行,这应该会简化部署并可能加快推理速度。它需要 pyannote.audio 版本 3.1 或更高版本。
该管道接收采样率为 16kHz 的单声道音频,并将说话人分割结果作为一个 Annotation
实例输出:
- 立体声或多声道音频文件会通过对各声道求平均值自动下混为单声道。
- 采样率不同的音频文件在加载时会自动重采样为 16kHz。
使用此开源模型进行生产?考虑切换到 pyannoteAI 以获得更好、更快的选择。
🚀 快速开始
要求
- 使用
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"))
从内存中处理
将音频文件预加载到内存中可能会加快处理速度:
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”):
📄 引用
@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},
}