논문 제목: Hierarchical Timbre-Cadence Speaker Encoder for Zero-shot Speech Synthesis (2023) 링크
논문 저자: JounYeop Lee, Jae-Sung Bae, Seongkyu Mun, Jihwan Lee, Ji-Hyun Lee, Hoon-Young Cho, Chanwoo Kim
개요
이전 글에 이어서 personalized TTS를 가능하게 만들어주는 zero-shot TTS 모델에 대한 논문이다. 논문의 주요 아이디어는 화자 임베딩 (Speaker embedding)의 정보를 다시 2개의 정보로 나누는 것이며, 각각 timbre와 cadence라는 정보이다. 연구팀은 음성에서 timbre 임베딩과 cadence 임베딩을 추출/사용하여 학습할 때, 한 번도 보지 못한 유저에 대해 음성합성이 가능한 기법을 소개하였다. 이전의 연구에서는 화자 임베딩 자체만을 사용한 것과 달리 이번에는 다시 2개로 나눠서 사용하였다는 점이 매우 흥미롭게 다가왔다.
여기서 멈추지 않고 연구팀은 음성의 품질을 더욱 높이기 위한 데이터 증강기법을 소개한다. Speaker mixing augmentation으로, 본문에서는 줄여 SMAug로 표현한다. 개념은 간단하다. 서로 다른 화자가 발화한 음성을 이어붙여서 새로운 데이터를 만드는 것이다. 서로 다른 화자의 정보를 결합시킨 것이기에 학습에서 문제가 발생하지 않을까 걱정했지만, 화자임베딩을 더욱 효과적으로 학습하고 결과를 보았을 때도 성능의 향상을 가져다주었다.
본문
개인화된 TTS를 만들기 위해 최근에는 LLM을 기반으로 한 zero-shot TTS 모델에 대한 연구가 이루어졌었다. 그 결과는 놀랄만한 품질을 가져다 주었으며 많은 사람들의 이목을 이끌었다. 그러나 이런 종류의 거대 모델은 학습하는데 상당히 많은 데이터와 시간/장비적 자원을 필요로 하였다. 연구팀은 이런 단점이 존재하는 거대 언어모델을 사용하는 대신 화자(speaker) 임베딩을 조건부로 하는 zero-shot TTS 모델을 발표하였다.
화자 유사도(speaker similarity)를 기반으로 모델이 학습하는데, 연구팀은 먼저 굉장히 애매한 이 '화자 유사도' 라는 단어에 대해 다시 정의를 내려할 필요성을 강조한다. 연구팀은 화자 유사도를 2가지 측면에서 측정하였다. 첫 번째는 timbre 한국말로 말하면 음색이다. Timbre는 각각의 화자가 고유하게 갖는 목소리 특징으로 글자나 발음에 의해 존재하는 특징보다 목소리 자체에 집중한다. 두 번째는 cadence 한국말로 억양이다. Cadence는 1명의 화자가 내는 발화의 운율, 스타일, 톤의 변화와 같이 존재하는 음성학적 특징을 말한다. 이 2가지 timbre와 cadence는 음성 내에서 굉장히 복잡하게 얽혀있는데, 모델이 얼마나 잘 분리해 내는지가 핵심이 된다.
대용량 데이터셋으로 화자 임베딩을 추출해내는 pretrained speech encoder는 cadence보다 timbre에 집중한다. 따라서 이후에서도 볼 수 있지만, timbre 특성의 유사도를 중점적으로 측정하는 SECS 평가지표에서 pretrained speech encoder가 조금 더 높은 점수를 받게 된다. 연구팀은 모델에서 timbre와 cadence 모두 효과적으로 학습하기 위해 계층적 구조를 사용하였다. 반면, 계층적 구조를 사용하게 되면 cadence를 중점적으로 학습하게 되는 문제가 생긴다. 따라서 균형을 맞추기 위해 timbre 임베딩이 화자 임베딩과 비슷해지도록 동시에 학습한다. 정리하자면 아래와 같다.
- 사용자의 음성에서 정확한 cadence 임베딩을 추출하도록 학습한다.
- 사용자의 음성에서 정확한 timbre 임베딩을 추출하도록 학습하며 이는 speaker embedding과 유사해야 한다.
모델 구조
Timbre-cadence speaker encoder
먼저 참조 음성에서 convolution과 GRU 가 사용된 블럭을 거쳐 feature들을 생성해 내고, 이 특징들을 기반으로 attention pooling을 한다. 어텐션 pooling은 어텐션 score를 가중치로 하여 가중평균을 취한 벡터를 생성해 낸다. 그리고 그 벡터가 cadence 임베딩이 된다. 원본 speech에서 timbre와 cadence를 분리해서 사용하는 것이 목적이기 때문에, 계산된 cadence 임베딩은 speech에서 빼어 timbre embedding을 생성한다. Timbre 임베딩을 생성할 때도 마찬가지로 convolution과 어텐션 풀링이 사용되었다.
Pretrianed 된 speaker encoder 모델들은 timbre 특성을 중점적으로 화자 임베딩을 생성한다. 따라서 해당 모델에서 timbre 임베딩이 speaker encoder로 생성된 임베딩과 값이 유사해지도록 학습한다. 반면 cadence 임베딩은 예측결과를 낼 때, timbre 임베딩과 cadence 임베딩을 이어 붙여서 사용되는데, 그전에 정규화 (VICReg)를 진행하였다. 논문에서는 각 배치마다 정규화를 진행하였고 분산과 공분산 정보를 활용하여 cadence 임베딩 내의 변수간 상관관계를 제거하기 위해 도입하였다고 했다.
$$
\begin{aligned}
REG_{var} &= \frac{1}{D} \sum_{d=1}^D \max(0, \gamma - \sqrt{Var(z^d + \epsilon)})\\
REG_{cov} &= \frac{1}{D} \sum_{i \neq j} (Cov(Z_{cad}))_{i, j}^2
\end{aligned}
$$
- $Z_{cad}$: Cadence 임베딩 집합, 각 cadence 임베딩 벡터는 $z_1, \dots, z_N$ 으로 표현
- $z^d$: $d$ 차원을 갖는 cadence 임베딩 벡터
- $\gamma$: 정규화 목표로 하는 표준편차 (실험에서 1로 설정)
- $D$: 임베딩의 차원
TiCa(Timbre-Cadence) 모델을 적절하게 학습하기 위해서 초기 450K 스텝 동안에는 speaker embedding을 학습하고, 그 이후 50K 스템은 timbre 임베딩이 speaker embedding과 같아질 수 있도록 학습하였다.
Speaker mixing augmenetation (SMAug)
화자 임베딩을 그대로 사용하는 경우, 전체 발화 음성에 대해 speaker 임베딩이 고정적으로 사용되어 합성한 경우 추론 결과의 화자 유사도가 낮을 수 있다고 한다. 해당 문제를 해결하기 위해 연구팀은 짧은 2개의 발화음성을 이어 붙이는 SMAug 기법을 도입하였다. TTS에서 데이터 증강 기법을 적용하는 것은 음성 품질을 해칠 수 있어 위험하지만, 단순히 이어 붙인 것이라 음성의 품질을 해치지 않는 선에서 증강할 수 있다고 하였다. 또한, 모든 데이터에 대해 증강을 적용한 것은 아니고, 가장 긴 음성 대비 그 길이가 절 반보다 짧다면 증강을 할지 안 할지 50% 확률로 결정하도록 하였다.
실험 및 결과
Baseline으로 사용된 모델은 NALPCTron으로 해당 모델의 화자 인코더 부분만 논문에서 제안한 Hierearchical TiCa 인코더로 대체하였다. 학습에 사용된 영어 음성 데이터셋은 LibriTTS train-clean-360으로 904명의 화자가 191시간 동안 녹음한 음성으로 구성되어 있다. 추론 과정에서는 LibriTTS test-clean 데이터셋으로 39명의 화자가 8시간 동안 녹음한 데이터셋을 사용하였다. (추가로, LJSpeech 데이터셋도 추론과정에 사용되었다.)
비교군은 기존 참조 음성 (reference speech)을 입력으로 하는 인코더이다. 또한, Meta-StyleSpeech 기반 화자 인코더 META와 사전학습된 화자 임베딩 생성 모델인 EXTERN도 함께 비교하였다. 개인적으로 궁금하였던 augmentation 없이 평가된 TiCa-No-Aug 도 기술되었다. 사용된 평가지표는 아래와 같다.
- PER: Phoneme Error Rate, 합성이 된 음성의 음소가 잘못 발음된 비율 (ASR 모델로 측정)
- SECS: Speaker Embedding Cosine Similarity, 정답과 화자 임베딩이 얼마나 유사하게 생성되는지
- MOS, CSMOS: (Comparative Similarity) Mean Opinion Score
다른 speaker encoder와의 비교
학습에 사용된 화자 및 음성 데이터를 사용하여 추론을 진행한 경우는 Table1의 seen case에 해당한다. Seen case의 음소 발음 에러율을 보면 Ground Truth와 큰 차이가 없는 수준으로 측정되었다. 반면 SECS는 TiCa 인코더보다 EXTERN 인코더가 더 좋은 성능으로 측정되었다. 이에 대해서 연구팀은 EXTERN은 timbre를 중점적으로 학습하는데 이어서 SECS가 timbre를 중점적으로 유사한지 성능을 평가하기 때문이라고 답하였다. 다음, 처음 보는 화자 및 음성 데이터를 사용하여 추론하는 Table2의 unseen case에서는 MOS 점수 가 가장 높게 평가되었다. 반면 SECS는 seen case와 마찬가지로 EXTERN에 비해 뒤처지는 모습을 보였다.
SMAug(Speaker Mixing Augmentation) 기법의 사용 여부에 따른 결과차이는 생각보다 컸다. augmentation을 사용하지 않았을 때보다 사용했을 때 성능의 향상폭이 컸는데, 한편으로는 augmentation 덕분에 더 정확한 speaker 임베딩이 생성되었고 이로 인한 성능향상도 있지 않았을까 라는 생각이 든다. Augmentation을 사용하였을 때 PER은 1.93에서 1.34로 감소시켰으며 seen case에서는 2.85에서 1.97로 감소시켰다.
T-SNE를 사용한 timbre, cadence 임베딩 시각화
위 그림은 차원 축소 기법 중 하나인 t-SNE를 사용하여 각 임베딩이 잠재공간에서 얼마나 잘 학습되어 있는지를 나타낸다. (a)는 timbre, (b)는 cadence 임베딩을 표현한다. 위 사진은 임의의 10명의 화자에 대해 학습한 임베딩을 추출한 결과이다. (a)는 각 화자별로 임베딩이 잘 분리되어 있는 것처럼 보이나, 연두색으로 표현된 화자는 비교적 거리감 있게 나타났다. 이는 t-SNE로 차원을 축소하면서 발생한 결과인지에 대해서는 알아볼 필요가 있어 보인다. (b)의 cadence 임베딩은 클러스터링이 잘 되어있으나, timbre에 비해서는 많이 섞여있는 모습을 보여준다.
Speaker embedding을 그대로 사용하는 것이 아니라 화자의 timbre, cadence라는 정보로 다시 분리해서 사용한다는 것이 새롭게 다가왔다. 이전에도 speaker embedding을 사용하는 데이터 증강기법 latent filling을 살펴보았는데, timbre 임베딩이 존재하는 잠재공간과 cadence가 존재하는 잠재공간에서 각각 latent filling을 적용하여 사용하면 어떤 결과가 나올지 궁금하다.
사실 내용에 대해 완전한 이해가 되지는 않았다. 서로 다른 화자의 음성 정보를 결합하는 것이 speaker embedding을 학습하는데 어떻게 도움이 되는 것인지, cadence 임베딩의 경우 화자별로 잘 분리가 되지는 않았는데 이를 개선할 수 있는 방법은 없거나 그 이유는 무엇인지 등 아직 의문이 많이 남는다.
'딥러닝 > 음성합성' 카테고리의 다른 글
Latent Filling 정리 (0) | 2024.06.13 |
---|---|
Mels-TTS 정리 (0) | 2024.06.13 |