🚀 🎹 說話人分割 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},
}