Whisper v3:改进的开源语音识别模型
OpenAI 发布新一代语音转文本模型,性能提升明显,可直接集成到应用中。
OpenAI 发布新一代语音转文本模型,性能提升明显,可直接集成到应用中。
Whisper 是一个通用的语音识别模型。它在大规模多样化音频数据集上训练,也是一个多任务模型,可以执行多语言语音识别、语音翻译和语言识别。
基于 Transformer 的序列到序列模型在各种语音处理任务上训练,包括多语言语音识别、语音翻译、口语语言识别和语音活动检测。这些任务被联合表示为由解码器预测的令牌序列,使单一模型能够替代传统语音处理流程的许多阶段。多任务训练格式使用一组特殊令牌,充当任务指示符或分类目标。
我们使用 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,可从大多数包管理器获得:
# on Ubuntu or Debian
sudo apt update && sudo apt install ffmpeg
# on Arch Linux
sudo pacman -S ffmpeg
# on MacOS using Homebrew (https://brew.sh/)
brew install ffmpeg
# on Windows using Chocolatey (https://chocolatey.org/)
choco install ffmpeg
# on Windows using Scoop (https://scoop.sh/)
scoop install ffmpeg
如果 tiktoken 未为您的平台提供预构建的 wheel,您可能也需要安装 Rust。如果在上述 pip install 命令期间看到安装错误,请按照入门页面安装 Rust 开发环境。此外,您可能需要配置 PATH 环境变量,例如 export PATH="$HOME/.cargo/bin:$PATH"。如果安装失败并显示"No module named 'setuptools_rust'",您需要安装 setuptools_rust,例如通过运行:
pip install setuptools-rust
有六种模型大小,其中四种具有仅英文版本,提供速度和准确性的权衡。以下是可用模型的名称及其近似内存要求和相对于大模型的推理速度。下面的相对速度是通过在 A100 上转录英语演讲来测量的,实际速度可能因许多因素而显著不同,包括语言、说话速度和可用硬件。
.en 模型对于仅英文应用往往表现更好,尤其是对于 tiny.en 和 base.en 模型。我们观察到对于 small.en 和 medium.en 模型,差异变得不那么显著。此外,turbo 模型是 large-v3 的优化版本,提供更快的转录速度,精度退化最小。
Whisper 的性能根据语言的不同而变化很大。下图显示了 large-v3 和 large-v2 模型的语言性能分解,使用 WERs(词错误率)或 CER(字符错误率,以斜体显示)在 Common Voice 15 和 Fleurs 数据集上评估。对应于其他模型和数据集的其他 WER/CER 指标可以在论文的附录 D.1、D.2 和 D.4 中找到,以及附录 D.3 中的翻译的 BLEU(双语评估替代品)分数。
以下命令将使用 turbo 模型转录音频文件中的语音:
whisper audio.flac audio.mp3 audio.wav --model turbo
默认设置(选择 turbo 模型)适用于转录英语。但是,turbo 模型未针对翻译任务进行训练。如果您需要将非英语演讲翻译成英语,请使用多语言模型(tiny、base、small、medium、large)之一,而不是 turbo。
例如,要转录包含非英语演讲的音频文件,您可以指定语言:
whisper japanese.wav --language Japanese
要将语音翻译成英语,请使用:
whisper japanese.wav --model medium --language Japanese --task translate
注意:即使指定了 --task translate,turbo 模型也会返回原始语言。使用 medium 或 large 获得最佳翻译结果。
运行以下命令查看所有可用选项:
whisper --help
有关所有可用语言的列表,请参阅 tokenizer.py。
也可以在 Python 中执行转录:
import whisper
model = whisper.load_model("turbo")
result = model.transcribe("audio.mp3")
print(result["text"])
在内部,transcribe() 方法读取整个文件,并使用滑动的 30 秒窗口处理音频,对每个窗口执行自回归序列到序列预测。
以下是 whisper.detect_language() 和 whisper.decode() 的使用示例,它们提供了对模型的较低级别的访问。
import whisper
model = whisper.load_model("turbo")
# load audio and pad/trim it to fit 30 seconds
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)
# make log-Mel spectrogram and move to the same device as the model
mel = whisper.log_mel_spectrogram(audio, n_mels=model.dims.n_mels).to(model.device)
# detect the spoken language
_, probs = model.detect_language(mel)
print(f"Detected language: {max(probs, key=probs.get)}")
# decode the audio
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)
# print the recognized text
print(result.text)
请在讨论中使用 🙌 Show and tell 类别分享 Whisper 的更多示例用法和第三方扩展,例如 Web 演示、与其他工具的集成、不同平台的端口等。
Whisper 的代码和模型权重在 MIT 许可证下发布。有关更多详情,请参阅 LICENSE。