使用 Hugging Face Transformers 对 Whisper 进行多语言 ASR 微调
Hugging Face 发布了一份关于微调 OpenAI Whisper 模型以实现多语言自动语音识别(ASR)的技术指南。通过利用 🤗 Transformers 库,开发者可以将 Whisper 预训练的多语言知识迁移到低资源语言上,正如在 Hindi 上的微调实验所示,仅使用 8 小时的训练数据即可将词错误率(WER)从 63.5% 降至 32.0%。
Whisper 模型架构与预训练
Whisper 是一种基于 Transformer 的编码器-解码器(序列到序列)模型,旨在将音频谱图特征映射到文本标记。它不同于之前的模型(如 Wav2Vec 2.0),因为它在海量的 标注 音频转录数据上进行预训练——总计 680,000 小时,其中包括 117,000 小时的多语言 ASR 数据。
关键技术特性
- 监督式预训练: 由于直接在语音到文本的映射上进行训练,Whisper 相比于在无监督任务(如掩码预测)上预训练的模型,需要的微调显著更少。
- 深度融合: 模型在解码器内部融合语言模型,使得整个系统能够端到端地使用单一损失函数(交叉熵)进行训练。
- 输入处理: 原始音频被转换为对数梅尔谱图。编码器将这些谱图处理为隐藏状态,解码器随后使用这些隐藏状态自回归地预测文本标记。
模型配置
| 尺寸 | 参数量 | 仅英文 | 多语言 |
|---|---|---|---|
| tiny | 39 M | Yes | Yes |
| base | 74 M | Yes | Yes |
| small | 244 M | Yes | Yes |
| medium | 769 M | Yes | Yes |
| large (v1, v2, v3) | 1550 M | No | Yes |
微调流水线
微调 Whisper 包含一个三部分的流水线:用于音频预处理的特征提取器、序列到序列模型以及用于文本后处理的分词器。
音频预处理与特征提取
Whisper 要求音频输入的采样率为 16kHz。WhisperFeatureExtractor 执行两个关键操作:
- 填充/截断: 所有音频样本统一为 30 秒长度。较短的样本用零填充;较长的样本被截断。
- 谱图转换: 填充后的音频数组被转换为对数梅尔谱图,表示信号随时间的频率分布。
分词与标注
WhisperTokenizer 使用覆盖 96 种语言的预训练字节对编码(BPE)词表。进行微调时,分词器会配置特定的目标语言和任务(例如 language="Hindi"、task="transcribe"),并在标签序列前添加必要的特殊标记。
低资源语言的实现细节
使用 Hindi 语言的 Common Voice 11.0 数据集,指南概述了适配 whisper-small 检查点的具体工作流。
数据准备
- 重采样: 由于 Common Voice 音频通常采样为 48kHz,使用
datasets.Audio的cast_column方法在运行时将音频重采样至 16kHz。 - 映射:
prepare_dataset函数计算对数梅尔输入特征并将目标转录编码为标签 ID。
训练配置
- 数据整理器: 使用自定义的
DataCollatorSpeechSeq2SeqWithPadding来处理input_features(固定维度张量)和labels(可变长度序列,使用 -100 填充以在损失计算时忽略)。 - 评估指标: 使用词错误率(WER)衡量性能,这是 ASR 的行业标准。
- 超参数: 示例中使用的学习率为
1e-5,fp16精度,最大训练步数为 5,000 步。
性能结果与意义
在约 8 小时的 Hindi 数据上微调 whisper-small 模型,相较于零-shot 预训练模型实现了显著的性能提升。
- 预训练 WER: 63.5%
- 微调后 WER: 32.0%
- 绝对提升: 31.5%
该结果表明,Whisper 的大规模预训练使其能够在仅有少量额外数据的情况下,有效地推广到低资源语言。要进一步提升结果,指南建议优化超参数(学习率、dropout)或使用更大的检查点,如 medium 或 large-v3。