在数字化时代,语音识别技术越来越受到重视。开放AI的Whisper模型是一种通用语音识别模型,它经过大规模的多样化音频数据训练,不仅可以执行多语言语音识别,还能进行语音翻译和语言识别等多项任务。
探索Whisper的技术
Whisper采用了Transformer序列到序列模型,它经过多项语音处理任务的训练,包括多语言语音识别、语音翻译、口语语言识别和语音活动检测。这些任务被联合表示为要由解码器预测的令牌序列,使得单一模型可以替代传统语音处理流程中的许多阶段。多任务训练格式使用一组特殊的令牌,这些令牌充当任务指示符或分类目标。
设置与使用
Whisper的训练和测试使用Python 3.9.9和PyTorch 1.10.1完成,但代码库预计与Python 3.8-3.11和较新的PyTorch版本兼容。代码库还依赖于一些Python包,最重要的是OpenAI的tiktoken,用于其快速的分词器实现。你可以使用以下命令下载和安装(或更新)Whisper的最新版本:
pip install -U openai-whisper
或者,以下命令将获取并安装此存储库的最新提交,以及其Python依赖项:
pip install git+https://github.com/openai/whisper.git
要将包更新到此存储库的最新版本,请运行:
pip install --upgrade --no-deps --force-reinstall git+https://github.com/openai/whisper.git
此外,你需要安装命令行工具ffmpeg
,这在大多数包管理器中都可以找到。
# 在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
如果需要,你还需要安装rust
,以便在tiktoken未为你的平台提供预构建的安装包时使用。如果在上述pip install
命令期间看到安装错误,请按照Getting started页面的指导安装Rust开发环境。此外,你可能需要配置PATH
环境变量,例如export PATH="$HOME/.cargo/bin:$PATH"
。如果安装失败并出现No module named 'setuptools_rust'
的错误,你需要安装setuptools_rust
,例如通过运行:
pip install setuptools-rust
可用模型和语言
Whisper提供五种模型大小,其中四种具有仅英语版本,提供速度和准确性的权衡。以下是可用模型的名称、近似内存需求和相对速度。
大小 | 参数数量 | 仅英语模型 | 多语言模型 | 需要VRAM | 相对速度 |
---|---|---|---|---|---|
微小 | 39 M | tiny.en |
tiny |
~1 GB | ~32x |
基础 | 74 M | base.en |
base |
~1 GB | ~16x |
小型 | 244 M | small.en |
small |
~2 GB | ~6x |
中型 | 769 M | medium.en |
medium |
~5 GB | ~2x |
大型 | 1550 M | N/A | large |
~10 GB | 1x |
对于仅用于英语应用的.en
模型,特别是对于tiny.en
和base.en
模型,性能更好。我们观察到,对于small.en
和medium.en
模型,差异变得不那么显著。
Whisper的性能因语言而异。下图显示了Fleurs数据集在large-v2
模型下的语言单词错误率(WER)分布(数字越小,性能越好)。有关其他模型和数据集对应的WER分数,可以在附录D.1、D.2和D.4中找到。此外,更多的BLEU(双语评估助手)分数可以在附录D.3中找到。这些都可以在论文中找到。
命令行使用
以下命令将转录音频文件的语音,使用medium
模型:
whisper audio.flac audio.mp3 audio.wav --model medium
默认设置(选择small
模型)在英语转录方面表现良好。如果要转录包含非英语语音的音频文件,可以使用--language
选项指定语言:
whisper japanese.wav --
language Japanese
添加--task translate
将把语音翻译成英语:
whisper japanese.wav --language Japanese --task translate
运行以下命令查看所有可用选项:
whisper --help
请查看tokenzier.py以获取所有可用语言的列表。
Python使用
在Python中也可以进行转录:
import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])
在内部,transcribe()
方法会读取整个文件并使用30秒滑动窗口处理音频,对每个窗口执行自回归序列到序列的预测。
以下是whisper.detect_language()
和whisper.decode()
的示例用法,它们提供更低级别的访问模型的方法。
import whisper
model = whisper.load_model("base")
# 加载音频并填充/修整以适应30秒
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)
# 制作对数梅尔频谱图并将其移到与模型相同的设备上
mel = whisper.log_mel_spectrogram(audio).to(model.device)
# 检测口音
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")
# 解码音频
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)
# 打印识别文本
print(result.text)
更多示例
请使用? Show and tell类别在讨论中分享更多Whisper的示例用法和第三方扩展,例如网络演示、与其他工具的集成、不同平台的端口等。
许可协议
Whisper的代码和模型权重在MIT许可下发布。详细信息请参阅LICENSE。
关键词: