저자원 ASR을 위한 MMS 어댑터 모델 미세 조정하기

TL;DR

MMS 어댑터 미세 조정은 단 10~20분의 학습만으로 저자원 언어에 대해 획기적으로 낮은 단어 오류율(WER)을 제공하며, 전체 모델 미세 조정보다 훨씬 적은 메모리를 사용합니다.


저자원 ASR에 MMS 어댑터가 중요한 이유

Massive Multilingual Speech (MMS) 모델에 대한 어댑터 학습은 데이터가 제한적인 언어에서 전체 모델 미세 조정보다 뛰어난 성능을 발휘합니다. 이 방식은 메모리 효율성이 더 높고, 몇 분 만에 수렴하며, 언어당 약 2.5M 개의 어댑터 가중치만 학습하면서 기본 모델(파라미터의 약 99%)을 보존합니다.


배경: wav2vec 2.0에서 MMS까지

  • wav2vec 2.0 (2020년 9월)은 자기 지도 학습 방식의 음성 사전 학습을 도입했습니다.
  • XLS-R은 wav2vec 2.0을 128개 언어로 확장했습니다.
  • MMS (Meta AI, 2023)는 이를 1,100개 이상의 언어로 확장하여, 1,400개 언어에 걸쳐 500,000시간 이상의 오디오 데이터로 학습된 300M 및 1B 파라미터 체크포인트를 제공합니다.

MMS는 언어별 어댑터를 포함한 세 가지 ASR 체크포인트를 출시합니다:

  • mms-1b-fl102 (102개 언어)
  • mms-1b-l1107 (1,107개 언어)
  • mms-1b-all (모든 1,162개 언어)

각 어댑터는 약 2.5M 개의 학습 가능한 가중치를 포함합니다 (각 어텐션 블록의 작은 선형 투영 및 언어별 어휘집).


어댑터 학습 vs. 전체 미세 조정

측면 어댑터 미세 조정 전체 모델 미세 조정
업데이트되는 파라미터 언어당 약 2.5M (1B 모델의 약 0.2%) 모든 모델 가중치 (약 1B)
메모리 사용량 현저히 낮음; 많은 언어에 대해 단일 GPU에서 실행 가능 높음; 종종 다중 GPU 또는 그래디언트 체크포인팅이 필요함
학습 시간 Common Voice 4시간 데이터 기준 10~20분 (약 4 에포크) 유사한 성능을 위해 수 시간에서 수 일 소요
저자원 데이터에서의 성능 더 나은 WER, 더 견고함 더 나쁜 WER, 과적합되기 쉬움
확장성 새로운 어댑터만 학습하여 새로운 언어 추가 가능 전체 모델을 다시 학습하거나 미세 조정해야 함

중간~높은 자원의 언어의 경우 전체 미세 조정이 여전히 유리할 수 있지만, 데이터가 부족한 시나리오에서는 어댑터가 압도적입니다.


엔드 투 엔드 어댑터 미세 조정 워크플로우 (터키어 예시)

  1. Setupdatasets, transformers, torchaudio, jiwer, accelerate를 설치하고 Hugging Face Hub에 로그인합니다.
  2. Load data – Common Voice 터키어 분할 데이터(train+validation ≈ 4시간)와 평가를 위한 test 분할 데이터를 사용합니다.
  3. Pre-process transcripts – 문장 부호 제거, 대소문자 정규화, 발음 기호 교체, 그리고 문자 단위 어휘집(단어 구분자 |, [UNK], [PAD]를 포함한 37개 토큰)을 구축합니다.
  4. Create tokenizer & feature extractor – 커스텀 어휘집을 사용하여 Wav2Vec2CTCTokenizer를 구축하고 sampling_rate=16000Wav2Vec2FeatureExtractor를를 구축합니다.
  5. Prepare dataset – 오디오를 16kHz로 변환하고, 프로세서를 사용하여 input_values를 추출하고, 레이블을 토큰 ID로 인코딩합니다.
  6. Configure modelfacebook/mms-1b-allignore_mismatched_sizes=True로 로드하고, 어댑터 레이어를 재초기화(model.init_adapter_layers())하고, 기본 모델을 동결결합니다(model.freeze_base_model()), 그리고 그래디언트 체크포인팅을 활성화합니다.
  7. Define data collator – 입력값과 레이블을 각각 별도로 패딩 처리하고 레이블 패딩을 -100으로 마스킹하는 커스텀 DataCollatorCTCWithPadding을 사용합니다.
  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분 미만으로 완료됩니다. 샘플 학습 로그를 보면 400 스텝 이후 WER이 약 0.28에서 약 0.22로 감소합니다.
  10. Save & share adapters – 어댑터 가중치는 safe-tensor 파일(adapter.<lang>.safetensors)로 저장되어 Hub에 업로드됩니다.
  11. Inference – `target_lang=

Sources