devmoon

FastSpeech: Fast, Robust and Controllable Text to Speech 본문

AI/논문 리뷰

FastSpeech: Fast, Robust and Controllable Text to Speech

Orca0917 2023. 7. 12. 02:22

https://arxiv.org/abs/1905.09263

 

FastSpeech: Fast, Robust and Controllable Text to Speech

Neural network based end-to-end text to speech (TTS) has significantly improved the quality of synthesized speech. Prominent methods (e.g., Tacotron 2) usually first generate mel-spectrogram from text, and then synthesize speech from the mel-spectrogram us

arxiv.org

 

 

Abstract

FastSpeech 이전 등장하는 TTS 모델들은 공통적으로 텍스트로부터 `mel-spectrogram`을 생성한 뒤, vocoder 모델을 거쳐 raw audio를 생성하였다. 특히, mel-spectroram을 생성하는 acoustic 모델은 RNN기반 구조 또는 Transformer구조를 사용하는 auto-regressive 한 모습을 띄고 있었다. 이전 step의 출력을 다시 입력으로 사용하는 autoregressive 구조상 병렬처리가 힘들었는데, FastSpeech는 Transformer의 self-attention구조를 사용하되, non-autoregressive 하게 변형하여 Transformer-TTS보다 270배 빠른 속도로 mel-spectrogram을 생성할 수 있고 음성합성(inference)은 38배 빠르게 진행될 수 있다고 발표하였다.

 

 

 

 

1. Introduction

딥러닝을 사용한 TTS연구가 진행되면서 텍스트로부터 mel-sepctrogram을 생성하는 다양한 모델들이 발표되었다. 대표적으로 이전에 살펴보았던 Tacotorn, Tacotorn2와 Deep Voice등이 존재한다. 이런 TTS 시스템들에서는 mel-spectrogram을 생성하기 위해 autoregressive 한 구조를 갖고 있었다. 그리고 해당 구조는 다음과 같은 문제점을 야기시킨다.

 

 

 

 

1. Mel-spectrogram을 생성하는 추론시간이 오래걸린다. (Slow inference speed)
물론 RNN기반 모델들보다 CNN이나 Transformer를 사용하여 학습시간을 단축시킨 방법이 존재하지만, 생성된 mel-sepctrogram자체의 길이가 길기도 하며 여전히 이전 step의 mel-spectrogram을 필요로 한다는 문제가 있어 시간이 오래 걸린다.

 

 

2. 합성된 음성이 완벽하지 않다. (특정 단어 생략 또는 반복)
Autoregressive 한 구조에서 텍스트와 음성사이의 attention alignment를 잘못 파악하거나 잘못된 정보를 전파하게 되면 생성된 mel-spectrogram은 당연히 문제가 생길 수밖에 없다. 의외로 해당 문제는 자주 일어나며 음성을 합성하고 나서도 계속해서 마지막 단어를 반복해서 말하거나 중간 단어를 생략하는 경우도 생긴다.

 

 


3. 합성된 음성을 제어할 수 없다.
기존 autoregressive모델들은 음성을 생성할 때 텍스트로부터 하나씩 생성하는 모습을 보여주었다. 텍스트나 음성에 별도의 alignment를 직접 수정하는 부분이 존재하지 않았기에 음성재생속도를 조절하거나 운율(높낮이)을 변경하는 것들을 수행할 수 없었다.

 

 

 

 

이에 저자들은 non-autoregressive 하게 음성을 생성하는 새로운 TTS모델인 FastSpeech를 발표하였다. 주요 컴포넌트는 self-attention을 기반으로 한 feed-forward network1D-convolution으로 구성되어 있다. 특히, phoneme(음소) 보다 생성되는 mel-spectrogram의 길이가 더 긴 경우가 많은데, 해당 길이를 맞춰주는 upsampling 파트도 포함되어 있다. 덕분에 잘못된 정보가 전파되거나 attention alignment가 잘못 생기는 문제를 줄여 정확한 음성합성이 가능하다고 발표하였다. 최종적으로 성능은 위에서 말했던 것과 같이 Transformer TTS와 유사한 성능을 보이면서 mel-spectrogram 생성은 270배 빠른 속도로, 음성합성은 38배 빠른 속도로 진행할 수 있다고 한다.

 

 

 

 

2. Background

 

 

[1] Text to Speech

TTS는 초기 음성을 잘라 이어 붙이는 concatenation 방식으로 부터 시작해 통계적 추정을 하는 statistical parametric syntehsis 그리고 딥러닝을 사용한 neural network based parametric synthesis 마지막으로 end-to-end TTS 모델이 존재한다. Neural TTS 모델들은 일반적으로 mel-spectrogram을 autoregressive 하게 생성하므로 속도가 느리거나 합성된 음성에 문제가 발생할 수 있었다. 그러나 이번에 소개하는 FastSpeech는 해당 문제들을 해결하였으며 자세한 구조는 3장에서 소개한다.

 

 

 

[2] Sequence to Sequence Learning

Sequence-to-Sequence는 인코더-디코더 구조로 구성되어 있으며, 인코더는 입력을 잠재적 표현을 갖는 형태로 출력을 내보내고, 디코더는 잠재표현(벡터)을 사용해 우리가 원하는 출력의 형태로 변환하는 기능을 한다. 특히 언어번역 또는 음성인식에서는 어떤 단어끼리 매칭이 되는지, TTS에서는 어떤 텍스트와 음성이 매칭되는지 찾기 위해 attention 메커니즘을 많이 활용한다. 따라서 음성인식에서 많이 사용되는 인코더-디코더 구조는 `encoder-attention-decoder` 구조이다. 하지만 FastSpeech는 위 구조를 그대로 사용하지 않고, 병렬연산이 가능한 self-attention 기반의 `Feed Forward Network`를 사용한다.

 

 

 

[3] Non-autoregressive Sequence Generation

Non-autoregressive방식을 사용하게 되면 명시적으로 이전의 출력을 필요로 하는 의존성 관계가 사라지기 때문에 추론속도를 크게 향상할 수 있다. FastSpeech에서는 non-autoregressive방식으로 추론속도를 향상시켰을 뿐만 아니라, 외부 조절 파라미터를 두어 합성된 음성의 속도 또는 운율들을 제어할 수 있도록 하였다. Mel-spectrogram의 생성과 음성합성을 동시에 진행하는 연구도 있었지만, 해당 연구에서는 여전히 encoder-attention-decoder 구조를 사용하여 FastSpeech보다 2~3배 많은 파라미터를 필요로 하였다. 이는 학습속도를 더디게 만들고 단어가 생략되고 반복되는 문제를 야기시키게 된다.

 

 

 

 

3. FastSpeech

3장에서는 FastSpeech의 전체 구조와 각 컴포넌트들이 어떻게 구성되어 있는지를 세세하게 살펴본다. 처음에는 FastSpeech의 전체 구조인 Feed-Forward Transformer 먼저 살펴보고 세부적으로 들어가게 된다. 아래 그림은 FastSpeech의 전체구조를 보이며 오른쪽 (b), (c), (d)는 각 컴포넌트의 세부 구성요소를 보인다.

 

 

FastSpeech의 전체 구조 - Figure1 (a) / 출처: FastSpeech: Fast, Robust and Controllable Text to Speech 논문

 

 

 

3.1 Feed-Forward Transformer

FastSpeech는 Transformer에서 사용되는 self-attention에 기반한 feed-forward 구조로 만들어졌으며 이를 Feed-Forward Transformer라고 부른다. Feed-Forward Transformer는 여러 개의 Feed Forward Transformer(FFT) Block으로 구성되어 있으며 음소(phoneme)를 mel-spectrogram으로 변환해 주는 작업을 수행한다. FFT Block은 음소 쪽, mel-spectogram 쪽 각각 $N$개가 쌓여있는 형태로, 사이에는 아래에서 설명할 `length regulator`가 존재한다.

 

 

 

 

Transformer Encoder와 FastSpeech FFT Block 비교

 

 

 

FFT Block을 다시 자세히 들어가 보면 self-attention과 1D-Convolution 레이어가 존재한다. 이 중 Self-attention은 서로 다른 관점에서 정보들을 추출하기 위해 multi-head attention을 구성되어 있는 것을 볼 수 있다(3개의 화살표). Transformer Encoder와의 차이점을 보면 Feed Forward (2-layer)를 사용하지 않고 1D-Convolution을 사용했다는 것인데, 이는 문자/음소 그리고 mel-spectrogram들은 인접한 hidden state에 영향을 많이 받기 때문이라고 한다. 추가로, self-attention과 1D-convolution 연산 이후 둘 다 residual connection, layer normalization, dropout까지 적용했다.

 

 

 

 

3.2 Length Regulator

FFT Block 사이에 존재하는 `Length Regulator`는 음소의 길이와 mel-spectrogram의 길이가 일치할 수 있도록 도와주며. Length Regulator의 다른 파라미터 값($\alpha$)를 조절하여 음성의 속도나 운율을 제어하는 것도 가능하다. 일반적으로 음소의 길이가 mel-spectrogram보다 짧은데, 하나의 phoneme이 여러 개의 mel-spectrogram과 대응되도록 늘려주는 것을 이 부분에서 진행한다.

 

 

Length Regulator 예시

 

 

 

$$ \mathcal{H}_{mel} = \mathcal{LR}(\mathcal{H}_{pho}, \mathcal{D}, \alpha) $$

 

  • $d$ : 음소의 duration (음소를 얼마나 길게 발음해야 하는지)
  • $\mathcal{H}_{pho} = [h_1, h_2, \dots, h_n]$ : 음소의 hidden state 집합 (음소의 수만큼)
  • $\mathcal{D} = [d_1, d_2, \dots, d_n]$ : 음소의 duration 집합 (음소의 수만큼)
  • $\sum_{i=1}^n d_i = m$ : mel-spectrogram sequence의 길이
  • $\alpha$ : $\mathcal{H}_{mel}$의 길이를 어느 정도로 할 것인지 조절하는 파라미터 (속도 조절)

 

 

 

예를 들어, <국수>라는 텍스트를 입력으로 받는다면, 이를 음소 단위로 모두 나누어 <ㄱ, ㅜ, ㄱ, ㅆ, ㅜ>로 구분한다. 각 음소를 얼마만큼의 길이로 발음해야 하는지, 예로 첫 번째 등장하는 'ㄱ'을 2만큼 발음하고 'ㅜ'를 1만큼 발음한다면 'ㄱ'을 조금 더 길게 말하게 될 것이다. 이런 정보들을 모두 조합하여 최종 mel-spectrogram을 생성한다.

 

 

 

 

3.3 Duration Predictor

Duration predictor의 구조와 학습방법

 

 

 

이제 `3.2`에서는 음소로 나누고 각 음소를 길게 발음하여 음성의 속도를 조절할 수 있다는 것을 살펴보았다. 그렇다면, 실제로 발음을 할 때는 어느 정도의 길이로 발음을 해야 하는지의 정보 $\mathcal{D}$가 필요하다. `Duration Predictor`는 $\mathcal{D}$를 예측하는 컴포넌트이며, 1D-Convolution, ReLU, Layer Norm, Dropout으로 구성되어 있다. 학습은 mean square error(MSE)를 줄이도록 하며, 학습된 duration predictor는 음성합성을 진행하는 추론단계에서 사용된다.

 

 

 

 

Duration predictor를 학습하기 위해서는 autoregressive teacher모델이 필요한데, 해당 모델은 실제 ground truth인 음소의 duration을 알려준다. 여기서는 Transformer TTS 모델을 teacher 모델로 사용하였다. Teacher model은 학습데이터셋을 사용하여 학습된 이후, encoder - attention - decoder 구조에서 중간의 attention alignment를 추출한다. 이때 attention alignment는 self-attention이 multi-head attention으로 구성되어 있기 때문에 여러 개의 alignment가 등장할 텐데 그중 하나를 선택해야 하며 기준으로는 `focus rate` $F$가 가장 높은 것을 선택한다.

 

 

 

$$ F=\frac{1}{S}\sum_{s=1}^S \max_{1 \le t \le T}a_{s, t} $$

 

  • $S$ : ground-truth spectrograms의 길이
  • $T$ : ground-truth phonemes의 길이
  • $a_{s, t}$ : attention matrix에서 $s$행, $t$열에 존재하는 값

 

 

 

 

Focus rate로 하나의 attention alignment를 선택하였다면, 음소 duration sequence $\mathcal{D} = [d_1, d_2, \dots, d_n]$은 `duration extractor` $d_i=\sum_{s=1}^S [ \arg\max_t a_{s, t}=i]$를 사용해서 계산한다. 이는 음소의 duration에 해당하는 mel-spectrogram의 수와 동일한 값이다.

 

 

 

 


 

이렇게 FastSpeech의 전체 구성요소들을 모두 살펴보았다. 앞서 살펴보았던 TransformerTTS나 Tacotron2와 달리 비교적 간단한 구조로 구성이 되어있어서 놀랐는데, MOS 점수가 0.04점 밖에 차이 안나면서 추론속도가 270배 빠르다는 것에 다시 한 번 크게 놀랐다. 이제 아래에 참고로 달아둔 Zhengxi Liu가 PyTorch로 구현한 FastSpeech 레포지토리를 참고하면서 실제로 duration predicitor와 duration extractor가 어떻게 연산되는지 살펴보면서 다음 FastSpeech2를 준비해보고자 한다.

 

 

 

 

참고자료

  1. Li, N., Liu, S., Liu, Y., Zhao, S., & Liu, M. (2019). Neural Speech Synthesis with Transformer Network. Proceedings of the AAAI Conference on Artificial Intelligence, 33(01), 6706-6713. https://doi.org/10.1609/aaai.v33i01.33016706
  2. J. Shen et al., "Natural TTS Synthesis by Conditioning Wavenet on MEL Spectrogram Predictions," 2018 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP), Calgary, AB, Canada, 2018, pp. 4779-4783, doi: 10.1109/ICASSP.2018.8461368.
  3. Ren, Y., Ruan, Y., Tan, X., Qin, T., Zhao, S., Zhao, Z., & Liu, T. Y. (2019). Fastspeech: Fast, robust and controllable text to speech. Advances in neural information processing systems, 32.
  4. Zhengxi Liu, 2020. GitHub, Available at: https://github.com/xcmyz/FastSpeech
Comments