본문 바로가기

TTS

Glow-TTS: A Generative Flow for Text-to-Speech via Monotonic Alignment Search

저자: Jaehyeon Kim, Sungwon Kim, Jungil Kong and Sungroh Yoon

소속: 카카오 엔터프라이즈, 서울대 Data science & AI Lab

<Motivation>

1) Vocoder에 사용된 바 있는 Glow를 TTS에 적용

  • Inference speed Tacotron2 대비 15.7배 개선. 의심의 여지 없고 토론의 여지도 없지. 누군가 언젠가는 했어야 하는 일.
  • Prosody control 여지 <-- 이 부분이 연구 관심사라서 이 부분을 discussion에서 집중적으로 리뷰할 생각

2) External aligner를 대체해 dynamic programming 기반 teacher aligner 도입

  • 초기에 모델 파라미터가 쓰레기값인 문제 때문에 쉽게 될지 의문이지만, 이론적으로는 문제 없음. 누군가 언젠가는 했어야할 일. maximum log likelihood를 cost로 두고 클래식하게 DP로 align. 토론 여지 없음.

<Summary>

Glow나 DP에 초점을 둬서 리뷰할 게 아니라서, 그 내용은 자세히 설명하지 않겠음.

$j$ to $i$ mapping은 maximum log likelihood를 만드는 alignment를 백트래킹해서 얻어지고, search space를 줄이기 위해서 network parameter $\theta$와 alignment update을 한턴씩 iterative하게 하는 트릭을 씀.

+ DP를 쓰면 이전 프레임의 폰과 같거나 그 다음 폰과 매칭되므로 monotonous 문제가 자동으로 해결됨

 

$i$: text index

$j$: frame index

$z$: latent variable assumed to follow Gaussian distribution

$x$: Mel feature

  • $f_{enc}$
    • $c_i$ -> $\mu_i$, $\sigma_i$
  • Sampling from prior
    • $\mu_i$, $\sigma_i$ -> $z_j$
  • $f_{dec}$
    • $z_j$ + speaker id -> $x_j$
    • 수식적으로 더한다는게 아니라, decoder의 모든 block에 speaker embedding 정보를 입력.

<Discussion>

  • $z$ sampling할 때와 encoder에서 $z$의 stat을 뽑을 때 speaker-independenet하게 이루어진다는 것이, prosody control과 음색에 어떤 영향을 끼칠까?
  • $z$ distribution을 parameterize하는 방법을 통해서 prosody를 control할 수 있을까?
    • 본문에 보면 음역대와 액센트 패턴 등을 컨트롤할 수 있다고 되어 있는데, 그래프를 frequency 도메인에서 변하는 그림만 올려서 에너지는 되는지 모르겠는데, 피치만 되고 에너지는 안될 이유는 딱히 없어보임
  • 음색 모델링에 활용될 수 있을까?
    • 이 부분에 대해서도 Voice conversion (VC)  항목을 둬서 다루고 있긴 한데, decoder에서 $z$을 그대로 두고 speaker embedding만 바꿨을 때 합성음의 음역대가 달라진다는 내용을 VC 항목에서 다루고 있다. VC에서 음역대가 중요하긴 하지만 이 논문에서 언급한 것만 가지고 VC가 된다고 말하기는 어려울 것 같다.

<본문에 Discussion 관련된 부분>

  • $z=\mu+\epsilon*T$, where $\epsilon~N(0,1)로 샘플링을 대체해서 실험
    • 모델 설계 때 encoder가 $\sigma$까지 예측하게 만들었었는데, 이 값을 예측치 대신 임의의 값으로 컨트롤함.
    • $\epsilon$을 컨트롤 했을 때: speaking style 변화가 생김
    • $T$를 컨트롤 했을 때: pitch 의 변화가 생김

$T$를 1 이하로 낮췄을 때, 음역대가 좁아졌다. variance가 좁아지니까 음역대가 좁아지는게 뭔가 직관적으로는 그럴싸하긴 한데.

그리고 이 frequency plot으로는 pitch contour 상의 변화만 알 수 있는데, 에너지 상의 변화도 있는 건지, 아니면 없어서 pitch만 plot한 건지 의문이다. Duration이야 뭐, duration predictor를 쓰니까 scaler 곱해서 자연스럽게 일괄적으로 늘이거나 줄일 수 있고.. duration pattern을 변화시킬 수는 없겠지만.. (말의 리듬감이 방언 마다 달라지는 것)