리뷰해볼 논문은 Speech Resynthesis from Discrete Disentagled Self-Supervised Representations라는 논문으로 얼마전에 연구실 세미나로 발표했던 논문이다. 원래 발표하기전에 블로그에 정리하고 발표를 들어가는게 맞는 순서인데... 내가 게을러져서 발표전에 리뷰글을 못썼다... 어쨌든 이번에 준비한 논문은 간단하게 요약하자면 Discrete한 Unit들을 이용해서 Speech Synthesis를 하는 논문이다. 각 Unit간의 Disentanglement를 잘하도록해서 각각의 Unit들을 제어해서 controllable한 synthesis를 하는것이 목적. 이쯤하고 리뷰 시작해보도록 하겠다.
github : https://github.com/facebookresearch/speech-resynthesis
Introduction
1) SSL Methods의 발전과 함께 continuous하고 Discrete한 speech representation을 얻는것이 가능해짐.
2) 이러한 성공에도 불구하고 대부분은 ASR (Automatic Speech Recognition)의 관점에서만 활용되어짐.
3) 이러한 unit들은 실제 Speech Synthesis에서 잘할지 의문
4) 게다가 표현력있고 제어가능한 generation 측면에서, Speaker identity와 F0정보가 학습된 representation에 얼마나 인코딩 되어있는지도 알 수 없다.
5) 본 논문에서는 이러한 학습된 representation들을 이용 vocoder의 input으로 사용하였으며, 어떠한 spectrogram estimation도 진행하지 않는다.
Contribution
- .저자들은 고품질 synthesis를 위해서 SSL방식으로 학습한 discrete speech unit을 사용함.
- unit들의 평가를 위해 다양한 실험을 진행함 (reconstruction, voice conversion, F0 manipulation)
- 이러한 unit들을 사용해서 ultra-lightweight speech codec (해당 논문에서는 저비트율에서 동작하는 코덱을 의미함)을 만듬.
Related Work
Unsupervised speech representation에 대한 연구는 대략적으로 reconstruction과 SSL methods로 나뉘어짐.
1) Reconstruction
- Auto-encoding방식이 가장 일반적으로 사용되어짐
- encoded space에는 다양한 constraints가 주어질 수 있음.
2) SSL Methods
- latent space상에서 다음 샘플을 예측하는 CPC (Contrastive Predictive Coding) 방식과 Bert와 유사한 방식으로 Speech에 대해서 학습하는 Hubert가 존재함.
본 논문에서는 Discrete unit을 뽑기위한 encoder로 CPC, Hubert를 사용함.
3) Speech Resynthesis
- 생략
4) Speech Codec
- 생략
Method
- 논문에서 제안하는 모델의 구조는 총 3개의 Discrete unit을 사용하고 3개의 Encoder를 사용함.
- content, F0 encoder는 raw audio로부터 discrete한 representation을 추출하며 speaker identity encoder는 global한 representation을 추출함.
Encoder
1) Content Encoder
- 입력으로 speech utterance x를 사용하며, 저차원의 representation을 출력으로 냄.
- CPC와 Hubert는 Continuous한 output을 내기때문에 K-means algorithm을 사용해서 discrete unit으로 변환함.
- Discrete한 unit은 K-means algorithm에 의해서 대체된 정수값을 가지고 있음.
2) F0 Encoder
- 입력 x를 YAAPT라는 F0 알고리즘을 통해서 p를 추출함.
- p는 encoder의 입력으로 사용되며, VQVAE에 의해서 학습이 되게됨.
- 코드북에 의해서 출력 값이 대체되며, 대체된 코드벡터들이 decoder의 입력으로 사용되게됨.
3) Speaker Encoder
- Speaker embedding을 추출하기 위한 Encoder.
- pre-trained된 model을 사용하였음.
- 256 d-vector를 추출함.
이 부분은 github code를 보면 pre-trained된 모델이 사용되지 않음을 확인할 수 있는데, 미리 정의된 화자 정보로부터 embedding을 학습하는 lookup table방식과 미리 학습된 모델을 사용하는 방식으로 2가지로 실험을 진행한듯 하다.
성능은 lookup이 높았으나, 데이터셋에서 학습된 화자에 대해서만 사용할 수 있는 제한이 존재함.
4) Decoder
Decoder (Vocoder) 부분은 HiFi-GAN을 사용하였으며, 이 부분은 전에 내가 정리한 글이 있으니 참고하시길 바란다.
[논문] HiFi-GAN: Generative Adversarial Networks for Efficient and High Fidelity Speech Synthesis 리뷰 하기
HiFi-GAN: Generative Adversarial Networks for Efficient and High Fidelity Speech Synthesis Several recent work on speech synthesis have employed generative adversarial networks (GANs) to produce raw waveforms. Although such methods improve the sampling eff
whddnr746.tistory.com
Results
실험 Detail을 논문을 참고하길 바라고 결과를 보도록 하겠다.
Table 1
- Hubert가 PER과 WER에서 가장 성능이 좋음. 이는 Bert기반의 학습방식에 의한 결과로 보여짐.
- MOS test에 대해서는 전반적으로 비슷한 성능을 보여줌.
- EER과 F0는 Table2와의 비교에서 설명.
Table 2
- VC를 진행한 뒤에도 PER과 WER에서 Hubert가 가장 강세를 보여줌
- F0와 EER을 비교했을 때, VQ-VAE가 Table1에 비해서 가장 많은 성능 하락세를 보여줌. 이는 VQ-VAE encoder의 unit이 화자정보와 F0정보를 많이 내포하고 있음을 의미함. (정보가 분리가 잘 안됨.)
- 이는 VQ-VAE는 entanglement가 심하며, Hubert와 CPC는 content, 화자, F0 정보가 잘 분리되었음을 보여줌.
- 결과를 미루어 봤을때, 화자정보는 CPC encoder가 가장 잘 분리하였다고 볼 수 있음.
마지막으로 Codec 성능 비교인데...
100개의 클러스터를 사용한 Hubert가 가장 성능이 좋았다고함. 이는 github에 샘플을 들어볼 수 있으니 궁금하면 들어보도록 하자. 사실 나는 Opus 9k bps가 더 듣기 좋았다.. ㅎㅎ
자세한 실험 세팅은 논문을 참고하도록 하자.
Conclusion
- SSL unit을 이용한 Speech synthesis를 제안함.
- reconstruction, VC, F0 manipulation을 실험하여 분리된 representation의 효율성을 보여줌
- 이러한 unit들을 활용하여 ultra lightweight codec을 개발함.