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 没有为您的平台提供预构建的轮子。如果您在执行上述命令时看到安装错误,请按照 入门 页面安装 Rust 开发环境。此外,您可能需要配置环境变量,例如 .如果安装失败并显示 ,则需要安装 ,例如通过运行:pip install
PATH
export PATH="$HOME/.cargo/bin:$PATH"
No module named 'setuptools_rust'
setuptools_rust
pip install setuptools-rust
可用的模型和语言
有六种型号尺寸,其中四种为仅英文版本,提供速度和精度的权衡。 以下是可用模型的名称及其相对于大型模型的近似内存需求和推理速度。 以下相对速度是通过在 A100 上转录英语语音来测量的,实际速度可能会因许多因素(包括语言、语速和可用硬件)而有很大差异。
大小 | 参数 | 纯英文模型 | 多语言模型 | 必需的 VRAM | 相对速度 |
---|---|---|---|---|---|
小 | 39 M | tiny.en |
tiny |
~1 GB | ~10 倍 |
基础 | 74 M | base.en |
base |
~1 GB | ~7 倍 |
小 | 244 M | small.en |
small |
~2 GB | ~4 倍 |
中等 | 769 M | medium.en |
medium |
~5 吉字节 | ~2 倍 |
大 | 1550 M | 不适用 | large |
~10 GB | 1 倍 |
汽 | 809 M | 不适用 | turbo |
~6 GB | ~8 倍 |
纯英语应用程序的模型往往性能更好,尤其是 和 模型。我们观察到 和 模型的差异变得不那么显著。 此外,该模型是其优化版本,可提供更快的转录速度,同时将准确性的下降降至最低。.en
tiny.en
base.en
small.en
medium.en
turbo
large-v3
Whisper 的性能因语言而异。下图显示了在 Common Voice 15 和 Fleurs 数据集上评估的 WER(单词错误率)或 CER(字符错误率,以斜体显示)按语言划分的性能细分。与其他模型和数据集对应的其他 WER/CER 指标可在论文的附录 D.1、D.2 和 D.4 中找到,以及附录 D.3 中用于翻译的 BLEU(双语评估研究)分数。large-v3
large-v2
命令行用法
以下命令将使用模型转录音频文件中的语音: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 用法
转录也可以在 Python 中执行:
import whisper
model = whisper.load_model("turbo")
result = model.transcribe("audio.mp3")
print(result["text"])
在内部,该方法读取整个文件并使用 30 秒的滑动窗口处理音频,在每个窗口上执行自回归序列到序列预测。transcribe()
下面是 和 的示例用法,它提供对模型的较低级别访问。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 。