WhisperX 含说话人分离
在 Clore.ai GPU 上运行 WhisperX 以实现快速语音转录并提供逐词时间戳与说话人分离。
WhisperX 在 OpenAI 的 Whisper 基础上进行了三项关键升级: 词级时间戳 通过强制音素对齐, 说话人分离(说话人鉴别) 使用 pyannote.audio,且 最高达 70× 实时速度 通过使用 faster-whisper 的批量推理实现。它是需要精确时序和说话人识别的生产转录管道的首选工具。
GitHub: m-bain/whisperX PyPI: whisperx 许可: BSD-4-Clause 论文: arxiv.org/abs/2303.00747
主要特性
词级时间戳 — 通过 wav2vec2 强制对齐实现 ±50 毫秒精度(相比原生 Whisper 的 ±500 毫秒)
说话人分离(说话人鉴别) — 通过 pyannote.audio 3.1 识别谁说了什么
批量推理 — 在 RTX 4090 上最高达 70× 实时速度
VAD 预过滤 — Silero VAD 在转录前去除静音段
支持所有 Whisper 模型 — 从 tiny 到 large-v3-turbo
多种输出格式 — JSON、SRT、VTT、TXT、TSV
自动语言检测 — 或强制指定某种语言以加快处理速度
要求
GPU
RTX 3060 12 GB
RTX 4090 24 GB
显存
4 GB(小模型)
10 GB+(large-v3-turbo)
内存
8 GB
16 GB+
磁盘
5 GB
20 GB(模型缓存)
Python
3.9+
3.11
CUDA
11.8+
12.1+
需要 HuggingFace 令牌 用于说话人分离 — 在 pyannote/speaker-diarization-3.1.
Clore.ai 建议: RTX 3090(($0.30–1.00/天)针对 batch size 16 的 large-v3-turbo 模型。RTX 4090(($0.50–2.00/天)针对 batch size 32 的最大吞吐量。
安装
如果遇到 CUDA 版本冲突:
快速开始
使用示例
带说话人分离的转录
命令行用法
SRT 生成脚本
性能基准
原生 Whisper
large-v3
~60 分钟
速度
1×
faster-whisper
large-v3
约 5 分钟
速度
~12×
WhisperX
large-v3-turbo
~1 分钟
速度
~60×
WhisperX
large-v3-turbo
~50 秒
512x512
~70×
4
~30× 实时
6 GB
8
~45× 实时
8 GB
16
~60× 实时
10 GB
32
~70× 实时
14 GB
给 Clore.ai 用户的提示
在步骤之间释放显存 — 删除模型并调用
torch.cuda.empty_cache()在转录、对齐和说话人分离之间HuggingFace 令牌 — 在说话人分离生效前,你必须接受 pyannote 模型的许可证;设置
HF_TOKEN作为环境变量批量大小调优 — 从以下值开始
batch_size=16,在 12 GB 显存卡上减到 4–8,在 24 GB 显存卡上增到 32int8计算 — 使用compute_type="int8"以在质量损失最小的情况下将显存使用量减半Docker 镜像 —
pytorch/pytorch:2.5.1-cuda12.4-cudnn9-runtime持久化模型缓存 — 挂载
/root/.cache/huggingface以避免在每次容器重启时重新下载模型
# 使用固定种子以获得一致结果
CUDA 内存不足(out of memory)
减少 batch_size,使用 compute_type="int8",或使用更小的模型(medium、small)
说话人分离返回 UNKNOWN
确保 HuggingFace 令牌有效并且你已接受 pyannote 的许可证
没有名为 'whisperx' 的模块
pip install whisperx — 确保没有拼写错误(它不是 whisperx,而不是 whisper-x)
词级时间戳不准确
检查是否 whisperx.align() 在 transcribe() 之后被调用
— 原生 Whisper 的输出缺乏词级精度
语言检测错误 使用强制语言参数 或 language="en" --language en
处理缓慢
增加 batch_size,使用 large-v3-turbo 而不是 large-v3在 Python API 中,确保 GPU 未被共享
最后更新于
这有帮助吗?