“wav2vec 모델에 감정 가르치기 – 파인튜닝 실전편”
Colab에서 A100 런타임으로 돌리고, 학습된 safetensors만 GCP Bucket에 올려서 다운받는 구조로 진행할려고 했지만 데이터셋 용량이 너무 커서 그냥.. 로컬에서 진행했다..
결과적으로,
• 싱글태스크 학습은 약 14시간
• 멀티태스크 학습은 무려 40시간
그만큼 무겁고 복잡한 작업이었지만, 그 과정을 기록해두고 싶었다.
처음엔 오디오 데이터를 1초 단위로 잘라서 감정 분류를 시도했다. 하지만 테스트 결과, 이 방식엔 한계가 있었다. 그래서 결국 3초 단위로 변경하게 되었고, 그 이유는 다음과 같다.
1초는 너무 짧다. 감정은 단어 하나로 전달되기보단, 억양, 속도, 문장 끝의 처리 같은 음성적 흐름에 담겨 있다. 이런 맥락이 없으면 감정 예측이 단순 추측에 가깝게 된다.
한국어는 특히 말 끝에서 감정이 드러난다
한국어는 어미 변화가 감정 전달에 큰 역할을 한다.
예:
• “좋아요.” vs “좋아.”
• “그랬구나…” vs “그랬구나!”
이런 차이는 보통 문장의 끝부분에 드러나므로, 짧은 1초 클립은 너무 불완전했다.
3초는 생각보다 짧지만, 의도와 감정의 흐름을 담기에 충분한 길이였다.
모델 입장에서도 더 긴 문맥이 들어오면서 학습 효율과 정확도가 모두 좋아졌다.
⸻
그래서 최종적으로는 3초 길이의 오디오 클립을 기준으로 모델을 학습하고 평가하도록 설정했다.
물론 그만큼 처리해야 할 데이터가 많아졌고, 학습 시간도 증가했지만
현실적이고 자연스러운 감정 인식을 위해 꼭 필요한 선택이었다.
입력 길이: 3초 (16kHz → 48,000 샘플)
- 3초 이상일경우 3초씩 window slice 해서 각각 추론
에폭: 10
배치 사이즈: 4
Mixed Precision (FP16): 사용 안 함
14 시간 30분.. ㄷㄷ
대부분의 예측이 neutral에 편향됨
실제 사용자 음성에서 정확도가 낮음
데이터셋에서 적은 감정(label)의 예측률이 현저히 저조
다중 감정이 있어도 단일 감정만 선택 가능
유사 감정 간 구분이 어려움
softmax 점수 차이가 작아도 최고점만 선택됨
40시간 ㄷㄷ rtx 4090도 소용없다..
감정 (7개)
어노테이션
감정 강도
성별