在开发机上使用 Whisper 和 WhisperX
本教程将指导您如何在开发机上部署和使用 Whisper 和 WhisperX 两个强大的语音处理工具,帮助您实现高质量的音频转录、翻译需求。
OpenAI Whisper 项目介绍
OpenAI Whisper 是一个由 OpenAI 开发的开源自动语音识别 (ASR) 系统,用于执行语音识别和语音翻译功能,并且能够将多种语言的语音转录成文字。
主要特点:
- 多语言语音识别:Whisper 可以处理多种语言的语音转录,不仅仅局限于英语。
- 处理音频质量:即使在音频质量较差或背景噪音较多的情况下,Whisper 也能进行有效的语音识别。
- 开源模型:OpenAI 将 Whisper 的模型和推理代码开源,为开发者和研究人员提供了一个强大的基础,用于构建各种语音处理应用和进行进一步研究。
- 强大的性能:OpenAI 的测试表明,Whisper 在多种语言的音频转录方面表现出色。
OpenAI 提供了 Whisper API 支持转录 (transcriptions) 和 翻译 (translations) 两种模式,也同样基于开源的 large-v2 Whisper model。
衍生项目
在 OpenAI Whisper 推出后,基于 OpenAI 的 Whisper 模型衍生了部分项目,有各自侧重点和特色功能:
- WhisperX:致力于提供比原始 Whisper 更准确的转录结果,可生成词级别的对齐时间戳,用于制作更精细、更同步的字幕,或帮助语言学习者理解发音和语速;识别说话人功能(speaker diarization)可在生成结果中区分不同说话人。
- insanely-fast-whisper:主要目标是大幅提升 Whisper 模型的推理速度,使其能够更快地完成语音转录任务。
- WhisperLive:WhisperLive 专注于实现实时的语音转录功能,可以将正在进行的语音输入流 (例如麦克风输入) 实时地转换为文字。
SSH 远程连接
由于 Whisper 和 WhisperX 需要下载模型文件,下载过程可能需要 10-30 分钟。为避免 Web Terminal 连接超时中断,建议使用 SSH 远程连接。
教程详见:SSH 远程连接
OpenAI Whisper
创建实验环境
点击下方链接,直接访问智算云控制台的创建开发机页面。
进入开发机创建页面后,请根据页面提示,完成开发机的相应配置。由于 Whisper 依赖 Pytorch,在选择镜像时,建议选择已包含 Whisper 依赖的预置镜像,节省安装时间。例如:
ngc:24.05-python3.10-cuda12.4.1-ubuntu22.04
安装 Whisper
OpenAI 的 Whisper 模型是基于 Python 3.9.9 以及 PyTorch 1.10.0 开发的。根据官方说法,在 Python 3.8-3.11 的环境中可以正常运行。建议提前检查当前 Python 版本,确保符合要求:
python3 --version
Whisper 依赖 ffmpeg 进行不同音频格式处理,通过以下命令安装:
sudo apt update && sudo apt install ffmpeg
使用 pip
安装 Whisper:
pip install -U openai-whisper
语音转写
安装结束后开箱即用。以下是一个简单的命令行示例:
whisper path/to/audio.mp3
NOTE
建议克隆 OpenAI Whisper 仓库,使用其中的测试音频文件。 git clone https://github.com/openai/whisper.git
也可以自备音频文件。
Whisper 在默认情况下会使用 turbo
模型进行语音转录。可尝试通过参数 --model
换成最小的 tiny
模型:
whisper path/to/audio.mp3 --model tiny
也可以试试最大的 large-v3
模型
whisper path/to/audio.mp3 --model large-v3
使用 OpenAI Whisper 仓库中的音频文件测试输出效果:
$ whisper ./whisper/tests/jfk.flac --model tiny.en
100%|█████████████████████████████████████| 72.1M/72.1M [00:06<00:00, 12.0MiB/s]
[00:00.000 --> 00:08.000] And so, my fellow Americans ask not what your country can do for you
[00:08.000 --> 00:11.000] ask what you can do for your country.
Whisper 部分模型可以自动识别音频语言。为了提高转录准确性,可以使用参数 --language
指定音频的语言(--language
是提供的音频的语言类型,而非转录后的文字语言类型):
whisper path/to/audio.mp3 --language Chinese
输出字幕文件
Whisper 支持输出文件格式包括:txt
, vtt
, srt
, tsv
, json
, 默认输出格式为全部。您可以使用参数 --output_format
指定输出格式,如:
whisper path/to/audio.mp3 --output_format srt
NOTE
更多参数详见:Whisper arguments
Whisper 模型
关于 OpenAI Whisper 支持的模型,可参考下方或仓库 README。
turbo
:优化模型,支持多种语言,在保持高精度的同时提升推理速度。tiny
:最小型模型,支持多种语言。tiny.en
:最小型模型,英语专用。base
:基础模型,支持多种语言。large-v3
:大型模型,最新版本,支持多种语言。
WhisperX
相较于 Whisper,WhisperX 可以实现更高效的语音转录,同时还提供了更精确的时间戳对齐功能和说话人分离功能。
申请模型授权
WhisperX 的说话人分离功能依赖以下两个模型,必须先前往 HuggingFace 模型页面申请授权。
创建实验环境
点击下方链接,直接访问智算云控制台的创建开发机页面。
进入开发机创建页面后,请根据页面提示,完成开发机的相应配置。在选择镜像时,请使用以下基础镜像:
ubuntu:22.04-20240429
设置环境变量
通过 Hugging Face 模型授权后,可继续执行以下步骤:
访问 https://huggingface.co/settings/tokens ,创建一个具有阅读权限(read)的新令牌并复制令牌。
设置
HF_TOKEN
环境变量,值为上一步复制的 HuggingFace 访问令牌:shellexport HF_TOKEN=your_huggingface_token
可以通过以下命令行进行检查:
shellecho $HF_TOKEN
由于 WhisperX 需要从 HuggingFace 下载模型文件,而国内直接访问可能存在连接不稳定、速度缓慢等问题。建议设置 HF_ENDPOINT
环境变量,将下载请求定向到 HuggingFace 镜像站点。
export HF_ENDPOINT=https://hf-mirror.com
可以通过以下命令行进行检查:
echo $HF_ENDPOINT
安装 WhisperX
官方推荐使用虚拟环境安装 WhisperX,自行安装 Conda 较为复杂,我们可以直接使用智算云平台镜像中内置的 Miniconda,通常位于
/usr/local/
目录下。shell# 添加 conda 到 PATH source /usr/local/miniconda3/etc/profile.d/conda.sh # 初始化 conda,持久化写入 .bashrc conda init
启用后请注意关闭当前 Shell 会话,再新建会话。
由于国内网络问题,可能无法访问 Conda 自带源,或访问速度极慢。因此,建议使用国内镜像源,如清华镜像源。下面示例使用
cat
命令直接追加写入了~/.condarc
,请注意勿重复添加。shell# 添加清华镜像源。 cat << EOF >> ~/.condarc channels: - defaults show_channel_urls: true default_channels: - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2 custom_channels: conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud msys2: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud bioconda: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud menpo: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud pytorch-lts: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud simpleitk: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud deepmodeling: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/ nvidia: https://mirrors.sustech.edu.cn/anaconda-extra/cloud EOF
然后清除相关缓存:
shellconda clean -i conda clean -p conda clean -a
创建虚拟环境
shell# 创建名为 whisperx 的虚拟环境 conda create --name whisperx python=3.10 # 激活虚拟环境 conda activate whisperx
安装 Pytorch 和 WhisperX
shell# 安装 Pytorch 等相关库 conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1 -c pytorch -c nvidia # 安装 WhisperX pip install whisperx
语音转写
以下命令行示例将使用语音转录功能(不包含说话人分离功能),首次执行时将下载两个模型,后续执行时不再需要下载。
whisperx path/to/audio.mp3
命令行中可以指定不同的模型、语言和文件路径等。例如,指定路径和输出 srt
格式文件,可以使用以下命令:
whisperx path/to/audio.mp3 --output_dir /your/path --output_format srt
输出字词级别的时间戳
Whisperx 可以实现字词级的时间戳标记,设置参数 --highlight_words True
即可。
whisperx path/to/audio.mp3 --highlight_words True --output_format json
NOTE
英文音频识别的是单词级别,中文音频识别是汉字级别。
识别说话人
体验 WhisperX 说话人分离功能。首次执行时将下载两个模型,后续执行时不再需要下载。
whisperx path/to/audio.mp3 --diarize
NOTE
更多参数详见:WhisperX arguments
总结
测试发现,在默认条件下 Whisper 与 WhisperX 在转录同一段音频时的表现:
- Whipser 项目安装部署较为简单。
- WhisperX 使用转录和说话人分离耗费的时长和 Whisper 音频转录的时长相当。
- WhisperX 比 Whisper 多了说话人分离、字词级别时间戳功能。