使用OpenAI Whisper进行说话人分类
基于OpenAI Whisper的说话人分类流程 我要感谢@m-bain提供的批量Whisper推理,@mu4farooqi提供的标点符号重新对齐算法
如果您欣赏我对社区的贡献,请在GitHub上为该项目点星(见右上角)!
这是什么
这个仓库将Whisper的ASR能力与语音活动检测(VAD)和说话人嵌入相结合,以识别Whisper生成的转录中每个句子的说话人。首先,从音频中提取人声以提高说话人嵌入的准确性,然后使用Whisper生成转录,然后使用WhisperX校正和对齐时间戳,以帮助最小化由于时间偏移导致的分类错误。然后将音频传入MarbleNet进行VAD和分段以排除静音,然后使用TitaNet提取说话人嵌入以识别每个分段的说话人,然后将结果与WhisperX生成的时间戳关联,以根据时间戳检测每个单词的说话人,然后使用标点模型重新对齐以补偿微小的时间偏移。
WhisperX和NeMo参数已编码到diarize.py和helpers.py中,我稍后会添加CLI参数来更改它们
安装
需要预先安装FFMPEG
和Cython
作为先决条件
pip install cython
或
sudo apt update && sudo apt install cython3
# 在Ubuntu或Debian上
sudo apt update && sudo apt install ffmpeg
# 在Arch Linux上
sudo pacman -S ffmpeg
# 在MacOS上使用Homebrew (https://brew.sh/)
brew install ffmpeg
# 在Windows上使用Chocolatey (https://chocolatey.org/)
choco install ffmpeg
# 在Windows上使用Scoop (https://scoop.sh/)
scoop install ffmpeg
# 在Windows上使用WinGet (https://github.com/microsoft/winget-cli)
winget install ffmpeg
pip install -r requirements.txt
使用方法
python diarize.py -a 音频文件名
如果您的系统有足够的显存(>=10GB),您可以使用diarize_parallel.py
代替,区别在于它与Whisper并行运行NeMo,这在某些情况下可能有益,结果是相同的,因为两个模型是相互独立的。这仍然是实验性的,所以请预料到错误和锐利的边缘。欢迎您的反馈。
命令行选项
-a 音频文件名
:要处理的音频文件名--no-stem
:禁用源分离--whisper-model
:用于ASR的模型,默认为medium.en
--suppress_numerals
:以发音字母而不是数字转录数字,提高对齐准确性--device
:选择使用哪个设备,如果可用则默认为"cuda"--language
:手动选择语言,在语言检测失败时有用--batch-size
:批量推理的批量大小,如果内存不足则减小,设为0表示非批量推理
已知限制
- 尚未解决重叠说话人的问题,一种可能的方法是分离音频文件并仅隔离一个说话人,然后将其输入流程,但这需要更多的计算
- 可能存在一些错误,如果遇到任何问题,请提出问题。
未来改进
- 为SRT实现每句话的最大长度
致谢
特别感谢@adamjonas对这个项目的支持 这项工作基于OpenAI的Whisper、Faster Whisper、Nvidia NeMo和Facebook的Demucs