OpenAI 在 2022 年 9 月开源了 Whisper 语音识别模型,支持多语言转录和翻译,效果惊人地好。这里记录下我的使用体验和一些实践细节。
Whisper 是什么
Whisper 是一个基于 Transformer 的 encoder-decoder 语音识别模型,在 68 万小时的多语言音频数据上训练。它的特点是「大力出奇迹」——不靠什么精巧的架构创新,而是用海量弱监督数据堆出来的泛化能力。
模型有多个尺寸:
| 模型 | 参数量 | 英语 WER | 多语言 |
|---|---|---|---|
| tiny | 39M | ~8% | 一般 |
| base | 74M | ~6% | 还行 |
| small | 244M | ~4.5% | 不错 |
| medium | 769M | ~3.5% | 很好 |
| large | 1550M | ~3% | 最佳 |
安装与基本使用
pip install openai-whisper
# 需要 ffmpeg
sudo apt install ffmpeg
命令行最简用法:
whisper audio.mp3 --model small --language Chinese
Python 调用:
import whisper
model = whisper.load_model("small")
# 转录
result = model.transcribe("meeting.mp3", language="zh")
print(result["text"])
# 带时间戳的分段结果
for seg in result["segments"]:
print(f"[{seg['start']:.1f}s -> {seg['end']:.1f}s] {seg['text']}")
transcribe vs translate
Whisper 支持两种模式:
- transcribe:保持原语言输出。中文音频 -> 中文文本
- translate:翻译成英文。中文音频 -> 英文文本
# 翻译模式
result = model.transcribe("chinese_audio.mp3", task="translate")
print(result["text"]) # 输出英文
translate 模式只支持翻译到英文,不支持其他目标语言。
实际体验
我用几段不同场景的音频测试了 small 模型:
- 播客(普通话):准确率非常高,95% 以上,偶尔在专业术语上出错
- 会议录音(带方言口音):准确率约 85%,方言重的部分会出一些离谱的错
- 英文技术演讲:效果很好,专业术语识别比预期好
- 嘈杂环境:背景噪音大的时候识别率下降明显,medium 模型会好一些
中文识别一个常见问题是标点符号——Whisper 会自动加标点,但中文的逗号句号位置有时不太对。
用 API 调用
如果不想本地跑模型(需要 GPU),可以用 OpenAI 的 API:
import openai
audio_file = open("meeting.mp3", "rb")
transcript = openai.Audio.transcribe(
model="whisper-1",
file=audio_file,
language="zh",
response_format="verbose_json"
)
for seg in transcript["segments"]:
print(f"[{seg['start']:.1f} - {seg['end']:.1f}] {seg['text']}")
API 价格是 $0.006/分钟,一小时会议录音不到 $0.4,很便宜。
长音频处理
Whisper 的上下文窗口是 30 秒。对于长音频,库内部会自动切分。但如果你想更精细地控制,可以手动分段:
import whisper
from pydub import AudioSegment
audio = AudioSegment.from_mp3("long_meeting.mp3")
chunk_ms = 30 * 1000 # 30秒一段
model = whisper.load_model("small")
full_text = []
for i in range(0, len(audio), chunk_ms):
chunk = audio[i:i + chunk_ms]
chunk.export("temp_chunk.wav", format="wav")
result = model.transcribe("temp_chunk.wav", language="zh")
full_text.append(result["text"])
print("\n".join(full_text))
小结
Whisper 的开源让语音识别的门槛大幅降低。small 模型在大多数场景下够用,对中文的支持也不错。我目前主要用它来做会议录音的转文字,再丢给 GPT 做总结,整个流程非常顺滑。