📌 项目地址:openai/whisper | ⭐ 101,694 颗星 | 🔧 Python | 📜 未标注
Whisper 是什么?它能解决什么问题?
Whisper 是 OpenAI 发布的通用语音识别模型,2017年 69k Star。它基于 Transformer 的序列到序列架构,在 68 万小时多语言、多任务音频数据上训练,能够同时完成多语种语音识别、语音翻译(如英语翻译为中文)、语言识别、语音活动检测等任务。传统语音处理流水线需要多个独立模块(声学模型、语言模型、去噪、端点检测等),而 Whisper 用一个模型覆盖全部环节,大大简化了部署流程。
弱监督训练是其核心创新:模型从互联网上收集的海量带字幕/标签的音频中学习,无需人工精细标注,从而获得了对噪声、口音、远场录音等复杂场景的强鲁棒性。根据官方模型卡,Whisper 在多个公开测试集上的词错误率(WER)优于当前多数开源模型,且跨语言的泛化能力突出。
快速上手:安装与使用
安装
需要 Python 3.8-3.11,推荐 Python 3.9.9。使用 pip 安装最新发布版:
pip install -U openai-whisper
或直接从 GitHub 源码安装(包含最新提交):
pip install git+https://github.com/openai/whisper.git
系统必须安装 ffmpeg,对应操作系统的安装命令(来自 README):
# Ubuntu/Debian
sudo apt update && sudo apt install ffmpeg
# macOS (Homebrew)
brew install ffmpeg
# Windows (Chocolatey)
choco install ffmpeg
# Windows (Scoop)
scoop install ffmpeg
若安装过程中出现 tokenizer 相关错误,可能需要安装 Rust(具体步骤参考 Rust 入门页)。
命令行使用
假设你有一个音频文件 audio.mp3,最简单的命令:
whisper audio.mp3
Whisper 会自动检测语言并输出文本,默认会打印到终端并生成 SRT、VTT、TXT、TSV、JSON 格式文件。你可以指定模型大小:
whisper audio.mp3 --model medium
支持的模型从 tiny(39M 参数)到 large(1550M 参数),越大越准确但消耗更多资源。将音频翻译成英语(无论原语言是什么):
whisper audio.mp3 --task translate
更多选项如 --language(指定语言)、--output_format 等,详见官方文档。
Python API 使用
在代码中集成 Whisper 非常简洁:
import whisper
model = whisper.load_model("base")
result = model.transcribe("audio.mp3")
print(result["text"])
result 是一个字典,包含 text(完整文本)、segments(时间戳分词段)、language(检测到的语言)等字段。翻译任务只需传参:
result = model.transcribe("audio.mp3", task="translate")
还可以手动指定语言并禁用自动检测:
result = model.transcribe("audio.mp3", language="ja")
与同类工具的核心差异
对比 DeepSpeech(Mozilla)
- 训练方式:DeepSpeech 需要大量带对应文本的音频标注,Whisper 使用弱监督(从已有字幕中学习),数据量更大且成本更低。
- 多语言:DeepSpeech 支持语言由预训练模型决定,扩展需重新训练;Whisper 原生支持 99 种语言,开箱即用。
- 噪声鲁棒性:Whisper 因训练数据包含各种真实场景(环境音、多说话人、低质量录音),在嘈杂环境下的表现明显优于 DeepSpeech(参考论文中的 LibriSpeech 和 Common Voice 测试)。
对比 Google Cloud Speech-to-Text / Azure Speech
- 隐私与成本:Whisper 完全本地运行,数据不离开设备,无 API 调用费用;商业云服务按分钟计费,且数据传输存在隐私风险。
- 实时性:云服务通常支持流式识别,Whisper 目前只支持离线整段音频处理,实时场景需额外封装(但社区有流式实现分支)。
- 准确率:在标准数据集上,Whisper large 模型可比肩甚至超过部分云服务;但在特定领域(如医疗、法律)的定制化上,云服务可提供领域微调。
对比 Wav2Vec 2.0 / HuBERT(Facebook)
- 任务支持:Wav2Vec 2.0 等预训练模型通常只输出声学特征或说话人无关的embedding,下游需要再加分类器;Whisper 直接输出文本,端到端,且内置翻译、语言识别能力。
- 数据需求:Wav2Vec 2.0 的无监督预训练数据无需标签,但微调仍需要标注;Whisper 的弱监督训练虽然需要搭配字幕的音频,但数据来源更灵活(可从网上大规模爬取)。
需要注意的事项
- 资源消耗:
large模型在 CPU 上推理较慢(音频时间 * 10~30 倍),推荐使用 GPU(至少 6GB 显存)。tiny和base可在 CPU 上基本可用,但延迟仍不低。 - 不支持流式:Whisper 设计为整段音频转录,无法实时输出中间结果。如需实时识别,可考虑结合 VAD(语音活动检测)分段处理,或等待社区流式方案成熟。
- 许可证:Whisper 的代码采用 MIT 许可证,模型权重采用 MIT 兼容的许可(具体以 model card 为准)。使用模型产生的输出可能受训练数据中的版权内容影响,建议自查。
- 语言支持:虽然支持 99 种语言,但部分小语种准确率可能较低。官方公布的数据集上,英语和罗曼语族表现最佳,东欧、印地语等相对较弱。
- 说话人分离:Whisper 不提供说话人 diarization(谁在什么时间说话),如果应用需要区分说话人,需要搭配其他工具。
- Rust 编译问题:某些系统安装
tiktoken时可能缺失预编译轮子,需按 README 指引安装 Rust 开发环境。