[博客] [论文] [模型卡] [Colab 示例]
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
您可能还需要安装rust
,以防 tiktoken 没有为您的平台提供预构建的轮子。如果您在上面的pip install
命令中看到安装错误,请按照入门页面安装 Rust 开发环境。此外,您可能需要配置PATH
环境变量,例如export PATH="$HOME/.cargo/bin:$PATH"
。如果安装失败并显示No module named 'setuptools_rust'
,则需要安装setuptools_rust
,例如通过运行:
pip install setuptools-rust
有六种模型尺寸,其中四种只有英文版本,提供速度和准确性的权衡。以下是可用模型的名称以及它们相对于大型模型的近似内存要求和推理速度。下面的相对速度是通过在 A100 上转录英语语音来测量的,实际速度可能会因语言、说话速度和可用硬件等许多因素而有很大差异。
尺寸 | 参数 | 纯英文型号 | 多语言模型 | 所需显存 | 相对速度 |
---|---|---|---|---|---|
微小的 | 39米 | tiny.en | tiny | 〜1 GB | 〜10倍 |
根据 | 74米 | base.en | base | 〜1 GB | 〜7x |
小的 | 244米 | small.en | small | 〜2GB | 〜4x |
中等的 | 769米 | medium.en | medium | 〜5 GB | 〜2x |
大的 | 1550米 | 不适用 | large | 〜10GB | 1x |
涡轮 | 809米 | 不适用 | turbo | 〜6GB | 〜8x |
仅英语应用程序的.en
模型往往表现更好,尤其是tiny.en
和base.en
模型。我们观察到,对于small.en
和medium.en
模型,差异变得不那么显着。此外, turbo
模型是large-v3
的优化版本,可提供更快的转录速度,同时将准确性降低最小化。
Whisper 的性能因语言而异。下图显示了large-v3
和large-v2
模型按语言的性能细分,使用在 Common Voice 15 和 Fleurs 数据集上评估的 WER(单词错误率)或 CER(字符错误率,以斜体显示)。与其他模型和数据集相对应的其他 WER/CER 指标可以在本文的附录 D.1、D.2 和 D.4 中找到,以及附录 D 中的 BLEU(双语评估研究)翻译分数。 3.
以下命令将使用turbo
模型转录音频文件中的语音:
whisper audio.flac audio.mp3 audio.wav --model turbo
默认设置(选择turbo
模型)非常适合转录英语。要转录包含非英语语音的音频文件,您可以使用--language
选项指定语言:
whisper japanese.wav --language Japanese
添加--task translate
会将演讲翻译成英语:
whisper japanese.wav --language Japanese --task translate
运行以下命令查看所有可用选项:
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 ). 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 )
请使用?讨论中的“展示和讲述”类别,用于分享 Whisper 和第三方扩展的更多示例用法,例如 Web 演示、与其他工具的集成、不同平台的端口等。
Whisper 的代码和模型权重是根据 MIT 许可证发布的。有关更多详细信息,请参阅许可证。