제목: Neural Speech Synthesis with Transformer Network
저자: Naihan Li, Shujie Liu, Yanqing Liu, Sheng Zhao, Ming Liu, Ming Zhou
소속: University of Electronic Science and Technology of China, Microsoft Research Asia, Microsoft STC Asia, CETC Big Data Research Institute
발표: AAAI 2019
논문: https://arxiv.org/abs/1809.08895
오디오샘플: https://neuraltts.github.io/transformertts/
- Transformer TTS
- Tacotron2[Shen18]이 좋긴 한데, 여기에 사용되는 RNN모듈이 좀 옛날거임. 이를 (더 최신식) Transformer로 바꿔봤음.
- 그렇게 해보니 훈련도 더 빨리 되고(4.25배), 오디오 품질도 살짝 더 올라갔음.
Story
요즘 성능이 좋은 많은 Neural TTS시스템들은 encoder-decoder 방법론을 따름. 여기에 RNN계열의 네트워크 또한 많이 사용되고 있는데 이런 sequential한 모델은 병렬처리도 어렵고 여러 스텝을 넘어선 정보들은 활용이 어렵다는 단점이 있었음. 이때 RNN계열의 모델의 단점을 해결하기 위해 Transformer[Vaswani17]가 지구에 나타났음. 원래는 기계번역 분야에 적용되었지만 왠지 TTS에도 활용할 수 있을 것 같음. 이를 잘 활용하면 속도도 더 빠르게, 그리고 long range dependency도 다룰 수 있을 것 같음. 한번 해보겠음.
Neural TTS with Transformer
RNN대신 Transformer를 사용하면 크게 두 가지 장점이 있음. 먼저 훈련할 때 (recurrent 요소가 없기 때문에) 병렬화할 수 있음. 그리고 self attention의 존재로 인해 모든 시퀀스에 global적인 context를 고려할 수 있음. 따라서 long range dependency를 모델링 할 수 있음. TTS에서는 특히 prosody등을 모델링 할 때 처럼 문장 전체에 대한 정보가 필요할때가 많음. 따라서 Transformer는 좋은 선택이 될 수 있음.
이 논문에서는 기본적으로 Tacotron2[Shen18]와 유사한 모델을 사용함. 고로 컴퍼넌트들은 유사한 형태로 되어 있지만 Tacotron2에서 사용한 LSTM 모듈이 모두 Transformer 형태로 바뀐 차이가 있음. 전체적인 구조는 아래와 같음.
Text-to-Phoneme Converter
하나의 캐릭터가 어떻게 다양하게 발음되는지 네트워크가 스스로 학습하면 좋겠지만, 현실적으로 (데이터 부족등으로 인해) 어려운 문제임. 따라서 여기서는 별도의 rule system을 만들어서, 먼저 텍스트를 phoneme으로 변경하고 인풋으로 사용함.
Scaled Positional Encoding
스피치에도 당연하게 포지션 정보가 함께 들어가야 함. 바닐라 Transformer 에서 제안한 형태와 동일.
그런데 NMT와의 차이가 하나 있는데, NMT은 어차피 소스와 타겟이 동일한 language space안에 있는데 반해, TTS에서 소스는 텍스트, 타겟은 멜스펙트로그램임. 따라서 fixed positional encoding은 적절하지 않을 수 있음. 따라서 positional encoding에 웨이트를 곱하고 이를 같이 훈련을 통해서 구함.
Encoder Pre-net
Tacotron2와 동일하게 인풋 데이터는 3개의 레이어를 갖는 CNN으로 되어 있는 pre-net을 통과함. 이로서 좀 더 긴 context를 모델링할 수 있음. 거기에 더해서 마지막 ReLU 액티베이션 후에 linear projection을 더해서 prenet의 결과를 PE의 스케일을 맞추게 됨($[0, +\infty] \rightarrow [-1, 1]$)
Decoder Pre-net
디코더의 인풋으로 들어오는 멜스펙트로그램도 두개의 FC 레이어(실험결과 256 유닛이 좋았음)을 통과하여 phoneme의 임베딩과 유사하게 변형됨. 이렇게 되면 <phoneme, mel frame> 쌍이 제대로 만들어져서 attention을 계산할 수 있게 됨. 여기에서도 동일하게 마지막에 linear projection을 더해서 PE와 스케일을 맞춤.
Encoder
앞서 말한대로 Tacotron2에서 bi-directional RNN이었던 부분을 Transformer로 대체함. 이로서 원래는 하나의 attention만 사용했던 것에 반해 여러 attention을 사용함으로써 더욱 다양한 subspace를 이용할 수 있게 됨. 또한 전체 시퀀스의 global context를 고려할 수 있게 되는데, 이는 문장이 긴 경우 prosody등을 잘 모델링하는데 핵심적으로 작용함. 거기에 오리지널 RNN보다 학습도 더 빠르다는 장점까지 있음.
Decoder
역시 Tacotron2의 location-sensitive attention을 이용한 RNN을 Transformer로 대체함. 따라서 Encoder에서 부분에서 설명한 장점을 갖는 동시에, encoder의 hidden state에 대해서도 multi-head attention을 사용하기 때문에 더욱 좋은 context vector를 생성할 수 있음. 저자들은 기본 dot product를 location sensitive한 방식으로 바꾸어도 보았는데 훈련시간이 두배로 걸리고 메모리 문제가 발생했다고 함.
Mel Linear, Stop Linear, Post-net
나머지 컴포넌트들은 Tacotron 2과 거의 유사함. 단 문장이 언제 끝나는지를 예측하는 stop linear projection에서, positive sample의 수가 너무 적어서 제대로 예측이 안되는 문제를 풀기 위해서 여기에 weight(5-8)를 추가했음.
Experiment
내부 데이터인 25시간 여성 스피치 데이터를 이용했음
Training Setup: 4개의 Nvidia Tesla P100으로 훈련함. 배치사이즈를 다양하게 하여 GPU를 하나로 훈련시켰을 때는 결과가 별로였는데, 배치 사이즈를 더 크게 하고 여러 GPU를 사용하니 제대로된 결과를 만들었음.
Text-to-Phoneme Conversion and Pre-process: Tactron2에서는 캐릭터 시퀀스를 입력으로 받는 반면, 여기서는 text-to-phoneme 변환을 통하여 pre-normalized phoneme 시퀀스를 입력으로 받음. 이렇게 하면 잘못된 발음 문제등이 크게 감소하게 됨.
WaveNet Settings: 제안하는 모델에서는 멜을 조건으로 받는 WaveNet을 같은 데이터로 훈련하여 보코더로 사용함. 좀 더 자세하게는 2개의 QRNN 레이어와 20 dilated 레이어를 사용함.
Training Time Comparison: 병렬로 훈련을 하면 얼마나 빨라질 수 있을까? Tacotron2과 비교한 결과 4.25 배정도 더 빠르게 훈련이 가능했음. 즉 Tacotron2에서는 훈련을 한 스텝할 때 1.7s정도 걸렸는데 여기에서는 0.4s정도 걸림. 하지만... 제안한 모델에서의 파라미터는 Tacotron2에 비해 두 배 정도 많음. 따라서 훈련하는 데에는 3일가량 (Tacotron2는 4.5일) 걸렸음.
Evaluation
랜덤으로 총 38개의 예제를 골라 20명의 네이티브 영어 스피커에게 MOS를 측정하게 했음.
동점이 나와버렸음. 실망했을 거임. 그래서 다음으로 Tacotron2와 제안하는 모델의 결과 딱 두개만 놓고 비교를 하게 했음. 즉 Comparison mean option score (CMOS). 두 개를 들려주고 누가 더 나음? 을 [-3, 3](인터벌 1)로 측정한 결과 제안한 모델의 점수가 (살짝) 더 높았음!
다음으로 멜 스펙트로그램을 비교해보겠음.
가장 마지막 모델은 레이어를 3개 (원래는 레이어를 6개) 쓴 모델. 레이어의 수도 중요했고, 제안한 모델이 디테일이 좀 더 살아있는 결과를 만들어냈음.
Alation Studies
Re-centering Pre-net's Output: encoder와 decoder 둘다 pre-net에서 나오는 인풋을 추가적인 linear projection을 해서 positional embeddings와 맞춰주는 부분이 있음. 만약 이 부분을 빼 버리면 결과가 (약간) 더 안좋게 나왔음.
Different Positional Encoding Methods: Positional Encoding을 할 때 파라미터 알파를 곱해 encoder와 decoder각각 다른 스케일을 갖게 하였음. 아래는 훈련시 변화하는 파라미터 알파의 값을 보여줌.
즉 정말 둘다 다른 스케일을 갖도록 훈련이 되었음. 그리고 이렇게 스케일링을 하는게 고정된 PE보다 더 좋은 결과를 보여주었음.
Model with Different Hyper-Parameter: 원래 Transformer 모델은 6개의 레이어로 되어 있고 8개의 head를 가짐. 만약 이 숫자를 변경하면 어떻게 될까? 먼저 6레이어를 3개로 줄이면,
결과가 안좋아짐. 레이어가 늘어날 수록 결과를 점점 refine하는 결과를 얻을 수 있음(위에 멜스펙트로그램을 통해서도 알 수 있음). head수도 8개에서 4개로 줄이자,
역시 결과가 안 좋아짐. 물론 레이어수나 head수를 줄이면 훈련 시간은 줄어들긴 했지만.
Transformer는 (예상대로) TTS에도 좋은 모델이었음.
- [Vaswani17] Vaswani, A. Shazeer, N. Parmar, N. Uszkoreit, J. Jones, L. Gomez, A. N. Kaiser, Ł. and Polosukhin, I. 2017. Attention is all you need. In Advances in Neural Information Processing Systems, 5998–6008.
- [Shen18] J.Shen, R.Pang, R.J.Weiss, M.Schuster, N.Jaitly, Z.Yang, Z.Chen, Y.Zhang, Y.Wang, RJ S.Ryan, R.A.Saurous, Y.Agiomyrgiannakis, Y.Wu. Natural TTS synthesis by conditioning WaveNet on mel spectrogram predictions. ICASSP 2018. [논문리뷰]