티스토리 뷰

반응형

 

저번 시간에는 Whisper Large v3의 파인 튜닝의 시도를 했다.

 

그리고 이번 시간에는 데이터셋의 규모와, 파인 튜닝을 어떻게 했는지에 대한 기록을 남기고자 한다.

코드는 여기에서 볼 수 있다.

아무래도 하나의 환경이 아닌 여러 군데에서 사용할 데이터셋인지라, 변환한 feature를 허깅페이스에 데이터셋 형태로 올려 놓았다.

겨우 8만개 데이터셋이지만, 이 정도만 해도 다운 받는데 150GB 정도 든다. 음성 학습에 얼마나 불어나는지 알 수 있는 정보다.

 

Step은 600으로 잡았고, 평가 함수는 CER로 했다.

보게 되면 CER이 낮아졌다가 다시 올라가는 걸 볼 수 있다. 과적합이라고 생각해도 되고, 특징적인 일반화가 적용된다고 봐도 되지만, 마지막에 loss가 올라간 걸 보면 결과적으로 보면 과적합일 것이다.

최종적으로 나온 loss와 결과를 보면 이렇게 된다. 아무래도 평균을 보여주는 것 같다.

 

가장 큰 문제는 Evaluation과 Infference였는데, 예상치 못한 버그가 발생했다.

 

왜 이러는지 모르겠기에 Transformer의 이슈를 찾아보고, Whisper의 이슈도 찾아봤지만, 해결되었다는 답변만 있을 뿐 아무런 정보가 없었다. 학습 과정에서는 Collator에 다음과 같은 줄을 넣어서 해결했지만, infference에서는 그러지도 못했다.

batch["attention_mask"] = labels_batch["attention_mask"]

 

attention mask가 없으면 성능 저하가 있을 수 밖에 없다. 그렇기에 일반화 결과는 오히려 내려갔다.

 

위는 파인튜닝 Step이 300일 때 저장한 체크포인트로 만들어낸 결과이다.

Validation은 베이스라인과 똑같은 데이터를 사용했지만, 보다시피 오히려 성능이 내려간 것을 볼 수 있다.

그리고 이는 마지막 Step에서 저장한 모델도 마찬가지였다. 대략적으로 8.5% 수준

 

하지만 실제로 보게 되면 이는 띄어쓰기 정도 차인 걸 알 수 있다.

자기가 그 다이어트 한다고 이제 몸이 너무 안 좋죠
 STT 결과
자기가 그 다이어트 한다고 이제 몸이 너무 안좋죠 
원래 입력
0.03571428571428571
또 안 따라가 줄 때 이게 젊 사람 같지 않잖아요
 STT 결과
또 안 따라가줄 때 이게 젊은 사람 같지 않잖아요 
원래 입력
0.07407407407407407
이제 생선하고 나물 익게 하는데 맨날 그 반찬이 한정적이긴 해요
 STT 결과
이제 생선허고 나물 이케 하는데 맨날 그 반찬이 한정적이긴 해요 
원래 입력
0.08571428571428572
아무래도 좀 없지 않아 그런 현상이 있겠죠
 STT 결과
아무래도 좀 없지 않아 그런 현상이 있겠죠 
원래 입력
0.0
보니까 다 요가 동작이더라고요
 STT 결과
보니까 다 요가동작이더라고요 
원래 입력
0.0625
사람 맞춰야 되고 이러다 보니까 그게 또 힘들어지더라고
 STT 결과
사람 맞춰야 되고 이러다 보니까 그게 또 힘들어지더라고 
원래 입력
0.0
그래서 아휴 그런데 올케는 살이 많이 �어
 STT 결과
그래서 아휴 그런데 올케는 살이 많이 쪘어 
원래 입력
0.043478260869565216
맞어 요즘 가격도 정말 많이 싸졌어
 STT 결과
맞어 요즘 가격도 정말 많이 싸졌어 
원래 입력
0.0
무릎이 계속 아프다고 하시고 몸이 전체적으로 안 좋죠
 STT 결과
무릎이 계속 아프다고 하시고 몸이 전체적으로 안좋죠 
원래 입력
0.034482758620689655
엄마는 폐렴이 됐으면 심각했을 거야
 STT 결과
엄마는 폐렴이 됐으면 심각했을거야 
원래 입력
0.05263157894736842
10개 파일 처리 완료

 

그래서 띄어쓰기를 하지 않고 결과를 보면

결과가 어느정도 잘 나오는 걸 볼 수 있다.

 

그러나 곳곳에 오류가 생기는데, 어쩌면 파인튜닝 과정에서 데이터가 적음을 시사하는 바일 수도 있다.

0.0
그체�중주기가그렇게이렇게힘이들어요 STT 결과
그체중줄이기가그렇게이렇게힘이들어요 
원래 입력
0.16666666666666666

가끔한번씩밑에설�이너무많이깔아앉아있으니까 STT 결과
가끔한번씩밑에설탕이너무많이깔아앉아있으니까 
원래 입력
0.045454545454545456

 

그래서 일단 시도해볼 방식은 다음과 같은 3가지이다.

 

1. 데이터셋을 더 많이 늘리고 Step을 더 늘려서 학습해보기

2. Attention Mask 자체가 없이 다시 학습해보기

3. 다른 방식으로 새로운 코드를 짜서 파인튜닝해보기

 

STT 파인튜닝이 굉장히 어렵다는 건 알았지만, 확실히 긴 여정이 될 듯 싶다.

 

하지만 한 가지 긍정적인 사실은, 네이버 클로바와 같은 유료 STT 보다도 일단 성능은 좋다는 것이다.

지금아이들은그런건자녀우리학원은시대가달라 STT 결과
지금애들은그런건전혀우리하고는시대가달라 
원래 입력
0.3333333333333333

 

굉장히 오차율이 크다.

 

파인튜닝만 성공한다면 어느정도 성능이 보장될 것 같다.

일단 이번 포스팅은 여기서 마치겠다.

 

 

반응형