掘金 人工智能 05月04日 23:58
WhisperX:实时语音转录与多说话人识别解决方案
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

WhisperX是一款基于OpenAI Whisper模型的快速语音转录解决方案,专注于提升转录速度、逐词时间戳精度和说话人识别能力。它通过结合音素级ASR、强制对齐、语音活动检测(VAD)和说话人日志等技术,实现了70倍实时转录速度,并支持多说话人识别。文章详细介绍了WhisperX的特性、安装方法、使用方法以及技术细节,并提供了Python代码示例。此外,文章还强调了WhisperX在Ego4d转录挑战赛中取得的成绩,以及在INTERSPEECH 2023会议上的收录,展示了其在语音转录领域的领先地位。

🔈WhisperX的核心优势在于其卓越的转录速度。它基于faster-whisper后端和whisper large-v2模型,实现了高达70倍的实时转录速度,极大地提高了处理长音频文件时的效率。

⏱️WhisperX提供了精准的逐词时间戳功能。通过wav2vec2对齐技术,WhisperX能够为每个单词生成精确的时间戳,这对于字幕制作、语音分析等应用场景至关重要。

🗣️WhisperX具备多说话人识别能力。它利用pyannote-audio的说话人日志功能,可以区分音频中的不同说话人,并为每个说话人分配ID标签,这在会议记录、访谈等场景中非常实用。

⚙️WhisperX提供了简便的安装和使用方法。用户可以通过PyPi或GitHub进行安装,并提供命令行和Python两种使用方式,方便不同技术背景的用户快速上手。

💡WhisperX针对不同语言进行了优化。对于已测试的语言,WhisperX会自动选择合适的音素级ASR模型,用户只需指定语言代码即可进行转录,增加了易用性。

WhisperX:实时语音转录与多说话人识别解决方案

原文链接:GitHub - whisperX/README.md
作者:Max Bain
译者:倔强青铜三

前言

大家好,我是倔强青铜三。是一名热情的软件工程师,我热衷于分享和传播IT技术,致力于通过我的知识和技能推动技术交流与创新,欢迎关注我,微信公众号:倔强青铜三。欢迎点赞、收藏、关注,一键三连!!!

WhisperX:加速语音转录与精准说话人识别

WhisperX是一个快速自动语音识别(ASR)解决方案,支持70倍实时转录(使用large-v2模型),提供逐词时间戳和说话人日志功能。以下是其主要特性:

OpenAI开发的Whisper模型虽然转录准确度高,但其时间戳仅在话语级别,而非逐词级别,且可能存在数秒误差。此外,原生Whisper不支持批量处理。WhisperX通过集成以下技术解决了这些问题:

新特性🚨

安装⚙️

1. 简单安装(推荐)

通过PyPi安装WhisperX最简便:

pip install whisperx

或者使用uvx:

uvx install whisperx

2. 高级安装选项

这些安装方法适用于开发者或有特定需求的用户。若不确定,建议使用上述简单安装。

选项A:从GitHub安装

直接从GitHub仓库安装:

uvx git+https://github.com/m-bain/whisperX.git
选项B:开发者安装

若需修改代码或贡献项目:

git clone https://github.com/m-bain/whisperX.gitcd whisperXuv sync --all-extras --dev

注意:开发版本可能包含实验性功能和漏洞。生产环境请使用稳定的PyPI版本。

您可能还需要安装ffmpeg、rust等。请遵循OpenAI的安装指南:github.com/openai/whis…

说话人日志功能

启用说话人日志需包含您的Hugging Face访问令牌(读取权限),您可从此处生成,并接受以下模型的用户协议:分割模型和Speaker-Diarization-3.1(若使用Speaker-Diarization 2.x,请参考此处要求)。

注意:截至2023年10月11日,pyannote/Speaker-Diarization-3.0在WhisperX中存在性能缓慢问题。这是由于faster-whisper与pyannote-audio 3.0.0之间的依赖冲突。详情及解决方法请参见此问题

使用方法💬(命令行)

英语

在示例片段上运行whisper(使用默认参数,whisper small模型),添加--highlight_words True可在.srt文件中可视化逐词时间。

whisperx path/to/audio.wav

使用WhisperX与wav2vec2.0 large模型强制对齐的结果:

样本视频1

与原始whisper模型相比,许多转录音频不同步:

原始whisper样本

如需提高时间戳精度(以增加GPU内存为代价),可使用更大模型(更大对齐模型未发现明显优势,详见论文),例如:

whisperx path/to/audio.wav --model large-v2 --align_model WAV2VEC2_ASR_LARGE_LV60K_960H --batch_size 4

为转录添加说话人ID标签(如已知说话人数,可设置--min_speakers 2--max_speakers 2):

whisperx path/to/audio.wav --model large-v2 --diarize --highlight_words True

在CPU而非GPU上运行(适用于Mac OS X):

whisperx path/to/audio.wav --compute_type int8

其他语言

音素ASR对齐模型具有语言特异性,对于已测试语言,这些模型将自动从torchaudio管道或huggingface中选择。只需传入--language代码,并使用whisper --model large

目前通过torchaudio管道为{en, fr, de, es, it}提供默认模型,其他语言可通过Hugging Face获取。如检测语言不在列表中,您需要在huggingface模型中心查找音素级ASR模型并在数据上进行测试。请查看alignment.py中的DEFAULT_ALIGN_MODELS_HF以获取当前支持语言列表。

示例:德语
whisperx --model large-v2 --language de path/to/audio.wav

德语样本

更多语言示例请参见此处

Python使用方法🐍

import whisperximport gcdevice = "cuda"audio_file = "audio.mp3"batch_size = 16  # 如GPU内存不足可减小此值compute_type = "float16"  # 如GPU内存不足可改为"int8"(可能降低精度)# 1. 使用原始whisper进行批量转录model = whisperx.load_model("large-v2", device, compute_type=compute_type)# 可选择将模型保存至本地路径(可选)# 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"])  # 对齐前的片段# 如GPU资源紧张,可删除模型# import gc; gc.collect(); torch.cuda.empty_cache(); del model# 2. 对齐whisper输出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"])  # 对齐后的片段# 如GPU资源紧张,可删除模型# import gc; gc.collect(); torch.cuda.empty_cache(); del model_a# 3. 分配说话人标签diarize_model = whisperx.DiarizationPipeline(use_auth_token=YOUR_HF_TOKEN, device=device)# 如已知最小/最大说话人数,可添加参数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"])  # 片段现已分配说话人ID

演示🚀

如无自有GPU,可通过上述链接尝试WhisperX。

技术细节👷‍♂️

有关批量处理和对齐的具体细节、VAD的影响以及所选对齐模型,请参阅预印本论文。

为降低GPU内存需求,可尝试以下方法(2和3可能影响质量):

    减小批量大小,例如--batch_size 4使用更小的ASR模型--model base使用更轻量的计算类型--compute_type int8

与OpenAI Whisper转录的差异:

    无时间戳转录。为启用单次传递批量处理,whisper推理设置为--without_timestamps True,确保批次中每个样本仅进行一次前向传递。但这可能导致与默认whisper输出的差异。基于VAD的片段转录,与OpenAI的缓冲转录不同。WhisperX论文表明这可降低WER并实现准确的批量推理。默认设置--condition_on_prev_textFalse(减少幻觉现象)

限制⚠️

贡献🧑‍🏫

如果您精通多种语言,为本项目做出重大贡献的方式之一是在huggingface上查找音素模型(或自行训练)并在目标语言的语音上进行测试。如结果良好,请发送拉取请求并附上成功示例。

同样,发现漏洞和提交拉取请求对于维持项目运转至关重要,因为它已超出原始研究范围。

待办事项🗓

联系/支持📝

如有疑问,请联系maxhbain@gmail.com

致谢🙏

我的博士研究和此项工作得到VGG(视觉几何组)和牛津大学的支持。

当然,这建立在OpenAI的whisper基础之上。
借鉴了PyTorch强制对齐教程的重要代码。
使用了出色的pyannote VAD/日志工具 github.com/pyannote/py…

来自以下来源的宝贵VAD和日志模型:

出色的faster-whisper和CTranslate2后端。

感谢为本项目提供财务支持的各位🙏

最后,感谢本项目的开源贡献者,他们维持项目运转并识别漏洞。

引用

如在研究中使用本项目,请引用以下论文:

@article{bain2022whisperx,  title={WhisperX: Time-Accurate Speech Transcription of Long-Form Audio},  author={Bain, Max and Huh, Jaesung and Han, Tengda and Zisserman, Andrew},  journal={INTERSPEECH 2023},  year={2023}}

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

WhisperX 语音转录 ASR 人工智能 Whisper
相关文章