Distil-Whisper:更快更轻的语音识别模型
Distil-Whisper是由Hugging Face团队开发的Whisper模型的蒸馏版本,旨在为语音识别任务提供更快更轻量的解决方案。作为OpenAI Whisper模型的精简版,Distil-Whisper在保持接近原始模型性能的同时,实现了显著的速度提升和模型体积缩减。
主要特点
-
更快的推理速度: Distil-Whisper的推理速度是原始Whisper模型的6倍,这意味着它可以更快地处理音频输入并生成文本输出。
-
更小的模型体积: 相比原始Whisper模型,Distil-Whisper的参数量减少了49%。这使得它更适合在资源受限的环境中部署,如移动设备或边缘计算设备。
-
接近的性能表现: 尽管模型体积缩小,Distil-Whisper在分布外评估集上的词错误率(WER)与原始Whisper模型的差异仅在1%以内。这意味着它能够在大多数实际应用中提供与Whisper相当的识别准确性。
-
多种模型变体: Distil-Whisper提供了多个模型变体,包括distil-large-v3、distil-medium.en和distil-small.en等,以适应不同的应用场景和硬件条件。
技术原理
Distil-Whisper的创新之处在于其独特的蒸馏方法:
-
编码器保留: 完整保留了Whisper模型的编码器部分,并在训练过程中冻结其参数。
-
解码器精简: 仅保留了两个解码器层,分别初始化自Whisper模型的第一层和最后一层解码器。其他解码器层被舍弃,大大减少了模型参数量。
-
知识蒸馏: 通过最小化蒸馏模型与Whisper模型之间的KL散度,以及在伪标签音频数据上的交叉熵损失来训练模型。
-
大规模伪标签数据: 使用了总计22,000小时的伪标签音频数据进行训练,涵盖10个领域,包含超过18,000名说话者的语音。这种多样性有助于提高模型的鲁棒性。
应用场景
Distil-Whisper适用于多种语音识别场景:
-
短音频转写: 对于30秒以内的短音频,Distil-Whisper可以一次性处理整个音频片段,无需分块。
-
长音频转写: 对于超过30秒的长音频,Distil-Whisper提供了两种算法:
- 顺序长音频算法:使用滑动窗口进行缓冲推理,适合对转写准确性要求较高的场景。
- 分块长音频算法:适合需要快速推理的场景,在某些情况下可以比OpenAI的顺序长音频实现快9倍。
-
推测性解码: Distil-Whisper可以作为Whisper的辅助模型进行推测性解码,在保证相同输出的同时,将推理速度提高2倍。
-
移动端和边缘设备: 对于资源受限的环境,如移动设备或边缘计算设备,可以使用distil-small.en模型,它仅有166M参数,但性能仍在Whisper large-v3的4%误差范围内。
使用方法
Distil-Whisper可以通过Hugging Face Transformers库轻松使用。以下是一个简单的使用示例:
import torch
from transformers import AutoModelForSpeechSeq2Seq, AutoProcessor, pipeline
device = "cuda:0" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.float16 if torch.cuda.is_available() else torch.float32
model_id = "distil-whisper/distil-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,
max_new_tokens=128,
torch_dtype=torch_dtype,
device=device,
)
# 使用管道进行音频转写
result = pipe("path/to/your/audio.mp3")
print(result["text"])
性能优化
为进一步提升Distil-Whisper的性能,可以考虑以下优化方法:
-
Flash Attention: 如果GPU支持,可以使用Flash Attention 2来加速注意力计算。
-
Torch Scale-Product-Attention (SDPA): 对于不支持Flash Attention的GPU,可以使用BetterTransformers来优化性能。
-
推测性解码: 将Distil-Whisper作为辅助模型与原始Whisper模型配合使用,可以在保证输出质量的同时将推理速度提高2倍。
结语
Distil-Whisper为语音识别任务提供了一个高效、轻量级的解决方案。它不仅保持了接近原始Whisper模型的性能,还大大提高了推理速度和部署灵活性。无论是在云端服务器还是移动设备上,Distil-Whisper都能为各种语音识别应用提供强大支持。随着技术的不断发展,我们期待看到更多基于Distil-Whisper的创新应用,推动语音识别技术在更广泛的领域中的应用和普及。