목록으로
Text-to-Speech (TTS) Fine-tuning | Unsloth Documentation
Blog2025.06.01

Text-to-Speech (TTS) Fine-tuning | Unsloth Documentation

요약

Unsloth는 TTS 모델을 특정 데이터셋, 사용 사례 및 원하는 스타일과 톤에 맞게 Fine-tuning하여 다른 구현체보다 1.5배 더 빠르고 50% 적은 메모리로 음성 복제 및 스타일 적응을 가능하게 합니다.
Zero-shot 클로닝이 톤은 포착하지만 페이싱과 표현이 부족하여 부자연스러운 반면, Fine-tuning은 Orpheus-TTS와 같은 모델로 훨씬 정확하고 사실적인 음성 복제를 제공합니다.
Fine-tuning을 위해서는 오디오 클립과 해당 스크립트로 구성된 데이터셋이 필요하며, Hugging Face Datasets 라이브러리 또는 사용자 정의 데이터셋을 사용하여 LoRA 16-bit 방식으로 훈련할 수 있습니다.

상세 내용

본 문서는 Unsloth 라이브러리를 활용하여 TTS(Text-to-Speech) 모델을 fine-tuning하는 과정을 상세히 설명합니다.

1. TTS 모델 Fine-tuning의 목적 및 Unsloth의 역할

Fine-tuning은 TTS 모델을 특정 데이터셋, 사용 사례 또는 원하는 스타일과 톤에 맞춰 customize하는 것을 목표로 합니다. 이는 음성 복제(voice cloning), 말하기 스타일 및 톤 적응, 새로운 언어 지원, 특정 작업 처리 등 다양한 기능을 가능하게 합니다. Zero-shot cloning은 톤만 캡처하여 페이싱과 표현이 부족하고 로봇처럼 들릴 수 있지만, fine-tuning은 훨씬 더 정확하고 사실적인 음성 복제를 제공하여 화자의 고유한 말하기 방식(속도, 구절, 음성적 특성, 운율의 미묘한 차이)을 담아낼 수 있습니다.

Unslothtransformers 호환 TTS 모델을 fine-tuning할 수 있도록 지원하며, Flash Attention 2를 통해 기존 구현보다 1.5배 빠르게, 50% 적은 메모리로 학습할 수 있는 장점을 제공합니다. Sesame-CSM (1B), Orpheus-TTS (3B), Spark-TTS (0.5B), Llasa-TTS (1B), Oute-TTS (1B) 등의 TTS 모델과 Whisper Large V3 (STT) 모델을 지원하며, transformers 호환 모델이라면 현재 notebook이나 upload가 없더라도 지원됩니다. output duration이 10초로 제한될 경우, max_new_tokens 값을 기본값인 125보다 높게 설정하여 더 긴 출력을 생성할 수 있습니다.

2. TTS 모델 선택 및 로딩

일반적으로 낮은 latency와 빠른 inference를 위해 3B 파라미터 미만의 작은 모델이 선호됩니다. 주요 예시로는 Sesame-CSM (1B)Orpheus-TTS (3B)가 있습니다.

* Sesame-CSM (1B): base model로, 각 화자에 대한 audio context가 있어야 성능이 좋습니다. fine-tuning 시 더 많은 compute 자원이 필요합니다. speaker ID 0번을 사용하는 경우 음성 일관성이 떨어질 수 있으며, 이는 base model이 고정된 음성 정체성을 가지지 않기 때문입니다. 일관된 음성을 얻으려면 몇 개의 참조 오디오 클립이나 이전 발화를 contextual example로 제공해야 합니다. speaker ID는 주로 대화 내에서 일관성을 유지하는 데 도움을 줍니다.
* Orpheus-TTS (3B): 대규모 speech corpuspre-trained되었으며, laughs, sighs와 같은 감정적 신호를 내장하여 사실적인 음성 생성에 탁월합니다. architecture 덕분에 사용 및 학습이 용이하며, llama.cpp를 통해 export할 수 있어 다양한 inference engines와 호환성이 좋습니다. vocoder가 필요 없으며 audio tokens를 직접 출력합니다.

모델 로딩 시, 음성 모델이 일반적으로 크기가 작기 때문에 LoRA 16-bit 또는 full fine-tuning (FFT)을 통해 학습할 수 있으며, 이는 더 높은 품질의 결과를 제공할 수 있습니다. loadin4bit=Falseload_in_4bit = FalseLoRA 16-bit 학습을 활성화하며, 메모리 제약이 크지 않다면 4-bit QLoRA보다 더 나은 학습 정확도를 제공합니다.

3. 데이터셋 준비

최소한 TTS fine-tuning 데이터셋은 오디오 클립과 해당 transcript (text)로 구성됩니다. Elise 데이터셋(MrDragonFox/Elise - 감정 태그 포함, Jinsaryko/Elise - 기본 버전)이 예시로 사용됩니다. 데이터셋은 audio (waveform)text (transcription) 필드를 포함해야 합니다.

* 데이터셋 구성: 오디오와 텍스트 쌍으로 구성됩니다.
* 특수 태그: Orpheus<laugh><laugh>, <chuckle><chuckle>, <sigh><sigh>, <cough><cough> 등과 같은 태그를 지원합니다. 이 태그들은 꺾쇠괄호(<><>)로 묶여 모델의 tokenizer에 의해 special tokens로 처리되며, 학습 중 모델은 이 태그들을 해당 오디오 패턴과 연관 짓게 됩니다. 데이터셋에 이러한 태그가 없는 경우, 오디오에 해당하는 표현이 있는 곳에 수동으로 태그를 추가할 수 있습니다.
* 커스텀 데이터셋: 오디오 파일(WAV/FLAC)과 transcript를 담은 CSV 또는 TSV 파일을 사용하여 준비할 수 있습니다. Hugging Face Datasets 라이브러리의 load_dataset 함수를 통해 로드하며, datasets.Audio 기능을 사용하여 on-the-fly로 오디오 데이터를 로드할 수 있습니다.
* 정규화: transcripttokenizer가 인식할 수 없는 비정상적인 문자가 없도록 정규화해야 합니다(감정 태그는 예외). 모든 오디오는 모델이 예상하는 대상 샘플링 속도(예: Orpheus의 경우 24kHz)로 일관되게 resample되어야 합니다.
* 다중 화자 데이터셋: 이 가이드에서는 다루지 않지만, 다중 화자(multi-speaker) 데이터셋의 경우 speaker ID token을 텍스트에 포함하거나 별도의 speaker embedding 접근 방식을 사용할 수 있습니다.

4. 데이터 전처리 및 Fine-tuning 과정

fine-tuning을 위해 입력 데이터를 준비해야 합니다. Orpheusdecoder-only LLM으로 오디오를 출력하므로, 텍스트를 입력(context)으로, 오디오 token IDslabels로 사용합니다. Orpheuspre-training은 오디오를 개별 tokens (audio codec)로 변환하고, 선행 텍스트가 주어졌을 때 이 tokens를 예측하도록 모델을 학습시키는 과정을 포함했을 가능성이 높습니다. 새로운 음성 데이터로 fine-tuning할 때도 각 클립에 대한 오디오 tokens를 얻어야 합니다.

* 오디오 토큰화: Unsloth가 모델의 processor를 통해 오디오를 자동으로 tokensencode할 수도 있지만, 그렇지 않은 경우 Orpheus 저장소에서 제공하는 encode_audio 함수를 사용하여 오디오를 token IDs 시퀀스로 수동 encode해야 합니다. 단순히 텍스트 tokens만 사용하는 것으로는 모델이 실제 오디오를 학습하지 못하며, 오디오 패턴과 일치해야 합니다.

Trainer 설정을 통해 num_train_epochs 또는 max_steps를 지정하여 학습을 시작합니다. perdevicetrainbatchsize>1per_device_train_batch_size > 1은 다중 GPU 설정에서 오류를 유발할 수 있으므로, 단일 GPU(CUDAVISIBLEDEVICES=0CUDA_VISIBLE_DEVICES=0 등)를 사용하거나 적절히 조정해야 합니다. 학습 중 logging_steps 설정에 따라 loss 로그를 확인할 수 있습니다. Unsloth의 최적화 덕분에 표준 Hugging Face 학습보다 빠르게 진행됩니다.

5. Fine-tuned 모델 저장

학습이 완료되면 모델을 저장합니다. LoRA를 사용한 경우 LoRA adapter만 저장됩니다. 16bit 또는 GGUF로 저장하거나, trainer.push_to_hub()를 통해 Hugging Face Hub에 직접 upload할 수 있습니다. llama.cpp를 사용하여 GGUF 파일로 변환하여 다양한 inference 환경에서 사용할 수도 있습니다.

6. Fine-tuning과 Zero-shot 음성 복제의 비교

Zero-shot voice cloning은 30초 오디오만으로 음성 복제가 가능하다고 알려져 있지만, 이는 화자의 일반적인 톤과 음색을 캡처할 뿐 표현 범위(expressive range)를 완벽하게 재현하지 못합니다. 말하기 속도, 구절, 음성적 특성, 운율의 미묘한 차이 등 음성에 개성을 부여하는 세부 사항이 손실됩니다. Zero-shot은 다른 음성을 원하고 전달 패턴이 동일해도 괜찮을 때 유용하지만, 음성 복제는 모델의 스타일을 따를 뿐 화자의 스타일을 따르지 않습니다. 반면, LoRA와 같은 fine-tuning 방법을 통해 학습하면 화자가 말하는 방식을 진정으로 포착하여 더 개인화되고 표현력이 풍부한 음성을 생성할 수 있습니다.

원본 보기
Web
Shared by Anonymous