为低资源 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 微调工作流(以土耳其语为例)

  1. Setup – 安装 datasets, transformers, torchaudio, jiwer, accelerate 并登录 Hugging Face Hub。
  2. Load data – 使用 Common Voice 土耳其语划分(train+validation ≈ 4 h)和用于评估的 test 划分。
  3. Pre-process transcripts – 去除标点符号,规范化大小写,替换变音符号,并构建字符级词汇表(包括一个单词分隔符 |[UNK][PAD] 在内的 37 个 token)。
  4. Create tokenizer & feature extractor – 使用自定义词汇表构建 Wav2Vec2CTCTokenizer,并使用 sampling_rate=16000 创建 Wav2Vec2FeatureExtractor
  5. Prepare dataset – 将音频转换为 16 kHz,使用 processor 进行 input_values 提取,并将标签转换为 token IDs。
  6. Configure model – 加载 facebook/mms-1b-all 并设置 ignore_mismatched_sizes=True,重新初始化 adapter 层(model.init_adapter_layers()),冻结基础模型(model.freeze_base_model()),并启用梯度检查点。
  7. Define data collator – 使用自定义的 DataCollatorCTCWithPadding,它分别对输入和标签进行填充,并使用 -100 掩码标签填充值。
  8. Training arguments| 示例设置:per_device_train_batch_size=32, learning_rate=1e-3, num_train_epochs=4, fp16=True, push_to_hub=True
  9. Run Trainer – 训练在单个 GPU 上完成 < 30 min。示例训练日志显示 WER 在 400 步后从 ~0.28 降至 ~0.22。
  10. Save & share adapters – Adapter 权重被保存为 safe-tensor 文件(adapter.<lang>.safetensors)并上传到 Hub。
  11. Inference – 使用 `target_lang=

Sources