使用 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 要求音频输入的采样率为 16kHzWhisperFeatureExtractor 执行两个关键操作:

  1. 填充/截断: 所有音频样本统一为 30 秒长度。较短的样本用零填充;较长的样本被截断。
  2. 谱图转换: 填充后的音频数组被转换为对数梅尔谱图,表示信号随时间的频率分布。

分词与标注

WhisperTokenizer 使用覆盖 96 种语言的预训练字节对编码(BPE)词表。进行微调时,分词器会配置特定的目标语言和任务(例如 language="Hindi"task="transcribe"),并在标签序列前添加必要的特殊标记。

低资源语言的实现细节

使用 Hindi 语言的 Common Voice 11.0 数据集,指南概述了适配 whisper-small 检查点的具体工作流。

数据准备

  • 重采样: 由于 Common Voice 音频通常采样为 48kHz,使用 datasets.Audiocast_column 方法在运行时将音频重采样至 16kHz。
  • 映射: prepare_dataset 函数计算对数梅尔输入特征并将目标转录编码为标签 ID。

训练配置

  • 数据整理器: 使用自定义的 DataCollatorSpeechSeq2SeqWithPadding 来处理 input_features(固定维度张量)和 labels(可变长度序列,使用 -100 填充以在损失计算时忽略)。
  • 评估指标: 使用词错误率(WER)衡量性能,这是 ASR 的行业标准。
  • 超参数: 示例中使用的学习率为 1e-5fp16 精度,最大训练步数为 5,000 步。

性能结果与意义

在约 8 小时的 Hindi 数据上微调 whisper-small 模型,相较于零-shot 预训练模型实现了显著的性能提升。

  • 预训练 WER: 63.5%
  • 微调后 WER: 32.0%
  • 绝对提升: 31.5%

该结果表明,Whisper 的大规模预训练使其能够在仅有少量额外数据的情况下,有效地推广到低资源语言。要进一步提升结果,指南建议优化超参数(学习率、dropout)或使用更大的检查点,如 mediumlarge-v3

Sources