openai / whisper

openai/whisper

open_in_new前往仓库

通过大规模弱监督实现稳健的语音识别

项目概览

项目概述

Whisper 是 OpenAI 开源的通用语音识别模型,基于大规模弱监督数据训练。它能够处理多语言语音识别、语音翻译和语言识别,并采用 Transformer 序列到序列架构,将多种语音任务统一为 token 预测过程。

核心功能

  • 多语言语音识别
  • 语音翻译(将非英语语音翻译成英语)
  • 口语语言识别
  • 语音活动检测(VAD)
  • 提供 tiny、base、small、medium、large、turbo 等模型尺寸,其中部分有英文专用版本
  • 支持通过 CLI 输出 JSON、文本、字幕等多种格式(含词级时间戳)

适用与不适用场景

  • 适用:语音转写、字幕生成、非英语语音的英语翻译、语言识别等。
  • 不适用:turbo 模型未针对翻译任务训练,不适合用于语音翻译。
  • 仓库资料未提供流式低延迟识别、生产级并发部署等场景的详细说明,需要自行验证。

技术架构与依赖

  • 模型:Transformer sequence-to-sequence
  • 训练框架:PyTorch
  • 依赖:OpenAI tiktoken(快速 tokenizer)、ffmpeg(音频解码)、可选 Rust(用于 tiktoken 编译)
  • Python 兼容性:3.8-3.11(开发环境使用 Python 3.9.9 / PyTorch 1.10.1)

安装与快速开始

安装命令:

pip install -U openai-whisper

需要安装 ffmpeg,例如 Ubuntu/Debian:

sudo apt update && sudo apt install ffmpeg

如果 tiktoken 没有预编译 wheel,需要安装 Rust。若提示缺少 setuptools_rust,可执行:

pip install setuptools-rust

CLI 快速开始:

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

典型使用方法

CLI 示例:

# 指定语言转录
whisper japanese.wav --language Japanese

# 翻译成英语(使用 multilingual 模型,而非 turbo)
whisper japanese.wav --model medium --language Japanese --task translate

Python 示例:

import whisper

model = whisper.load_model("turbo")
result = model.transcribe("audio.mp3")
print(result["text"])

低级 API 示例(语言检测与 decode):

import whisper

model = whisper.load_model("turbo")
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"Detected language: {max(probs, key=probs.get)}")

options = whisper.DecodingOptions()
result = whisper.decode(model, mel, options)
print(result.text)

配置与部署要点

  • 模型选择需考虑 VRAM 和速度:tiny/base 约 1GB VRAM,large 约 10GB VRAM,turbo 约 6GB VRAM 且速度约为 large 的 8 倍(基于 A100 英语转写测试)。
  • turbo 不适用于翻译任务;翻译请使用 tiny、base、small、medium、large 等多语言模型。
  • transcribe() 使用 30 秒滑动窗口进行自回归解码。
  • 可通过 --output_format 选择输出格式,支持带词级时间戳的字幕生成。
  • CHANGELOG 提到新增 initial_prompt 随滑动窗口传递、支持 Python 3.13、迁移到 pyproject.toml、torch.load 使用 weights_only=True 等配置与安全更新。

限制、风险与许可证

  • 许可证:MIT License(代码和模型权重)。
  • turbo 模型不能用于翻译任务。
  • Whisper 在不同语言上的表现差异较大,具体 WER/CER 数据见论文和模型卡。
  • 已知的重复/幻觉问题在更新中持续修复;加载模型时也需注意安全更新(如 weights_only=True)。
  • 仓库资料未提供关于偏见、隐私或伦理评估的详细说明。

官方链接

信息来源和分析时间

  • 来源:GitHub README、CHANGELOG.md、最新 Release v20250625。
  • 分析时间:基于最新发布 v20250625(2025-06-26 发布)进行整理。