OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  Whisper — OpenAI 语音识别模型

Whisper — OpenAI 语音识别模型

 
  titan ·  2025-11-24 20:13:03 · 22 次点击  · 0 条评论  

Whisper

[博客]
[论文]
[模型卡片]
[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,大多数包管理器都提供此工具:

# 在 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 没有为您的平台提供预构建的 wheel。如果您在上述 pip install 命令期间看到安装错误,请按照 入门页面 的说明安装 Rust 开发环境。此外,您可能需要配置 PATH 环境变量,例如 export PATH="$HOME/.cargo/bin:$PATH"。如果安装失败并提示 No module named 'setuptools_rust',您需要安装 setuptools_rust,例如通过运行:

pip install setuptools-rust

可用模型与语言

共有六种模型尺寸,其中四种提供仅英语版本,在速度和准确性之间提供权衡。
以下是可用模型的名称及其相对于大模型的大致内存需求和推理速度。
下面的相对速度是通过在 A100 上转录英语语音测量的,实际速度可能因许多因素而有显著差异,包括语言、语速和可用硬件。

尺寸 参数量 仅英语模型 多语言模型 所需 VRAM 相对速度
tiny 39 M tiny.en tiny ~1 GB ~10x
base 74 M base.en base ~1 GB ~7x
small 244 M small.en small ~2 GB ~4x
medium 769 M medium.en medium ~5 GB ~2x
large 1550 M N/A large ~10 GB 1x
turbo 809 M N/A turbo ~6 GB ~8x

仅英语应用的 .en 模型往往表现更好,特别是对于 tiny.enbase.en 模型。我们观察到,对于 small.enmedium.en 模型,这种差异变得不那么显著。
此外,turbo 模型是 large-v3 的优化版本,提供更快的转录速度,同时准确性下降最小。

Whisper 的性能因语言而异。下图显示了 large-v3large-v2 模型按语言的性能细分,使用在 Common Voice 15 和 Fleurs 数据集上评估的 WER(词错误率)或 CER(字符错误率,以斜体显示)。其他模型和数据集对应的额外 WER/CER 指标可以在论文的附录 D.1、D.2 和 D.4 中找到,以及翻译的 BLEU(双语评估替补)分数在附录 D.3 中。

按语言划分的 WER 细分

命令行使用

以下命令将使用 turbo 模型转录音频文件中的语音:

whisper audio.flac audio.mp3 audio.wav --model turbo

默认设置(选择 turbo 模型)适用于转录英语。然而,turbo 模型并未针对翻译任务进行训练。如果您需要将非英语语音翻译成英语,请使用多语言模型tinybasesmallmediumlarge)而不是 turbo

例如,要转录包含非英语语音的音频文件,您可以指定语言:

whisper japanese.wav --language Japanese

要将语音翻译成英语,请使用:

whisper japanese.wav --model medium --language Japanese --task translate

注意: 即使指定了 --task translateturbo 模型也会返回原始语言。使用 mediumlarge 模型可获得最佳翻译效果。

运行以下命令查看所有可用选项:

whisper --help

有关所有可用语言的列表,请参见 tokenizer.py

Python 使用

转录也可以在 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")

# 加载音频并填充/修剪以适合 30 秒
audio = whisper.load_audio("audio.mp3")
audio = whisper.pad_or_trim(audio)

# 制作对数梅尔频谱图并移动到与模型相同的设备
mel = whisper.log_mel_spectrogram(audio, n_mels=model.dims.n_mels).to(model.device)

# 检测口语语言
_, probs = model.detect_language(mel)
print(f"检测到的语言: {max(probs, key=probs.get)}")

# 解码音频
options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)

# 打印识别出的文本
print(result.text)

更多示例

请在 Discussions 的 🙌 展示与分享 类别中分享更多 Whisper 的使用示例以及第三方扩展,例如 Web 演示、与其他工具的集成、不同平台的移植等。

许可证

Whisper 的代码和模型权重根据 MIT 许可证发布。有关详细信息,请参见 LICENSE

22 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 48 ms
Developed with Cursor