https://huggingface.co/microsoft/speecht5_tts
๊ธํ๊ฒ ๋ฆฌ์์น ํ ๊ฒ์ด ์๊ฒจ์
์ ์ ๊ฐ์ ๋ฃ๊ธฐ๋ ๋ณด๋ฅ
SpeechT5 model :
- ์์ฑ ํฉ์ฑ์ ์ํด์ ํ์ธํ๋๋จ
- ๋ฐ์ดํฐ์ : Libri TTS
- ๋ฐํ๋ ผ๋ฌธ : https://arxiv.org/abs/2110.07205
- NLP ๋ชจ๋ธ ์ค ์ฌ์ ํ๋ จ๋ ๋ชจ๋ธ์ธ T5 (Text-To-Text Transfer Transformer)์์ unified-modal SpeechT5 framework๋ก ์ ์๋จ
- SpeechT5 framework: encoder-decoder network์ ์ฌ์ฏ ๊ฐ์ modal specific (์์ฑ/ํ ์คํธ) ์ /ํ์ฒ๋ฆฌ ๋คํธ์ํฌ(pre/post-nets)๋ก ๊ตฌ์ฑ
- (1) Preprocessing : ์ ๋ ฅ๋ ์์ฑ/ํ ์คํธ๋ ๋จผ์ ์ ์ฒ๋ฆฌ ๋คํธ์ํฌ(pre-nets)๋ฅผ ํตํด ์ ์ฒ๋ฆฌ๋จ
- (2) Shared encoder-decoder network : sequence-to-sequence ๋ณํ
- (3) Generate output : ๋์ฝ๋์ ์ถ๋ ฅ์ ๊ธฐ๋ฐ์ผ๋ก ํ์ฒ๋ฆฌ ๋คํธ์ํฌ(post-nets)๊ฐ ์์ฑ/ํ ์คํธ output์ ์ถ๋ ฅ (ํ์ฒ๋ฆฌ)
- ๋ผ๋ฒจ ์๋ ํฐ ๋ฐ์ดํฐ์ ํ์ฉ : SpeechT5๋ ๋ผ๋ฒจ๋ง์ด ์๋์ด ์๋ ๋ง์ ์์ ์์ฑ ๋ฐ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ ํ๋ จ๋จ. ์ด๋ฌํ ๋ฐฉ์์ ๋ชจ๋ธ์ด ๋ค์ํ ์ ํ์ ๋ฐ์ดํฐ์์ ์ ์ฉํ ํน์ฑ๊ณผ ํจํด์ ์ค์ค๋ก ํ์ตํ ์ ์๋๋ก ํฉ๋๋ค.
- Unified modal representation : ๋ชจ๋ธ์ ์์ฑ๊ณผ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ ์ฒ๋ฆฌํ ์ ์๋ ๋จ์ผ ํตํฉ ํํ์ ํ์ตํ๋ ๊ฒ์ ๋ชฉํ๋ก ํจ. ์ด๋ ๋ ๋ชจ๋ฌ๋ฆฌํฐ ๊ฐ์ ๊ณตํต๋ ์๋ฏธ์ ํน์ฑ์ ํ์ ํ๊ณ ํ์ฉํ ์ ์๊ฒ ํจ.
- Cross-modal vector quantization approach : ์์ฑ๊ณผ ํ ์คํธ ๋ฐ์ดํฐ๋ฅผ ํตํฉ ์๋ฏธ ๊ณต๊ฐ ๋ด์์ ์ ๋ ฌํ๊ธฐ ์ํ ๊ธฐ์ , ์ด ๋ฐฉ์์ ์ธ์ฝ๋์ ๋์ฝ๋ ์ฌ์ด์ ์์นํ๋ ์ ์ฌ ์ ๋์ ํตํด ์์ฑ ๋ฐ ํ ์คํธ์ ์ํ๋ฅผ ์๋ ๊ฒ์ ํฌํจํจ. ์ด๋ ๋ชจ๋ธ์ด ๋ ๋ชจ๋ฌ๋ฆฌํฐ ์ฌ์ด์์ ๋ณด๋ค ํจ๊ณผ์ ์ผ๋ก ์ ๋ณด๋ฅผ ์ ๋ฌํ๊ณ ๋ณํํ ์ ์๊ฒ ํจ.
ํ์ธ ํ๋ ํธ์ฆ์จ ์ค์ต (ํ๊น ํ์ด์ค ๋ชจ๋ธํ์ด์ง ์ ๊ณต)
[ Load the model ]
- from transfomers import SpeechT5Processor, SpeechT5ForTextToSpeech
- ๋ฌธ์์ฒ๋ฆฌ : SpeechT5Processor ( SpeechT5FeatureExtractor + SpeechT5Tokenizer )
- ๋ชจ๋ธ : SpeechT5ForTextToSpeech ( ํธ๋์คํฌ๋จธ ๋ชจ๋ธ )
[ Dataset for fine-tuning ]
- ํ์ฌ SpeechT5๋ ์์ด ์์ฑ์ผ๋ก๋ง train์ด ๋์ด์์
- VoxPopuli๋ผ๋ ๋ฐ์ดํฐ์ : ์ค๋์ค-ํ ์คํธ 15๊ฐ ๊ตญ์ด ์คํผ์น ๋ฐ์ดํฐ ์ ๊ณต
- ์ฌ๊ธฐ์ Dutch๋ง ๋ฝ์์ fine-tuning์ ๋ชฉํ๋ก ํจ (20,968๊ฐ์ธ๋ฐ ์ด ์ ๋๋ฉด ์ถฉ๋ถํ ๊ฐฏ์)
- cf ) VoxPopuli๊ฐ์ ASR(automatic speech recognition) dataset์ด ๊ผญ tts training์ ์ํ ์ต์ ์ ๋ฐ์ดํฐ์ ์ธ ๊ฒ์ ์๋. ASR ๋ฐ์ดํฐ์ ์ด ์ ๋จนํ๋ ค๋ฉด ์ค๋์ค์ ๋ ธ์ด์ฆ ๋น์จ์ด ์ ์์ง.. ๋ฑ์ด ์ค์ํ ์์์. ๊ทธ๋ฐ๋ฐ ์ฌ๋ฌ ๊ตญ์ด, ์ฌ๋ฌ ๋ฐํ์๊ฐ ๋ค ํฌํจ๋์ด ์๋ tts dataset์ผ๋ก ๊ด์ฐฎ์๊ฒ ASR dataset๋งํ๊ฒ ์๋ค๊ณ ํจ
- ์ค๋์ค ๋ฐ์ดํฐ์๋ 'sampling rate'๋ผ๋ ๊ฒ์ด ์๋๋ฐ ๊ฐ๋ตํ ์ค๋ช ํ์๋ฉด 1์ด์ ๋ช ๋ฒ ์ํ๋งํ๋? ๋ฅผ ์ ์ํ๋ ๊ฐ๋ ์. Speech T5์ ๊ฒฝ์ฐ์๋ 16kHz๋ก ์ค์ ํด์ผ ํจ.
- Dataset ๊ตฌ์กฐ :
[ Clean up the text ]
- ํ์ฌ SpeechT5๋ ์์ด ์์ฑ์ผ๋ก๋ง train์ด ๋์ด์๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ์๋กญ๊ฒ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ์ ์ SpeechT5Tokenizer vocabulary (ํ์ฌ vocab size 79)์ ์๋ ๋ฌธ์๋ค์ด ํฌํจ๋์ด ์์ ๊ฑฐ์ : ๊ทธ๋์ ์ด๋ฐ ๊ฒ๋ค์ <unk> token์ผ๋ก ์ถ๊ฐํด์ผํจ
- dataset์ ํ์ฌ raw_text๊ฐ ์๊ณ normalized_text๊ฐ ์๋๋ฐ normalized_text๋ ์ฝ์ด ๋ฑ์ ๋ฌธ๋ฒ์ ์ผ๋ก ๊ณ ์ณ๋๊ฑฐ๋, ์ซ์๋ฅผ ๋ฌธ์๋ก ๋ฐ๊ฟ๋๊ฑฐ๋(18์ eighteen), ๋๋ฌธ์๋ฅผ ๋ชจ๋ ์๋ฌธ์๋ก ๋ณํํด๋๋ ๋ฑ์ ์ ๊ทํ ๊ณผ์ ์ด ๊ฑฐ์ณ์ง text์ด๋ค.
- normalized_text์์ ์๋ speecht5tokenizer vocabulary์ ์๋ ๋ฌธ์๋ค์ ๋ฐ๊พผ๋ค
[ Speakers ]
- VoxPopuli ๋ฐ์ดํฐ์ ์ multi-speaker dataset์
- ๋ฐํ์์ ๋ฐ๋ผ ๋ฐํ ๋ฐ์ดํฐ ๊ฐฏ์๋ฅผ ์นด์ดํธํด๋ณด๋ฉด ๋ฐํ์์ 1/3 ์ ๋๋ 100๊ฐ ์ดํ๋ก ์ํ์ ๊ฐ๊ณ ์์์ ์ ์ ์์
- ๋๋จธ์ง ํ 10๋ช ์ ๋๊ฐ ๋๋ถ๋ถ์ ์ํ (500๊ฐ ์ด์์ฉ), ๊ทธ๋์ ํ์ฌ ์ํ ์ค์ 100~400๊ฐ์ ์ํ๋ค์ ๋งํ๋ ๋ฐํ์๋ก ๋ฐ์ดํฐ๋ฅผ ๊ณ ๋ฆ
(๊ทธ๋ฌ๋ฉด ๋ฐํ์๊ฐ 42๋ช , ์ํ ์๋ 9973๊ฐ ๋จ์ : ์ ๋ฐ ๋ ๋ฆฌ๊ธด ํ๋๋ฐ ์ถฉ๋ถํ๋ค๊ณ ํ๋จ)
- ๋ฐํ๊ธธ์ด๊ฐ ๋๋ฌด ๊ธด ์ํ๋ ์ง์ฐ๋ฉด ์ข์ (์ฌ๊ธฐ์ ์๋ต)
[ Speaker Embeddings ]
- ๋ชฉ์ : TTS model์ด multiple speakers๋ค์ ์์ฑ์ ๊ตฌ๋ถํ๋๋ก ํ๋ค.
- ๋ฐฉ๋ฒ : ๋ฐํ์๋ณ๋ก embedding์ ๋ง๋ ๋ค.
- ์ด๋ป๊ฒ? : SpeechBrain์ spkrec-xvect-voxceleb model ์ด์ฉ : input์ผ๋ก ์ค๋์ค ํํ์ ๋ฐ์ผ๋ฉด output์ผ๋ก 512 ํฌ๊ธฐ์ ๋ฒกํฐ๋ฅผ ๋ด๋ฑ์
- 'create_speaker_embedding' ํจ์ ๊ตฌ์ฑ (input : waveform / output : speaker_embeddings)
- cf ) ์ฌ์ค ์ ๋ชจ๋ธ์ ์์ด ๋ฐ์ดํฐ์ ์ผ๋ก ํ์ต๋ ๋ชจ๋ธ์ด๋ผ dutch ๋ฐ์ดํฐ์ ์ผ๋ก ํ์ต๋ X-vector ๋ชจ๋ธ์ ์ฌ์ฉํ๋ค๋ฉด ๋ ์ข์ ๊ฒ
[ Preparing the dataset ]
- 'prepare_dataset' ํจ์ ๊ตฌ์ฑ : "SpeechT5Processor"๋ฅผ ์ด์ฉํด์ input text๋ฅผ ํ ํฐํ, target audio๋ฅผ log-mel spectrogram์ผ๋ก ๋ณํ
- input : ์์์ ์ค๋นํ dataset (Dataset ๊ตฌ์กฐ ์ฌ์ง ์ฐธ๊ณ )
- output : 'input_ids' (input text๊ฐ ํ ํฐํ๋ ๊ฒ) / 'speaker_embeddings' (๋ฐํ์ ์์ฑ ์๋ฒ ๋ฉ๋ ๊ฒ) / 'labels' (target spectrogram)
- TTS๋ processor + model + vocoder์ ์ผ๋ จ์ ๊ณผ์ ์ ๊ฑฐ์น๋๋ฐ, ์ฌ๊ธฐ์ ์์ output์ 'labels'(๋ฉ์คํํธ๋ก๊ทธ๋จ)์ vocoder์ ๋๋ฆฌ๋ฉด ์๋์ ์ค๋์ค๊ฐ ์์ฑ๋๋ค.
- SpeechT5HifiGan (HiFi-GAN vocoder) ๋ก๋ํด์ ๋ณด์ฝ๋๋ก ๋๋ฆฌ๋ฉด ์์ฑ์ด ๋ค๋ฆผ
- ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ SpeechT5 model์ maximum input length๊ฐ 600 token์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฑฐ๋ณด๋ค ๋๋๊ฒ์ ์ ๊ฑฐํด์ค์ผ ํจ. (ํธ์ฆ์จ์์๋ ๋ฐฐ์น ์ฌ์ด์ฆ๋ฅผ ๋ ํฌ๊ฒ ๋ง๋ค๊ธฐ ์ํด์ 200 token ๋๋ sample๋ค์ ๋ชจ๋ ์ ๊ฑฐํจ : ์ต์ข sample 8259๊ฐ ๋จ์)
[ Collate Function to make batches ]
- ํจ๋ฉ ํ ํฐ์ผ๋ก ํจ๋ฉ
- spectrogram label๋ก๋ ํจ๋ฉ๋ ๋ถ๋ถ์ '-100'์ผ๋ก ๋์ฒด (์ดํ loss ๊ณ์ฐ์ ๋ฌด์๋จ)
[ Training ]
- model checkpoint ๋ด huggingface repo๋ก push (์ด๊ฑฐ ๊ณ์ ์๋ฌ๋์ ๋๋ฒ๊น ํด์ผํจ)
- Huggingface 'Trainer' ํด๋์ค ์ด์ฉ
'Study > ๋ฅ๋ฌ๋' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Batch Normalization (0) | 2023.12.19 |
---|---|
Regularization (0) | 2023.12.17 |
Pytorch Tensorboard (0) | 2023.12.12 |
ํ์ดํ ์น (0) | 2023.12.11 |
Weight Initialization (1) | 2023.10.22 |