NEW코딩일지 · 11.05코퍼스 메인에 주장 연구실을 세웠다: 사유고2 주장 29만 개를 자동 등록하고 스파크 두 대가 반증 조건까지 검토한다
← 학습
·3분

로컬 TTS 뽑기 · 2화

로컬 TTS LoRA는 25스텝을 골랐다: 검증 손실이 좋을수록 장문 목소리가 작아졌다

문장 세 개가 이어지는 장문 샘플을 만들어 LoRA를 다시 학습했다. 검증 손실은 250스텝까지 좋아졌지만 긴 문단의 마지막 문장은 갈수록 작아졌다. 그래서 300스텝이 아니라 25스텝을 골랐다.

▸ 유튜브 자동화#fish-speech#tts#lora#checkpoint

1화의 첫 LoRA는 단문만 배워서 긴 문단을 끝까지 읽지 못했다. 이번에는 학습 데이터에 긴 샘플을 넣고, 체크포인트를 고르는 방법도 바꿨다.

장문 샘플을 새로 만들다

원인이 단문이었으니 긴 샘플이 필요했다. 여기서 긴 샘플은 쉼표로 이어 붙인 아주 긴 한 문장이 아니다. 자연스럽게 끝나는 문장 세 개가 한 호흡에 이어지는 15~25초짜리 음성이다. AI에게 이런 대본 15개를 쓰게 했다. 투자와 반도체, 검증 같은 채널 주제를 다루고, 숫자와 약어를 섞었다.

샘플은 목표 목소리로 대본 하나당 파일 하나씩 만들었다. 첫 파일을 먼저 검사해서 세 문장이 빠짐없이 인식되고 뒤로 갈수록 음량이 떨어지지 않는 것을 확인한 뒤 나머지를 같은 조건으로 만들었다.

15개, 4분 19초가 모였다. 음성 인식으로 대본과 대조해 발음이 반복해서 어긋난 3개를 뺐고, “가정을”이 “과정을”로 들리는 1개도 뺐다. 남은 11개 중 8개(2.3분)는 학습에, 3개(0.9분)는 장문 검증 전용으로 나눴다. 기존 단문 402개에 이 장문 묶음을 더해 처음부터 다시 학습했다. 같은 rank 8, 300스텝에 12분 45초가 걸렸고, 25스텝마다 체크포인트를 남겼다.

검증 손실 대신 마지막 문장 음량으로 고르다

이번에는 검증 손실만 보지 않았다. 체크포인트마다 같은 다섯 문장을 후처리 없이 생성해서 마지막 문장이 첫 문장 대비 얼마나 크게 남는지 쟀다.

체크포인트 마지막 문장 음량 (레퍼런스 포함)
기본 모델 73.5%
25스텝 67.7%
50스텝 50.5%
75스텝 46.7%
100스텝 23.4%
150스텝 8.2%

그동안 검증 손실은 250스텝 무렵까지 계속 좋아졌다. 손실이 가장 낮은 체크포인트를 고르는 평소 방식대로였다면 이번에도 망가진 모델을 골랐을 것이다. 학습이 진행될수록 짧은 문장은 더 잘 읽고 긴 문단은 더 빨리 사그라들었다. 150스텝에서 비교를 멈췄다.

세 가지를 들어 보다

고른 것은 25스텝이다. 마지막으로 세 가지를 들어 봤다.

조건 마지막 문장 음량 목표 목소리와의 화자 유사도
1. 기본 모델 + 레퍼런스 73.5% 0.816
2. LoRA 25스텝 + 레퍼런스 67.7% 0.844
3. LoRA 25스텝, 레퍼런스 없음 68.0% 0.422

2번은 들어 보니 기본 모델과 거의 같은 목소리로 괜찮았다. 이것을 생산 기본값으로 정했다. 3번은 목표 목소리가 아닌 다른 목소리가 나왔는데 나쁘지 않아서 새 목소리 프리셋으로 따로 남겼다.

솔직히 말하면 25스텝 LoRA가 목소리를 크게 바꾼 것은 아니다. 기본 모델을 거의 망가뜨리지 않을 만큼만 학습한 지점이고, 여전히 레퍼런스를 같이 넣어야 목표 목소리가 나온다. 대신 화자 유사도가 조금 올랐고, 장문에서 무너지지 않는 LoRA를 고르는 기준이 생겼다.

배운 것

검증 손실은 학습 데이터와 같은 모양의 문제만 잰다. 장문 샘플을 섞어도 검증 손실은 그 붕괴를 보여 주지 않았다. 체크포인트는 실제로 쓸 모양, 여기서는 다섯 문장짜리 문단으로 골라야 한다. 가장 늦은 체크포인트나 손실이 가장 낮은 체크포인트가 아니라, 요구를 처음 만족하는 체크포인트가 안전했다.

LoRA가 목소리를 통째로 담아 주지는 않았다. 이번 구성에서는 여전히 레퍼런스가 목소리를 잡고, LoRA는 그 위에서 조금 거드는 정도다.

다음 화에서는 이 LoRA로 실제 2분 나레이션을 만들다 만난 이음새 문제를 다룬다.

로컬 TTS 뽑기 · 전 5화

  1. 1화첫 TTS LoRA는 긴 문단에서 음량이 5%까지 무너졌다: 단문만 배운 탓
  2. 2화로컬 TTS LoRA는 25스텝을 골랐다: 검증 손실이 좋을수록 장문 목소리가 작아졌다
  3. 3화나레이션 이음새는 무음 대신 방 소리로 메웠다: 경계 튐 0.087→0.005
  4. 4화Drama3는 LoRA 없이 18초 레퍼런스로 채널 목소리를 냈다: 걸린 것은 문단 속 긴 침묵이었다
  5. 5화Drama3는 맥스튜디오 4비트에서 가장 빨랐다: 음성 1초에 0.51초, 스파크 0.85초, 5090 3.36초