低リソースASRのためのMMSアダプターモデルのファインチューニング
TL;DR
MMSアダプターのファインチューニングは、わずか10〜20分のトレーニングで低リソース言語の単語誤り率(WER)を劇的に低下させ、フルモデルのファインチューニングよりもはるかに少ないメモリを使用します。
なぜ低リソースASRにMMSアダプターが重要なのか
Massive Multilingual Speech (MMS) モデル上でのアダプター学習は、データが限られている言語において、フルモデルのファインチューニングを凌駕します。このアプローチはメモリ効率が高く、数分で収束し、ベースモデル(パラメータの約99%)を保持しながら、言語ごとに約2.5Mのアダプター重みを学習するだけです。
背景:wav2vec 2.0からMMSへ
- wav2vec 2.0 (2020年9月) は、自己教師あり音声学習の事前学習を導入しました。
- XLS-R は wav2vec 2.0 を 128 言語に拡張しました。
- MMS (Meta AI, 2023) はこれを1,100以上の言語にスケールアップし、1,400言語にわたる500k時間以上の音声データで学習された300Mおよび1Bパラメータのチェックポイントを提供しています。
MMSは、言語固有のアダプターを備えた3つのASRチェックポイントをリリースしています:
mms-1b-fl102(102言語)mms-1b-l1107(1,107言語)mms-1b-all(全1,162言語)
各アダプターには、約2.5Mの学習可能な重みが含まれています(各アテンションブロックの小さな線形投影および言語固有の語彙層)。
アダプター学習 vs. フルファインチューニング
| Aspect | Adapter fine‑tuning | Full model fine‑tuning |
|---|---|---|
| Parameters updated | 言語ごとに約2.5M (1Bモデルの約0.2%) | 全モデル重み (約1B) |
| Memory usage | 著しく低い; 多くの言語で単一GPUに収まる | 高い; 多くの場合、マルチGPUまたはグラジエント・チェックポインティングが必要 |
| Training time | Common Voiceの4時間分のデータで10〜20分 (約4エポック) | 同等の性能を得るために数時間から数日 |
| Performance on low-resource data | より良いWER, より堅牢 | より悪いWER, 過学習の傾向がある |
| Scalability | 新しいアダプターを学習するだけで新しい言語を追加可能 | モデル全体を再学習またはファインチューニングする必要がある |
中〜高リソース言語の場合、フルファインチューニングが有利な場合もありますが、データが乏しいシナリオではアダプターが圧倒的に優れています。
エンドツーエンドのアダプター・ファインチューニング・ワークフロー (トルコ語の例)
- Setup –
datasets,transformers,torchaudio,jiwer,accelerateをインストールし、Hugging Face Hubにログインします。 - Load data – Common Voiceのトルコ語分割セット (
train+validation≈ 4時間) と、評価用のtest分割セットを使用します。 - Pre‑process transcripts – 句読点を削除し、ケースを正規化し、ダイアクリティカルマークを置換し、文字レベルの語彙(単語区切り文字
|、[UNK],[PAD]を含む37トークン)を構築します。 - Create tokenizer & feature extractor – カスタム語彙から
Wav2Vec2CTCTokenizerを構築し、sampling_rate=16000のWav2Vec2FeatureExtractorを作成します。 - Prepare dataset – 音声を16kHzにキャストし、プロセッサで
input_valuesを抽出し、ラベルをトークンIDにエンコードします。 - Configure model –
facebook/mms-1b-allをignore_mismatched_sizes=Trueでロードし、アダプター層を再初期化 (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分未満で完了します。トレーニングログのサンプルは、400ステップ後にWERが約0.28から約0.22に低下することを示しています。
- Save & share adapters – アダプター重みは safe-tensorファイル (
adapter.<lang>.safetensors) として保存され、Hugging Face Hubにアップロードされます。 - Inference | `target_lang=