
Wav2vec 2.0 은 음성 데이터에서 벡터화된 representation 을 Self-Supervised Learning (자기지도학습) 으로 학습하는 방법이다.
일단 Unlabeled 음성 데이터로 사전학습 시키고, Labeled 데이터로 미세조정 시키는 방식임

Raw Audio → CNN → Latent Speech Representation Feature (음성 데이터 압축하거나 추상화해서 음성의 중요한 정보 요약해서 표현하는 벡터 공간) → Masking → Transformer → Context Vector 뽑아냄 → Quantization → Contrastive Loss 학습

결과는 각 코드북 그룹 g 안에서 특정 실제 코드북 벡터 v 선택 확률→ q 의 경우는 즉 가장 확률 높은 v 선택해서 만든 이산 코드북 벡터.
선택된 v 들을 concate 해서 선형변환 적용해서 feature vector q 만들어내는 방식
Codebook 이라는 개념
인풋 받은 음성 신호를 짧은 시간단위로 나눠서 음향 특징 (에너지 패턴, 주파수 성분 등) 을 표현한 벡터 조각임
Feature Encoder 에서의 출력값 특성 벡터 (z1-zT) 일부를 마스킹함
각 마스킹된 시간 스텝에 대해 주어진 후보 중 정확한 정답 (latent audio representation) 을 구별해서 맞추는 방식
무작위로 마스킹 시작시점 고르고 → M개의 연속된 시간 스텝 마스킹 하는 방식
샘플링 중복 없이 하지만 마스킹 영역끼리 겹칠 수 있다고 함
정답 벡터는 Quantization Module 통과해서 나온 codebook vector q 임
총 Loss 는

contrastive loss + diversity loss 느낌으로 해석 (a 는 하이퍼파라미터)

context vector ct (마스킹된 시간 스텝 t 의 context vector) 가 정답 벡터인 qt 와는 비슷하게, 정답이 아닌 나머지는 “틀리다” 로 인식시켜서 학습시키는 것임

codebook 안의 모든 엔트리 골고루 사용하게 유도하는 loss.
특정 code 만 계속 사용하면 overfitting 될수도 있으니까 다양한 code 가 골고루 쓰이도록 강제하는 loss
→ 이 과정에서는 음성 인풋으로 정답 찾는 contrastive learning 하고, 학습된 소리 representation 으로 label 붙이는 fine-tuning 진행
Fine-Tuning
문자, 음소 예측(TIMIT 나 Libri-Speech 데이터를 이 단계에서 사용)
CTC Loss 사용하고, 이를 최소화 하는 방식으로 학습 (입력 시퀀스와 출력 시퀀스 길이 다를 때 align 없이 학습할수 있도록 해줌)
시간 정보가진 인풋과 - 문자 특징 가짓 아웃풋을 다루니까 시퀀스 길이가 다름 → CTC Loss 사용
Labeled 데이터를 인위적으로 다르게 해서 적은 labeled 데이터에도 잘 작동하는지 확인
TIMIT 데이터셋(5시간 분량 정밀 음소 레이블된 오디오) 도 사용해서 phoneme recognition fine-tuning 적용
마스킹 비율은 약 49%
Feature Encoder 구조
Transformer 구조
학습 환경
Context Network 위에 랜덤 초기화된 선형 레이터 추가
디코딩 (Decoding) 방식
→ LM 쓰는 이유 : Fine-Tuning 후 소리로만 봐서 애매한 부분을 Language Model 문맥으로 보완하기 위해 Language Model 필요
라벨이 매우 적은 상황에서 pre-trained 모델 평가함 → Unlabled 데이터로 학습된 representation (feature vector) 이 적은 리소스 상황에서도 잘 작동하나 확인
즉, 극소량 labeled data 에서도 엄청 효과적

매우 적은 labeled data (10분) 만으로도 노이즈 섞인 데이터 8.2% 까지 낮은 WER 달성
Unlabeled → Fine-Tuning 만으로도 좋은 성능 나온다
이번에는 labled data 가 많은 경우 실험 (960시간)
Self-Supervised Pre-training 은 labeled 많을때도 성능 좋음

Phoneme Recognition(음소 인식) 을 TIMIT 데이터셋에 적용했을때
이때 labeled phoneme 데이터만 사용

PER 기존 wav2vec 1.0 보다 훨씬 좋은 성능 (Phoneme Error Rate)
어떤 설계가 성능에 가장 큰 영향을 미쳤는지
입력을 quantization 하지 말고 연속 유지해야 WER 낮음
continuous input + quantized targets 구조가 가장 WER 낮았음
단 10분의 labeled data 썼는데도 WER 4.8/8.2 (clean, other) 달성 → 오류율 매우 낮음
noisy speech 로 SOTA 달성
100 hr Librispeech setup 에서 100배 적은 labeled data 로 최고 성능 달성