模型简介
模型特点
模型能力
使用案例
🚀 自动语音识别模型Whisper-large-v3
本项目基于OpenAI的Whisper-large-v3模型,是用于自动语音识别(ASR)和语音翻译的先进模型。它在多种语言上表现出色,能有效处理不同口音、背景噪音和专业语言,为开发者和研究者提供了强大的语音处理解决方案。
🚀 快速开始
模型支持语言
本模型支持众多语言,包括但不限于英语(en)、中文(zh)、德语(de)、西班牙语(es)、俄语(ru)等。
模型使用示例
可通过以下链接体验模型示例:
查看模型集合
查看我们上传的所有文本转语音(TTS)模型,请访问 我们的集合。
学习微调TTS模型
学习如何微调TTS模型,请阅读 我们的指南。
Unsloth Dynamic 2.0
Unsloth Dynamic 2.0 实现了卓越的准确性,性能优于其他领先的量化模型。
模型支持列表
模型名称 | 免费笔记本链接 | 性能提升 | 内存使用降低 |
---|---|---|---|
Orpheus-TTS | 点击在Colab上开始 | 快1.5倍 | 减少58% |
Whisper Large V3 | 点击在Colab上开始 | 快1.5倍 | 减少50% |
Qwen3 (14B) | 点击在Colab上开始 | 快2倍 | 减少70% |
Llama 3.2 Vision (11B) | 点击在Colab上开始 | 快1.8倍 | 减少50% |
✨ 主要特性
- 先进的语音识别能力:Whisper是用于自动语音识别(ASR)和语音翻译的先进模型,在超过500万小时的标注数据上进行训练,在零样本设置下对许多数据集和领域具有很强的泛化能力。
- 多语言支持:支持众多语言,能实现多种语言到英语的零样本翻译。
- 性能提升:与Whisper large-v2相比,large-v3模型在多种语言上表现出更好的性能,错误率降低10% - 20%。
- 灵活的使用方式:可通过
pipeline
类处理任意长度的音频,支持多种解码策略,可指定语言、任务和返回时间戳等。 - 速度和内存优化:提供多种速度和内存优化方法,如分块长音频处理、
torch compile
、Flash Attention 2和Torch Scale-Product-Attention(SDPA)等。
📦 安装指南
要运行Whisper large-v3模型,首先需要安装Transformers
库。以下示例中,还会安装Datasets
以从Hugging Face Hub加载玩具音频数据集,以及Accelerate
以减少模型加载时间:
pip install --upgrade pip
pip install --upgrade transformers datasets[audio] accelerate
💻 使用示例
基础用法
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
from datasets import load_dataset
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "openai/whisper-large-v3"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True, use_safetensors=True
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
pipe = pipeline(
"automatic-speech-recognition",
model=model,
tokenizer=processor.tokenizer,
feature_extractor=processor.feature_extractor,
torch_dtype=torch_dtype,
device=device,
)
dataset = load_dataset("distil-whisper/librispeech_long", "clean", split="validation")
sample = dataset[0]["audio"]
result = pipe(sample)
print(result["text"])
转录本地音频文件
result = pipe("audio.mp3")
并行转录多个音频文件
result = pipe(["audio_1.mp3", "audio_2.mp3"], batch_size=2)
启用解码策略
generate_kwargs = {
"max_new_tokens": 448,
"num_beams": 1,
"condition_on_prev_tokens": False,
"compression_ratio_threshold": 1.35, # zlib压缩比阈值(在令牌空间中)
"temperature": (0.0, 0.2, 0.4, 0.6, 0.8, 1.0),
"logprob_threshold": -1.0,
"no_speech_threshold": 0.6,
"return_timestamps": True,
}
result = pipe(sample, generate_kwargs=generate_kwargs)
指定源音频语言
result = pipe(sample, generate_kwargs={"language": "english"})
执行语音翻译任务
result = pipe(sample, generate_kwargs={"task": "translate"})
返回句子级时间戳
result = pipe(sample, return_timestamps=True)
print(result["chunks"])
返回单词级时间戳
result = pipe(sample, return_timestamps="word")
print(result["chunks"])
组合使用参数
result = pipe(sample, return_timestamps=True, generate_kwargs={"language": "french", "task": "translate"})
print(result["chunks"])
直接使用模型 + 处理器API
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor
from datasets import Audio, load_dataset
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "openai/whisper-large-v3"
model = AutoModelForSpeechSeq2Seq.from_pretrained(
model_id, torch_dtype=torch_dtype, low_cpu_mem_usage=True
)
model.to(device)
processor = AutoProcessor.from_pretrained(model_id)
dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
dataset = dataset.cast_column("audio", Audio(processor.feature_extractor.sampling_rate))
sample = dataset[0]["audio"]
inputs = processor(
sample["array"],
sampling_rate=sample["sampling_rate"],
return_tensors="pt",
truncation=False,
padding="longest",
return_attention_mask=True,
)
inputs = inputs.to(device, dtype=torch_dtype)
gen_kwargs = {
"max_new_tokens": 448,
"num_beams": 1,
"condition_on_prev_tokens": False,
"compression_ratio_threshold": 1.35, # zlib压缩比阈值(在令牌空间中)
"temperature": (0.0, 0.2, 0.4, 0.6, 0.8, 1.0),
"logprob_threshold": -1.0,
"no_speech_threshold": 0.6,
"return_timestamps": True,
}
pred_ids = model.generate(**inputs, **gen_kwargs)
pred_text = processor.batch_decode(pred_ids, skip_special_tokens=True, decode_with_timestamps=False)
print(pred_text)
📚 详细文档
模型细节
Whisper是基于Transformer的编码器 - 解码器模型,也称为序列到序列模型。有英语专用和多语言两种类型。英语专用模型针对英语语音识别任务进行训练,多语言模型同时针对多语言语音识别和语音翻译进行训练。
Whisper模型有五种不同大小的配置,最小的四种有英语专用和多语言版本,最大的检查点仅为多语言版本。所有十个预训练检查点都可在 Hugging Face Hub 上找到。具体如下:
大小 | 参数 | 英语专用 | 多语言 |
---|---|---|---|
tiny | 39 M | 链接 | 链接 |
base | 74 M | 链接 | 链接 |
small | 244 M | 链接 | 链接 |
medium | 769 M | 链接 | 链接 |
large | 1550 M | x | 链接 |
large-v2 | 1550 M | x | 链接 |
large-v3 | 1550 M | x | 链接 |
微调指南
预训练的Whisper模型对不同数据集和领域具有很强的泛化能力,但通过微调可以进一步提高其在某些语言和任务上的预测能力。博客文章 使用Transformers微调Whisper 提供了使用最少5小时标注数据微调Whisper模型的详细步骤。
评估使用说明
- 目标用户:这些模型的主要目标用户是研究当前模型的鲁棒性、泛化能力、性能、偏差和限制的AI研究人员。不过,Whisper作为一种ASR解决方案对开发者也很有用,特别是对于英语语音识别。
- 使用建议:模型主要在ASR和语音翻译到英语的任务上进行训练和评估,在约10种语言上显示出较强的ASR结果。在将模型部署到特定上下文和领域之前,强烈建议用户进行充分的评估。
- 使用警告:
- 请勿在未经个人同意的情况下使用Whisper模型转录其录音,也不要将这些模型用于任何主观分类。
- 不建议在高风险领域(如决策场景)使用,因为准确性的缺陷可能导致结果出现明显缺陷。模型旨在转录和翻译语音,将其用于分类不仅未经过评估,而且不合适,特别是用于推断人类属性。
训练数据
large-v3检查点在100万小时的弱标注音频和400万小时使用Whisper large-v2收集的伪标注音频上进行训练。如 随附论文 所述,特定语言的转录性能与该语言的训练数据量直接相关。
性能和局限性
- 优点:与许多现有的ASR系统相比,模型对口音、背景噪音、专业语言具有更强的鲁棒性,能实现多种语言到英语的零样本翻译,语音识别和翻译的准确性接近当前先进水平。
- 缺点:
- 幻觉问题:由于模型在大规模噪声数据上进行弱监督训练,预测结果可能包含音频输入中实际未说出的文本(即幻觉)。
- 语言性能不均:模型在不同语言上的表现不均,在资源较少和/或可发现性较低的语言或训练数据较少的语言上准确性较低。
- 口音和方言差异:在特定语言的不同口音和方言上表现不同,可能导致不同性别、种族、年龄或其他人口统计标准的说话者的单词错误率较高。
- 重复文本问题:模型的序列到序列架构容易生成重复文本,虽然可以通过束搜索和温度调度在一定程度上缓解,但无法完全解决。
更广泛的影响
- 积极影响:Whisper模型的转录能力有望用于改进辅助工具。虽然模型本身不能直接用于实时转录,但基于其构建的应用程序可能实现接近实时的语音识别和翻译。
- 潜在风险:发布Whisper模型可能带来潜在的双重用途问题。虽然希望该技术主要用于有益目的,但使ASR技术更易于获取可能使更多人能够构建强大的监控技术或扩大现有监控工作。此外,模型可能具有识别特定个人的能力,这带来了与双重用途和性能差异相关的安全问题。
🔧 技术细节
模型架构
Whisper是基于Transformer的编码器 - 解码器模型,也称为序列到序列模型。
模型改进
Whisper large-v3与之前的 large 和 large-v2 模型架构相同,但有以下细微差异:
- 频谱图输入使用128个Mel频率 bins,而不是80个。
- 新增了粤语的语言令牌。
训练数据
large-v3模型在100万小时的弱标注音频和400万小时使用Whisper large-v2收集的伪标注音频上进行训练,训练了2.0个周期。
速度和内存优化
- 分块长音频处理:Whisper的感受野为30秒,对于更长的音频,可使用分块长音频处理方法,将长音频文件分割成较短的片段进行独立转录,然后拼接结果。
- torch compile:Whisper的前向传播与
torch compile
兼容,可实现4.5倍的速度提升。 - Flash Attention 2:如果GPU支持,建议使用 Flash-Attention 2 以提高性能。
- Torch Scale-Product-Attention (SDPA):如果GPU不支持Flash Attention,建议使用PyTorch的 scaled dot-product attention (SDPA)。
📄 许可证
本项目使用 Apache-2.0 许可证。
BibTeX引用
@misc{radford2022whisper,
doi = {10.48550/ARXIV.2212.04356},
url = {https://arxiv.org/abs/2212.04356},
author = {Radford, Alec and Kim, Jong Wook and Xu, Tao and Brockman, Greg and McLeavey, Christine and Sutskever, Ilya},
title = {Robust Speech Recognition via Large-Scale Weak Supervision},
publisher = {arXiv},
year = {2022},
copyright = {arXiv.org perpetual, non-exclusive license}
}



