文章目录
一、关于 WhisperX 新闻 🚨 二、设置⚙️ 1、创建Python3.10环境 2、安装PyTorch,例如Linux和Windows CUDA11.8: 3、安装此repo 4、Speaker Diarization 三、使用💬(命令行) 1、English 2、他语言 例如德语 四、Python使用🐍 五、Demos 🚀 六、技术细节👷♂️ 七、限制⚠️一、关于 WhisperX
WhisperX:具有字级时间戳的自动语音识别(和分类)
github : https://github.com/m-bain/whisperX 联系支持:maxhbain@gmail.com该存储库提供快速语音识别(70倍实时与big-v2)与字级时间戳和说话人分类。
⚡批量推断70x实时转录使用耳语大v2 🪶更快的耳语后端,需要<8GB的gpu内存用于beam_size=5的big-v2 🎯使用wave 2vec2对齐准确的字级时间戳 👯♂️多扬声器ASR使用来自pyannote音频的扬声器分类(扬声器ID标签) 🗣️VAD预处理,减少幻觉和批处理,没有WER降解Whisper 是一个ASR模型由OpenAI开发,在各种音频的大型数据集上进行训练。虽然它确实产生了高度准确的转录,但相应的时间戳是在话语级别,而不是每个单词,并且可能不准确几秒钟。OpenAI的耳语本身不支持批处理。
Phoneme-Based ASR(基于音素的ASR) 一套经过微调的模型,用于识别区分单词的最小语音单位,例如“tap”中的元素p。一个流行的示例模型是wav2vec2.0.
Forced Alignment(强制对齐) 是指将正交转录与录音对齐以自动生成手机级分割的过程。
语音活动检测(VAD) 是检测是否存在人类语音。
Speaker Diarization 是根据每个说话者的身份将包含人类语音的音频流划分为同质段的过程。
新闻 🚨
第一名在Ego4d转录挑战🏆 WhisperX在INTERSPEECH 2023上被接受 V3成绩单segment-per-sentence:使用nltksent_tokenize更好的字幕和更好的分词 V3发布,70倍加速开源。使用批量耳语和更快的耳语后端! v2发布,代码清理,导入耳语库VAD过滤现在默认打开,如论文所示。 🎓👨🏫!请参阅我们的ArxiV预印本,了解WhisperX的基准测试和详细信息。我们还引入了更高效的批处理推理,从而产生*60-70x实时速度的big-v2。二、设置⚙️
已针对PyTorch 2.0、Python 3.10进行测试(使用其他版本需自行承担风险!)
GPU执行需要在系统上安装NVIDIA库cuBLAS 11.x和cuDNN 8.x。请参阅 CTranslate2 documentation.
1、创建Python3.10环境
conda create --name whisperx python=3.10
conda activate whisperx
2、安装PyTorch,例如Linux和Windows CUDA11.8:
conda install pytorch==2.0.0 torchaudio==2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia
其他方法可见 这里。
3、安装此repo
pip install git+https://github.com/m-bain/whisperx.git
如果已安装,请将包更新为最近提交
pip install git+https://github.com/m-bain/whisperx.git --upgrade
如果希望修改此软件包,请以可编辑模式克隆并安装:
$ git clone https://github.com/m-bain/whisperX.git
$ cd whisperX
$ pip install -e .
您可能还需要安装ffmpeg、rust等。请在此处按照openAI说明进行操作 https://github.com/openai/whisper#setup
4、Speaker Diarization
要启用 Speaker Diarization,请包含您可以从此处 生成的拥 Hugging Face token(read)在-hf_token
参数之后,接受以下模型的用户协议:Segmentation和 Speaker-Diarization-3.1(如果您选择使用Speaker Diarization 2.x,请按照要求此处 操作替代)
注:截至2023年10月11日,在WhatperX中存在一个关于pyannote/Speaker-Diarization-3.0性能缓慢的已知问题。这是由于更快的耳语和pyannote音频3.0.0之间的依赖冲突。有关更多详细信息和潜在的解决方法,请参阅此问题。
三、使用💬(命令行)
1、English
在示例段上运行耳语(使用默认参数,耳语小)添加 --highlight_words
True 来可视化.srt
文件中的单词计时。
--highlight_words True
whisperx examples/sample01.wav
使用WhisperX强制对齐到wav2vec2.0大的结果:
sample01.mp4
将此与许多转录不同步的原始耳语进行比较:
sample_whisper_og.mov
为了提高时间戳的准确性,以更高的gpu mem为代价,使用更大的模型(更大的对齐模型没有那么有用,见论文)例如。
whisperx examples/sample01.wav --model large-v2 --align_model WAV2VEC2_ASR_LARGE_LV60K_960H --batch_size 4
要用说话者ID标记成绩单(如果已知,请设置说话者数量,例如-min_speakers 2
, --max_speakers-2
):
whisperx examples/sample01.wav --model large-v2 --diarize --highlight_words True
要在CPU而不是GPU上运行(以及在Mac OS X上运行):
whisperx examples/sample01.wav --compute_type int8
2、他语言
特定语言的自动挑选从torchaudio管道或huggingface--language``--model large
{en, fr, de, es, it, ja, zh, nl, uk, pt}
拥抱脸模型集线器
例如德语
whisperx --model large-v2 --language de examples/sample_de_01.wav
sample_de_01_vis.mov
More EXAMPLES
四、Python使用🐍
import whisperx
import gc
device = "cuda"
audio_file = "audio.mp3"
batch_size = 16 # reduce if low on GPU mem
compute_type = "float16" # change to "int8" if low on GPU mem (may reduce accuracy)
# 1. Transcribe with original whisper (batched)
model = whisperx.load_model("large-v2", device, compute_type=compute_type)
# save model to local path (optional)
# model_dir = "/path/"
# model = whisperx.load_model("large-v2", device, compute_type=compute_type, download_root=model_dir)
audio = whisperx.load_audio(audio_file)
result = model.transcribe(audio, batch_size=batch_size)
print(result["segments"]) # before alignment
# delete model if low on GPU resources
# import gc; gc.collect(); torch.cuda.empty_cache(); del model
# 2. Align whisper output
model_a, metadata = whisperx.load_align_model(language_code=result["language"], device=device)
result = whisperx.align(result["segments"], model_a, metadata, audio, device, return_char_alignments=False)
print(result["segments"]) # after alignment
# delete model if low on GPU resources
# import gc; gc.collect(); torch.cuda.empty_cache(); del model_a
# 3. Assign speaker labels
diarize_model = whisperx.DiarizationPipeline(use_auth_token=YOUR_HF_TOKEN, device=device)
# add min/max number of speakers if known
diarize_segments = diarize_model(audio)
# diarize_model(audio, min_speakers=min_speakers, max_speakers=max_speakers)
result = whisperx.assign_word_speakers(diarize_segments, result)
print(diarize_segments)
print(result["segments"]) # segments are now assigned speaker IDs
五、Demos 🚀
https://replicate.com/victor-upmeet/whisperx
https://replicate.com/daanelson/whisperx
https://replicate.com/carnifexer/whisperx
如果您无法访问自己的GPU,请使用上面的链接试用WhisperX。
六、技术细节👷♂️
有关批处理和对齐、VAD的效果以及所选对齐模型的具体详细信息,请参阅预印本 paper.
要减少GPU内存需求,请尝试以下任何一项(2.&3.会影响质量):
减少批量大小,例如--batch_size 4
使用较小的ASR模型--model base
使用更轻的计算类型--compute_type int8
与openai耳语的转录差异:
没有时间戳的转录。要启用单程批处理,执行耳语推理--without_timestamps True
,这确保了批处理中每个样本1次正向传递。但是,这可能会导致默认耳语输出的差异。
基于VAD的片段转录,不同于openai的缓冲转录。在Wthe WhisperX论文中,我们展示了这可以降低WER,并实现准确的批量推断
--condition_on_prev_text
默认设置为False
(减少幻觉)
七、限制⚠️
对齐模型字典中不包含字符的抄本单词,例如“2014”或“13.6英镑”无法对齐,因此没有给出时间。 耳语或耳语不能很好地处理重叠的语言 分类远非完美 需要语言特定的wave 2vec2模型2024-07-21(日)
总结
### 文章总结:WhisperX - 自动语音识别与分类**一、关于 WhisperX**
WhisperX 是一个强大的自动语音识别和分类工具,提供字级时间戳和说话人分类功能,支持高达70倍实时的批量转录。基于OpenAI的Whisper模型,但优化了时间戳和批处理功能。目前已在Ego4d转录挑战中排名第一,并受到学术界关注。
**二、环境设置**
1. **创建Python3.10环境**:推荐使用conda创建名为whisperx的Python3.10环境。
2. **安装PyTorch与CUDA**:确保安装与CUDA 11.8兼容的PyTorch 2.0版本。
3. **安装whisperX库**:通过pip从Github安装whisperX库,如需修改源代码可克隆仓库后本地安装。
4. **设置Speaker Diarization**(可选):需要 Hugging Face token 来启用说话人分类功能。
**三、命令行使用**
- **English及其他语言**:支持多种语言选项(如英语、德语等),通过`--language`参数切换,并结合`--model`选择适合的大模型进行转录和对齐。
- **Speaker Diarization**:使用`--diarize`选项在转录结果中添加说话人ID。
- **CPU运行**:通过`--compute_type int8`参数降低资源消耗,在CPU上运行。
**四、Python API使用**
允许通过Python脚本灵活使用whisperX:
- 加载模型并转录音频。
- 使用对齐模型增强转录的时间准确性。
- 可选的说话人分类功能,为转录结果分配不同的说话人ID标签。
**五、Demos及资源**
提供了多个在线Demo,方便没有GPU资源的用户尝试whisperX。
**六、技术细节**
- **批处理与对齐**:批量处理技术大幅提升转录速度,而字级对齐模型则确保时间戳的精准度。
- **特殊功能**:如基于VAD的预处理减少错误率,以及减少GPU内存需求的策略。
**七、限制及注意事项**
- 某些特殊字符(如数字、货币符号)的单词可能无法对齐。
- 在处理重叠语音时效果欠佳,分类并非完全准确,且依赖特定语言的wave2vec2模型。
总之,WhisperX是一个功能强大且灵活的语音识别和分类工具,适合对时间戳和说话人分类有高要求的用户。它通过优化和扩展OpenAI的Whisper模型,提供了更高效和精确的语音处理功能。