뉴럴넷으로 할 수 있는 게 요즘은 워낙 많긴 하지만, tts도 꽤 재미있는 주제라고 생각한다. tts에는 tacotron 같은 기본적으로 괜찮게 쓸 수 있는 모델들이 있다. 한 가지 문제는 이러한 seq2seq 모델들이 보통 mel spectrogram 위에서 동작한다는 것이다. 음파 파형에서 mel spectrogram으로 변환하는 과정에서 정보가 손실되기 때문에 mel spectrogram에서 음파로 변환하는 것은 쉽지 않다. 가장 기본적으로는 griffin-lim 알고리즘이 있다. 간단히 쓸 수 있는 방법이지만 생성되는 음성의 퀄리티가 좀 아쉽다. 이 문제 때문에 보코더를 사용하는 접근이 등장하기도 했다. 그러면 이 문제도 뉴럴넷으로 풀 수는 없을까? 가장 대표적인 방법이 wavenet일 것이다. 문제는 mel spectrogram 위에서 autoregressive하게 생성하는 스텝도 꽤 부담스러운데 wavenet은 음파를 autoregressive하게 생성해야 한다는 것이다. 이걸 해소하기 위해 등장한 것이 parallel wavenet이나 clarinet 같은 inverse autoregressive flow 기반 방법들이다. 더 나아가 waveglow 같은 방법이 등장하기도 했다. 아마 flow 기반 모델의 가장 흥미로운 적용 사례 중 하나라고 할 수 있을 것이다. 도입이 길어졌는데 이번에 본 melgan은 gan 기반 생성 모형이다. 이 모델은 gan의 특징, 즉 생성 속도가 빠르고 샘플 퀄리티가 좋다는 장점을 그대로 갖고 있다. 30층 정도의 transposed conv와 dilated conv로 구성된 심플한 모형이며 샘플 생성 속도가 기존의 방법들에 비해 10배 정도 빠르다. pix2pix와 비슷한 접근이라고 볼 수 있는데, 특징이라면 discriminator에 condition을 입력하는 대신 discriminator를 사용해 feature matching loss를 적용했다는 것, weight norm의 사용, 그리고 convolution의 커널 크기와 dilation을 세심하게 설정했다는 것이 있겠다. gan이 continuous한 output이 사용되는 영역에서는 성공적으로 적용될 수 있다는 것을 보여주는 사례가 되지 않을까 싶다. 개인적으로는 spectral norm이 잘 안 먹힌다는 것, 다른 normalization 없이 weight norm만으로 학습이 가능했다는 것도 좀 흥미로웠다
#tts #gan