为低资源 ASR 微调 MMS Adapter 模型
TL;DR
MMS adapter 微调在仅需 10-20 分钟训练后,即可为低资源语言提供显著降低的词错误率 (WER),且其内存占用远低于全模型微调。
为什么 MMS adapter 对低资源 ASR 至关重要
在数据有限的语言上,对 Massive Multilingual Speech (MMS) 模型进行 adapter 训练的效果优于全模型微调。这种方法更节省内存,能在几分钟内收敛,并在仅训练每种语言约 2.5 M 个 adapter 权重的情况下,保留基础模型(≈99% 的参数)。
背景:从 wav2vec 2.0 到 MMS
- wav2vec 2.0 (Sept 2020) 引入了自监督语音预训练。
- XLS-R 将 wav2vec 2.0 扩展到了 128 种语言。
- MMS (Meta AI, 2023) 将其扩展到了 >1,100 种语言,其 300 M 和 1 B 参数的检查点是在 1,400 种语言的 >500 k h 音频上训练的。
MMS 发布了三个带有语言特定 adapter 的 ASR 检查点:
mms-1b-fl102(102 种语言)mms-1b-l1107(1,107 种语言)mms-1b-all(所有 1,162 种语言)
每个 adapter 包含约 2.5 M 个可训练权重(每个 attention block 的小型线性投影加上一个语言特定的 vocab layer)。
Adapter 训练 vs. 全模型微调
| Aspect | Adapter fine-tuning | Full model fine-tuning |
|---|---|---|
| Parameters updated | ~2.5 M per language (≈0.2% of a 1 B model) | All model weights (≈1 B) |
| Memory usage | Significantly lower; fits on a single GPU for many languages | High; often requires multi-GPU or gradient checkpointing |
| Training time | 10-20 min for 4 h of Common Voice data (≈4 epochs) | Hours to days for comparable performance |
| Performance on low-resource data | Better WER, more robust | Worse WER, prone to over-fitting |
| Scalability | Add new language by training a new adapter only | Must retrain or fine-tune entire model |
对于中高资源语言,全模型微调可能仍然具有优势,但对于稀缺数据场景,adapters 占据主导地位。
端到端 adapter 微调工作流(以土耳其语为例)
- Setup – 安装
datasets,transformers,torchaudio,jiwer,accelerate并登录 Hugging Face Hub。 - Load data – 使用 Common Voice 土耳其语划分(
train+validation≈ 4 h)和用于评估的test划分。 - Pre-process transcripts – 去除标点符号,规范化大小写,替换变音符号,并构建字符级词汇表(包括一个单词分隔符
|、[UNK]和[PAD]在内的 37 个 token)。 - Create tokenizer & feature extractor – 使用自定义词汇表构建
Wav2Vec2CTCTokenizer,并使用sampling_rate=16000创建Wav2Vec2FeatureExtractor。 - Prepare dataset – 将音频转换为 16 kHz,使用 processor 进行
input_values提取,并将标签转换为 token IDs。 - Configure model – 加载
facebook/mms-1b-all并设置ignore_mismatched_sizes=True,重新初始化 adapter 层(model.init_adapter_layers()),冻结基础模型(model.freeze_base_model()),并启用梯度检查点。 - Define data collator – 使用自定义的
DataCollatorCTCWithPadding,它分别对输入和标签进行填充,并使用-100掩码标签填充值。 - Training arguments| 示例设置:
per_device_train_batch_size=32,learning_rate=1e-3,num_train_epochs=4,fp16=True,push_to_hub=True。 - Run Trainer – 训练在单个 GPU 上完成 < 30 min。示例训练日志显示 WER 在 400 步后从 ~0.28 降至 ~0.22。
- Save & share adapters – Adapter 权重被保存为 safe-tensor 文件(
adapter.<lang>.safetensors)并上传到 Hub。 - Inference – 使用 `target_lang=