IndexTTS2: A Breakthrough in Emotionally Expressive and Duration-Controlled Auto-Regressive Zero-Shot Text-to-Speech — 감정·발화 길이 제어 원리 분석
IndexTTS2의 T2S·S2M, GRL 감정 분리, GPT latent와 duration control을 설명한다. WER·SS·MOS, ablation과 공개 inference 코드의 제한을 원문 figure·table로 분석한다.
- #논문 리뷰
- #IndexTTS2
- #zero-shot TTS
- #감정 제어
- #duration control
- #flow matching
원문: Siyi Zhou, Yiquan Zhou, Yi He, Xun Zhou, Jinchao Wang, Wei Deng, Jingchen Shu, IndexTTS2: A Breakthrough in Emotionally Expressive and Duration-Controlled Auto-Regressive Zero-Shot Text-to-Speech. bilibili 연구진의 arXiv:2506.21619v2, 2025년 9월 3일 개정, 전체 10쪽을 기준으로 읽었다. 처음 공개된 날짜는 2025년 6월 23일이다. 이 글은 해당 arXiv 버전을 대상으로 하며, PDF의 학회 양식만으로 별도의 게재 상태를 단정하지 않는다.
논문 정보 · 원문 PDF · 검토한 공개 코드 · 저자 음성 데모
그림 4개와 표 5개는 원문에서 직접 발췌했다. 원문의 배포 조건은 arXiv 비독점 배포 라이선스이며 각 도판에 출처와 원문 위치를 표시했다. 실험 수치는 저자들이 보고한 결과이며 이 글에서 모델을 새로 학습하거나 음성 품질을 재측정한 값은 아니다. 공개 코드와 모델 설정은 고정된 버전으로 대조했다. 특히 논문의 길이 제어 방식이 검토한 공개 버전의 사용 가능한 기능과 같지는 않다는 점을 뒤에서 확인한다.
1. IndexTTS2 요약: 화자·감정·발화 길이를 나누어 제어하기
IndexTTS2가 추가한 핵심 기능은 autoregressive 생성에서의 duration control, speaker identity와 emotion의 분리, 자연어를 이용한 emotion control이다. 3단계 학습은 expressive data가 부족한 조건에서 감정 표현을 개선한다. GPT latent는 강한 감정을 표현할 때도 발화 내용을 명료하게 유지하도록 돕는다. 두 설계의 목적과 검증 결과를 구분해서 읽어야 한다.
Duration control은 목표 speech token 수를 거의 그대로 맞췄다. SeedTTS 중국어·영어의 다섯 목표 길이 조건에서 보고된 duration error는 각각 0.014–0.067%, 0–0.023%다. 길이를 정한 중국어 청취 평가에서도 PMOS는 F5-TTS 4.04에서 IndexTTS2 4.38로 높았다. 목표 길이에 맞추는 기능과 그 상태의 prosody를 함께 검증한 결과다.
Emotion reference를 분리한 시스템은 감정 표현 점수를 높였다. 감정 테스트셋에서 ES는 이전 IndexTTS 0.660에서 0.887, EMOS는 2.74에서 4.22로 증가했다. 다만 WER는 1.136%에서 1.883%로 높아졌다. GPT latent를 제거하면 WER가 다시 2.766%로 올라, 추가 표현이 감정 조건에서 내용의 명료함을 지키는 역할을 한다는 근거가 된다.
자연어 emotion control의 청취 평가에서는 EMOS가 CosyVoice2 3.339에서 IndexTTS2 3.786, PMOS가 3.679에서 4.143으로 높았다. 아래에서는 공통 구조와 평가 기준 → duration mechanism과 결과 → 음성 복원·학습과 품질 → 자연어 emotion mechanism과 결과 순으로 이 세 contributions를 연결한다. 각 표의 조건이 다르므로 점수를 하나의 합산 성능으로 만들지 않는다.
2. Zero-shot TTS 배경: speaker·emotion·duration 조건
짧은 참조 녹음을 주고 새로운 문장을 읽게 하는 방식을 zero-shot 음성 합성이라고 부른다. 여기서 zero-shot은 새 화자마다 모델을 다시 학습하지 않는다는 뜻이다. 모델 자체는 대규모 음성 데이터로 미리 학습한다.
참조 음성에는 화자의 음색만 들어 있지 않다. 높낮이, 속도, 감정, 발음 습관과 녹음 환경이 함께 섞인다. 화자 A의 차분한 녹음으로 A가 화난 대사를 읽게 하고 싶다면, A의 목소리와 차분한 말투를 분리해야 한다. 다른 사람 B의 화난 녹음을 감정 참조로 줄 때도 B의 목소리까지 따라 하면 목적을 달성하지 못한다.
길이는 또 다른 문제다. autoregressive 모델, 즉 AR 모델은 앞서 만든 token을 보고 다음 token을 하나씩 만든다. 말의 흐름을 이어 가는 데 유리한 구조지만, 종료 token을 언제 낼지까지 생성 과정에 맡기면 완성된 음성의 길이를 미리 지정하기 어렵다. 완성된 파일의 재생 속도를 바꾸는 방법은 가능하지만 발음과 운율도 달라질 수 있다.
논문은 AR 구조를 유지하면서 목표 길이를 입력 조건으로 넣는다. 동시에 감정과 화자 조건을 나누고, 음성 내용을 복원하는 데 필요한 정보를 강화한다. 이 선택이 다른 모든 음성 합성 구조보다 우월하다는 뜻은 아니다. MaskGCT나 F5-TTS 같은 비교 시스템도 길이나 조건을 다루는 방법이 있으며, 우열은 실제 실험 조건에서 확인해야 한다.
3. IndexTTS2 architecture: T2S·S2M·BigVGANv2
“목소리는 A처럼, 감정은 슬프게, 이 문장을 읽어라”라는 요청은 먼저 텍스트와 참조 음성들로 나뉜다. 텍스트는 token으로 바뀌고, 참조 음성은 화자와 감정 조건으로 바뀐다. 첫 모델이 음성의 내용을 압축한 token을 만들면, 다음 모델이 이를 시간·주파수 표현으로 복원하고 마지막 모델이 실제 파형을 만든다.
Text-to-Semantic, T2S는 읽을 텍스트와 여러 조건을 받아 의미 중심의 음성 token을 순서대로 만든다. 이 token은 단어 번호와 같지 않으며 파형의 개별 sample도 아니다. 음성을 압축해서 표현하는 코드다.
Semantic-to-Mel, S2M은 token과 화자 조건을 받아 mel spectrogram을 만든다. mel spectrogram은 시간에 따라 어떤 주파수 성분이 얼마나 강한지 표현한 배열이다. 마지막 BigVGANv2는 이 배열을 귀로 들을 수 있는 파형으로 바꾸는 vocoder다.
Figure 1에서 화자 참조는 첫 단계뿐 아니라 S2M에도 연결된다. 내용 token을 잘 만들더라도 이를 소리로 복원하면서 화자의 특징을 잃을 수 있기 때문이다. 감정 참조는 T2S의 생성 방식에 영향을 준다. 그림의 점선으로 표시한 목표 token 수는 선택 사항이며, 지정하지 않는 자유 길이 생성도 학습한다.
4. IndexTTS2 평가 조건: WER·SS·ES·MOS의 차이
내용, 목소리, 감정과 청취 품질은 서로 다른 평가 대상이다. 같은 음성에 대해 한 지표가 좋아지고 다른 지표가 나빠질 수 있다.
| 지표 | 질문 | 방향과 해석 |
|---|---|---|
| WER | 원래 문장의 내용을 얼마나 틀리게 읽었는가? | 낮을수록 좋다. ASR로 전사한 결과를 비교하므로 인식기의 특성도 영향을 준다. |
| SS | 참조 음성과 생성 음성의 화자 특징이 얼마나 가까운가? | embedding cosine similarity. 높을수록 좋지만 사람이 느끼는 닮음과 같지는 않다. |
| ES | 감정 특징이 얼마나 가까운가? | emotion2vec 표현의 유사도. 높을수록 좋다. |
| SMOS | 사람이 듣기에 목소리가 얼마나 닮았는가? | 1–5점 청취 평가 |
| EMOS | 사람이 듣기에 감정을 얼마나 잘 재현했는가? | 1–5점 청취 평가 |
| PMOS | 억양·리듬 같은 운율이 어떤가? | 1–5점 청취 평가 |
| QMOS | 오디오 품질이 어떤가? | 1–5점 청취 평가 |
원문은 중국어 인식에 FunASR, 영어에 Whisper를 사용하고 표에서 내용 지표를 WER로 표시한다. 중국어의 구체적인 분절·normalization 규칙과 모델 버전 전체가 상세히 제시되지는 않는다. 이전 IndexTTS 논문의 CER/WER 수치를 이 표와 조건 확인 없이 직접 이어 붙이면 안 된다.
기초 평가는 LibriSpeech test-clean 2,620발화, SeedTTS 영어 1,000발화, SeedTTS 중국어 2,000발화, AISHELL-1 1,000발화로 구성된다. SeedTTS 영어는 Common Voice, 중국어는 DiDiSpeech에서 가져온다. 감정 평가는 별도로 12명, 7가지 감정, 각 감정 3문장이므로 252개 녹음 조건이다. 이 12명은 녹음한 화자 수이며 청취 평가자 수가 아니다.
표의 MOS에는 ± 값이 붙어 있다. 그러나 원문에 평가자 수, 그 값의 통계적 정의와 신뢰수준이 충분히 설명되어 있지 않다. 따라서 이 글은 표의 대표값 차이를 해석하며 ‘통계적으로 유의한 개선’이라고 바꾸어 쓰지 않는다. Ground Truth의 WER가 0이 아닌 것도 자연스럽다. 실제 녹음이라도 ASR이 전사 과정에서 틀릴 수 있다.
5. T2S conditioning: duration embedding과 감정 분리
5.1 목표 token 수와 positional embedding 공유
“열 번째 칸에서 끝내라”는 지시를 받는 상황을 생각해 보자. 모델은 현재 몇 번째 token을 만들고 있는지 알고 있어야 하고, 목표가 열 번째라는 정보도 같은 기준으로 이해해야 한다. 논문은 목표 token 수의 embedding과 음성 위치 embedding을 공유해 이 두 정보를 연결한다.
논문의 목표 길이 표기는 다음과 같다.
여기서 는 생성할 음성 token 수이고, 는 그 위치 하나만 선택하는 one-hot 표현이다. 는 선택된 길이를 나타내는 vector다. 원문은 embedding 표의 크기를 ‘최대 음성 길이 × embedding 차원’으로 적으면서 위 곱셈 표기를 쓴다. 행·열 vector의 방향을 그대로 대입하면 전치가 필요할 수 있다. 구현 관점에서는 embedding 표에서 T번째 행을 조회한다는 뜻으로 읽으면 된다. 목표 길이 표와 음성 위치 표가 같은 값을 쓰는 것이 핵심이다.
예를 들어 목표 200token을 입력한다면 모델은 “200이라는 길이 조건”을 받고 각 위치에서 다음 음성 token을 예측한다. 여기서 200은 200단어도 200초도 아니다. token과 시간의 관계는 음성 codec과 복원기의 시간 해상도에 따라 달라진다. 논문의 길이 조건만 보고 초 단위의 API를 만들어서는 안 된다.
자유 길이 생성에서는 을 넣는다. 목표를 생략한 경우에도 모델이 작동하도록 학습 중 일부 예시에 이 조건을 사용한다. 목표 수에서 강제로 파일을 자르는 후처리와는 다른 접근이다. 종료 token까지 포함한 학습을 통해 길이에 맞추어 내용을 생성하도록 유도한다.
5.2 Speaker·emotion embedding과 Gradient Reversal Layer
논문에서 는 화자의 특징이고 는 감정과 운율의 특징이다. 기본 T2S 입력의 첫 조건을 에서 로 바꾼다. 뒤에는 길이 조건, 텍스트 시작 표시, 텍스트 embedding, 음성 시작 표시와 학습할 음성 token embedding이 이어진다.
이때 와 는 같은 종류의 조건이 아니다. 앞의 는 감정 vector이고, 아래첨자가 붙은 표기는 텍스트·음성의 시작을 알리는 경계 token embedding이다. 그림에서 정답 음성을 codec에 넣는 오른쪽 경로는 학습할 정답 token을 만드는 과정이다. inference 때 새로 만들 정답 녹음을 미리 제공한다는 뜻이 아니다.
두 encoder를 따로 둔다고 정보가 자동으로 분리되지는 않는다. 감정 참조에도 화자의 음색이 들어 있기 때문이다. 논문은 감정 encoder 뒤에 화자 분류기를 달고, 그 사이에 Gradient Reversal Layer, GRL을 둔다. 화자 분류기는 감정 vector에서 누구의 목소리인지 맞추려고 학습한다. 반면 GRL은 감정 encoder로 돌아가는 그 gradient 방향을 뒤집어, encoder가 화자를 쉽게 구분하게 만드는 정보를 덜 담도록 유도한다.
원문의 두 번째 학습 단계 loss는 다음과 같이 적혀 있다.
첫 항은 정답 음성 token을 잘 예측하도록 하는 loss다. 는 종료 token이다. 두 번째 항에서 원문이 라고 줄여 쓴 값은 감정 vector e가 정답 화자에게서 왔다고 분류기가 예측하는 확률이다. 는 이 학습 항의 비중이다.
식의 마이너스 부호만 보면 감정 encoder도 화자를 잘 구분하도록 학습한다고 오해하기 쉽다. 실제 의도는 GRL 때문에 분류기와 감정 encoder가 반대 방향의 신호를 받는 것이다. 이 장치가 화자 정보를 완전히 제거했다는 수학적 보증은 없다. 독립적인 GRL ablation도 이 논문의 표에는 없다. 논문의 ‘분리’라는 표현은 학습 목표와 최종 평가가 뒷받침하는 범위에서 이해해야 한다.
6. Duration control: 목표 token 수·WER·prosody 평가
6.1 Duration error와 WER가 다른 이유
논문은 SeedTTS 중국어·영어에서 원래 길이와 그 길이의 0.75배, 0.875배, 1.125배, 1.25배를 목표로 생성한다. 원래 길이보다 짧게 또는 길게 말하도록 요구하는 실험이다.
중국어의 다섯 값은 0.019·0.067·0.023·0.014·0.018%, 영어는 0.015·0·0.009·0.023·0.013%다. 저자들은 이를 목표 token 수에 매우 가깝게 생성한 결과로 해석한다. 표의 0.067은 6.7%가 아니라 0.067%다.
여기서 오차는 단어 오류율 WER가 아니다. 또 이 표에는 발화별 오차의 집계 방식이나 실제 파형의 밀리초 오차 분포가 자세히 제공되지 않는다. 영어의 한 조건이 0으로 표시되어 있어도 반올림 전 모든 sample이 정확히 같은 길이였다고 단정할 수 없다. 실무에서 장면에 맞출 때는 파형의 끝, 묵음과 문장 사이 간격까지 재야 한다.
6.2 목표 길이를 바꾸어도 대사의 내용을 유지하는가
token 수만 맞추고 문장을 빼먹으면 더빙에 쓸 수 없다. Figure 4는 길이를 바꾸었을 때 WER가 어떻게 달라지는지 비교한다.
두 그래프에서 MaskGCT의 곡선이 대체로 위에 있고, 영어의 IndexTTS2와 F5-TTS는 가깝다. 중국어에서는 IndexTTS2가 F5-TTS보다 아래에 있다. 저자들은 중국어에서 F5-TTS 대비 약 0.5%p, MaskGCT 대비 약 2%p 개선이라고 서술한다. 그래프의 모든 배율에서 차이가 정확히 같은 상수라는 뜻은 아니다.
원문 자체의 표기 차이도 보존해야 한다. Figure 4의 두 가로축은 0.785로 적혀 있지만 실험 설명과 Table 4는 0.875를 사용한다. 그림을 임의로 고쳐 넣지 않았으며, 어느 조건이 실제 측정값인지 독립적으로 확인되지 않아 그 지점의 정확한 배율별 수치를 재구성하지 않았다. 그래프에는 Table 4에 있는 1.25배 지점도 보이지 않는다.
6.3 Duration-controlled TTS의 SMOS·PMOS·QMOS
Table 5는 길이를 정한 조건에서 화자 유사도, 운율과 오디오 품질을 청취 평가한 결과다.
중국어 IndexTTS2의 SMOS·PMOS·QMOS는 4.56·4.38·4.42다. F5-TTS의 4.32·4.04·4.32보다 높다. 영어는 4.48·4.46·4.44이며 운율 4.46은 표에서 가장 높은 대표값이다.
하지만 영어 SMOS는 MaskGCT가 4.54로 더 높고, QMOS 4.44는 MaskGCT와 동률이다. “길이 제어 상태에서도 운율을 유지한다”는 결과와 “모든 청취 지표에서 최고다”라는 주장은 다르다. 이 표는 전자를 뒷받침한다. 길이 배율별 MOS가 따로 나뉘어 있지는 않으므로 더 강한 압축·늘이기에서도 같을지는 알 수 없다.
7. T2S 3단계 학습: 전체 5만 5천 시간과 감정 135시간
표정이 풍부한 음성 데이터는 일반적인 낭독 음성보다 적다. 처음부터 적은 감정 데이터에만 맞추면 읽기 능력이 약해질 수 있고, 큰 일반 데이터에 그대로 섞으면 드문 감정 신호가 충분히 학습되지 않을 수 있다. 논문은 T2S를 세 단계로 학습한다.
| 단계 | 데이터와 조건 | 고정하거나 학습하는 대상 | 목적 |
|---|---|---|---|
| 1 | 전체 음성 데이터, 화자·길이 조건 | 기본 T2S 학습 | 문장을 읽고 길이 조건을 사용하는 능력 확보 |
| 2 | 감정 음성 135시간, 화자+감정 조건 | 화자 조건 encoder를 고정하고 감정 encoder·GRL 경로 학습 | 음색을 유지하면서 감정 표현 학습 |
| 3 | 다시 전체 데이터 | 모든 특징 조건 encoder를 고정하고 fine-tuning | 기본 읽기와 생성 안정성 보강 |
첫 단계에서는 길이 조건을 30% 확률로 0으로 둔다. 나머지 예시에서는 목표 길이를 사용한다. 이렇게 목표가 있는 생성과 없는 생성을 함께 학습한다. 훈련 데이터는 같은 화자의 서로 다른 발화를 참조와 정답으로 나누고, 참조와 정답 음성에 각각 속도 변형도 적용한다.
전체 데이터는 중국어 3만 시간과 영어 2만 5천 시간이다. 대부분은 Emilia에서 가져오고 오디오북과 구매 데이터도 포함한다. 감정 데이터는 361명의 135시간이며, 이 중 29시간은 ESD이고 나머지는 상용 구매분이다. 135시간은 전체 학습량이 아니라 감정 단계를 위한 부분집합의 크기다.
저자들은 A100 80GB GPU 8개, AdamW, 초기 learning rate 0.0002, 총 3주의 학습을 보고한다. 하지만 단계별 정확한 step 수, batch 구성, 난수 seed와 구매 데이터 전체가 주어지지는 않는다. 이 정보만으로 원 논문의 학습을 같은 결과까지 재현할 수 있다고 말할 수는 없다. 뒤의 ablation은 추가 학습 전략 전체의 효과를 보여주며, 세 단계의 기여를 각각 수치로 분리하지는 않는다.
8. S2M 원리: GPT latent와 flow matching으로 음성 복원하기
8.1 GPT latent를 S2M에 전달하는 이유
감정을 강하게 표현하면 소리가 떨리거나 늘어지고 음절 경계가 바뀐다. 압축된 음성 token만으로 이런 소리를 복원할 때 원래 문장의 내용을 놓칠 수 있다는 것이 저자들의 문제의식이다. 이를 줄이기 위해 T2S의 마지막 Transformer 층에 남아 있는 GPT latent representation도 S2M에 전달한다.
이 논문의 GPT는 텍스트에서 음성 token을 생성하는 autoregressive 모델을 뜻한다. ChatGPT 서비스를 호출해서 발음을 고친다는 뜻이 아니다. latent representation은 최종 token 번호를 결정하기 직전의 연속적인 vector로, token 번호보다 풍부한 문맥을 담을 수 있다는 것이 저자들의 가설이다.
Figure 3에서 아래의 음성 codec이 참조와 정답의 token 표현을 만든다. 오른쪽의 GPT 내부 표현은 차원을 맞추는 작은 다층 신경망인 MLP를 거쳐 의미 특징과 더해진다. 논문은 학습 시 50% 확률로 이 결합을 사용한다고 설명한다. 왼쪽에서는 같은 발화를 참조 구간과 정답 구간으로 나누고, 정답 mel에 노이즈를 넣는다. 참조 구간은 어떤 목소리를 유지할지 알려 주는 조건이다.
내부 표현에 텍스트 문맥이 담겨 있기 때문에 발음이 안정된다는 설명과, 실제로 그 경로를 제거했을 때 오류가 늘었다는 관찰을 구분해야 한다. ablation은 이 경로가 결과에 영향을 주었다는 증거다. 어떤 내부 정보가 결정적인 원인인지까지 분해해 증명하지는 않는다.
8.2 Flow matching과 L1 loss의 역할
Flow matching은 무작위 노이즈를 원하는 데이터로 바꾸는 변화 방향을 학습하는 방법이다. 여기서는 화자와 의미 조건을 보면서 노이즈 상태를 조금씩 바꾸어 mel spectrogram으로 보낸다. inference 시에는 이 변화를 나타내는 상미분방정식, ODE를 수치적으로 풀며 방향을 여러 번 따라간다. 음성 token을 순서대로 예측하는 T2S와 달리 S2M은 mel 배열을 복원하는 별도 과정이다.
원문은 예측 mel과 정답 mel 사이의 L1 loss를 다음과 같이 설명한다.
는 프레임 수, 는 mel-frequency bin 수다. 각 칸의 예측값과 정답값 차이를 절댓값으로 재고 전체 칸에서 평균을 낸다. 크게 틀린 칸을 제곱해서 더 강하게 벌주는 L2와는 다른 loss다.
공개 코드에서는 이 설명보다 한 단계 안쪽으로 들어가 노이즈에서 mel로 이동하는 vector field를 L1으로 학습한다. 예측 vector field에 정해진 노이즈 항을 더해 mel 예측을 복원하면 핵심 오차 항은 대응된다. 다만 prompt 구간 제외와 batch 평균 같은 구현 세부 사항도 있다. 원문의 간단한 mel loss 식을 그대로 복사하면 공개 코드의 전체 학습 절차가 된다고 생각해서는 안 된다.
9. Zero-shot TTS benchmark: dataset별 WER·SS·MOS 비교
Table 1은 위에서 아래로 네 dataset을 나누어 보여준다. 각 구역의 마지막 ‘− GPT latent’는 비교 모델 이름이 아니라 IndexTTS2에서 추가 내부 표현을 제거한 변형이다. 그 행까지 포함해야 구성 요소의 효과를 읽을 수 있다.
WER는 낮을수록, SS와 MOS는 높을수록 좋은 결과다. 네 dataset에서 같은 모델 행을 따라가면 IndexTTS2의 개선이 모든 지표에서 같은 방향은 아니라는 점을 확인할 수 있다.
9.1 LibriSpeech: WER와 MOS 개선
깨끗한 영어 음성 조건에서 IndexTTS2의 WER는 3.115%, 이전 IndexTTS는 3.436%다.
절대 차이는 0.321%p다. 비교 모델 중 다음으로 가까운 이전 모델보다 낮으며, 화자 유사도 SS도 0.819에서 0.870으로 높아진다.
청취 평가에서는 SMOS 4.44, PMOS 4.12, QMOS 4.29다. 목소리 닮음과 운율의 대표값이 높지만 오디오 품질 4.29는 이전 모델과 동률이다. 정답 녹음의 WER 3.405보다 낮다는 이유만으로 생성 음성이 사람의 발음보다 더 정확하다고 결론 내릴 수는 없다. 이 값은 해당 ASR과 전사 비교 절차가 내놓은 결과다.
9.2 SeedTTS 영어: WER 개선과 MOS 하락
이 조건의 WER는 이전 모델 1.844%에서 IndexTTS2 1.521%로 내려간다.
SparkTTS의 1.543%와는 0.022%p 차이다. 작은 대표값 차이를 통계적 우위로 확대하지 않아야 한다.
주목할 부분은 MOS다. 이전 IndexTTS의 SMOS·PMOS·QMOS는 4.67·4.52·4.67이고, IndexTTS2는 4.42·4.40·4.48이다. 세 청취 점수 모두 이전 모델이 더 높다. 새로운 감정 구조가 들어간 모델이 기초 테스트의 모든 품질을 함께 높인 것은 아니다. Table 1을 하나의 평균 점수로 압축하면 이 결과가 가려진다.
9.3 SeedTTS 중국어: WER·SS·MOS 개선
이전 IndexTTS와 IndexTTS2의 WER는 각각 1.097%와 1.008%다.
SS는 0.781에서 0.865로 올라간다. SMOS·PMOS·QMOS도 4.10·3.73·4.33에서 4.44·4.46·4.54로 높아진다.
이 dataset에서는 새 모델이 읽기와 청취 품질을 함께 개선한다. 다만 제거 변형의 SS 0.890은 완전한 모델보다 높다. embedding 기반 화자 유사도만 최대화하는 것과 최종 시스템을 선택하는 것은 같은 문제가 아니다.
9.4 AISHELL: 이전 IndexTTS가 더 낮은 WER
AISHELL에서 이전 IndexTTS의 WER는 1.478%, IndexTTS2는 1.516%다.
새 모델이 0.038%p 높다. SS 0.843은 정답 녹음의 0.847보다 조금 낮다. 반면 SMOS·PMOS·QMOS는 4.54·4.42·4.52로 이전 모델의 4.48·4.25·4.46보다 높다.
여기서도 “정확도는 누가 이겼는가”라는 질문 하나로는 부족하다. 글의 내용을 보존하는 지표와 사람이 듣는 품질이 서로 다른 방향을 가리킨다. 논문의 기초 평가를 요약할 때는 이 반례를 함께 보존해야 한다.
9.5 GPT latent ablation: WER와 SS의 다른 방향
네 dataset에서 GPT latent representation을 제거하면 WER가 순서대로 3.334·1.616·1.261·1.791%가 된다. 완전한 모델의 3.115·1.521·1.008·1.516%보다 모두 높다. 감정 테스트셋 외에서도 추가 경로가 내용 오류를 줄이는 방향으로 작동한다.
반대로 SS는 네 구역 모두 제거 변형이 더 높다. 청취 지표는 대체로 완전한 모델을 지지하지만 SeedTTS 중국어 SMOS는 4.44로 동률이다. 따라서 정확한 해석은 내부 표현 경로가 내용의 명료함을 돕지만 화자 embedding 유사도를 최대화하지는 않는다는 것이다. 모든 지표를 동시에 끌어올리는 구성 요소라고 설명할 수는 없다.
10. Text-to-Emotion: 자연어를 감정 embedding으로 바꾸기
10.1 DeepSeek-r1에서 Qwen3-1.7B로 emotion distillation
감정 참조 녹음을 매번 준비하기 어렵다면 문장으로 원하는 감정을 지정할 수 있어야 한다. 논문의 Text-to-Emotion, T2E는 자연어를 먼저 감정별 확률로 바꾸고, 이 확률로 음성 감정 특징을 섞는다.
논문은 분노, 행복, 두려움, 혐오, 슬픔, 놀람, 중립의 7가지 감정을 정의한다. DeepSeek-r1을 교사 모델로 사용해 입력 문장의 감정 분포를 얻는다. 이 절에서는 앞의 길이 조건 와 혼동하지 않도록 감정 확률을 로 적는다.
원문의 식 (3)이 설명하는 제약이다. 7개 값의 합이 1인 분포이지, 길이를 나타내는 embedding이 아니다. 예를 들어 슬픔 0.7, 중립 0.3, 나머지 0이라면 슬픈 성분에 더 큰 비중을 준다. 이 수치는 이해를 위한 예시이며 논문 실험의 특정 출력은 아니다.
저자들은 감정을 묘사하는 문장과 실제 대사 형태의 문장이라는 두 종류의 요청으로 데이터를 만든다. 각 문장에 대해 감정 확률을 JSON으로 받고, 합이 1이면서 소수 둘째 자리까지 표시하도록 요청한다. 이렇게 만든 문장·분포 쌍 1,000개로 Qwen3-1.7B를 LoRA fine-tuning한다. LoRA는 원래 weight를 고정하고 작은 저랭크 행렬을 추가로 학습해 모델을 조정하는 방식이다. 전체 weight를 모두 바꾸는 것보다 학습할 parameter가 줄어든다. 1,000은 이 단계의 학습 데이터 수이며 뒤에 나오는 음성 청취 평가의 표본 수가 아니다.
10.2 Soft target과 LoRA cross-entropy 학습
“슬픔”이라는 단일 라벨만 주면 슬픔과 중립이 섞인 문장의 정도 차이가 사라진다. knowledge distillation은 교사가 만든 확률 분포를 학생이 따라가게 한다. 원문의 식 (4)를 학생 분포 로 풀어 쓰면 다음과 같다.
는 원래 학생 모델의 parameter이고 는 추가로 학습하는 LoRA parameter다. 교사가 높은 확률을 준 감정에 학생도 높은 확률을 주도록 cross-entropy를 줄인다. 교사 모델을 매번 호출하는 대신 작은 학생 모델을 사용하는 것이 목적이다. 하지만 이 논문에는 T2E의 실제 latency나 비용 감소량을 측정한 표가 없다.
10.3 감정 확률로 reference embedding 결합하기
감정별 확률만으로는 T2S에 바로 넣을 음성 특징이 완성되지 않는다. 먼저 각 감정에 해당하는 여러 음성에서 감정 embedding을 뽑아 평균을 만든다. 그런 다음 평균 vector들을 확률로 가중해 더한다. 원문 식 (5)의 구조다.
는 i번째 감정의 참조 embedding 집합이다. 앞의 예시라면 슬픔 평균 vector에 0.7, 중립 평균 vector에 0.3을 곱해 더한다. 완성된 vector가 T2S의 감정 조건이 된다. 자연어를 그대로 음성 모델의 모든 층에 명령문으로 넣는 방식과는 다르다.
이 과정에도 한계가 있다. 7가지 감정으로 표현하기 어려운 연기 지시나 세밀한 상황 맥락은 이 분포에 압축되며 일부가 사라질 수 있다. 저자들은 두 가지 자연어 입력 방식을 합친 결과를 평가하지만 복합 감정별 성능을 따로 제시하지 않는다. 공개 버전의 감정 종류와 결합 방식도 원문의 7분포·평균 vector 방식과 차이가 있어 12절에서 따로 설명한다.
11. 감정 제어 benchmark와 GPT latent·학습 전략 ablation
11.1 Emotion reference의 ES·EMOS와 WER 변화
Table 2는 감정을 담아 녹음한 별도 테스트셋의 결과다. 기초 테스트셋과 혼동하면 안 된다. 목소리와 감정이 목표대로 전달되는지, 그 과정에서 대사의 내용이 유지되는지를 함께 본다.
IndexTTS2의 ES는 0.887, EMOS는 4.22다. 이전 IndexTTS는 0.660과 2.74, CosyVoice2는 0.802와 3.09다. 화자·감정·운율·품질 청취 점수는 IndexTTS2가 4.24·4.22·4.08·4.18로 비교 모델 중 가장 높다. 감정 기능을 추가한 목적과 맞는 개선이다.
내용 오류율은 다른 결론을 준다. 이전 IndexTTS는 1.136%, CosyVoice2는 1.831%, IndexTTS2는 1.883%다. 원문 서술은 주로 이전 IndexTTS와의 차이를 강조하지만 표에서는 CosyVoice2보다도 0.052%p 높다. 강한 감정 모사에 성공했더라도 읽을 문장을 틀리지 않았는지 별도로 검사해야 한다.
11.2 GPT latent 제거와 추가 학습 제거의 차이
GPT latent representation을 제거하면 WER가 1.883%에서 2.766%로 증가한다. 반면 SS는 0.836에서 0.869, ES는 0.887에서 0.888로 높아진다. 감정 유사도의 차이는 0.001에 불과하며, 청취 지표는 모두 완전한 모델보다 낮다. 추가 내부 표현은 이 조건에서 특히 내용의 명료함을 지키는 데 기여한 것으로 읽을 수 있다.
추가 학습 전략을 제거한 행은 다른 모습을 보인다. ES가 0.689, EMOS가 2.82로 크게 내려간다. 그런데 WER는 1.362%로 오히려 낮아진다. 감정 표현을 충분히 익히지 못한 변형이 내용을 더 쉽게 읽는 결과다. WER 하나만 기준으로 고르면 논문이 해결하려는 감정 문제를 놓치게 된다.
이 제거 조건은 GRL만 하나씩 바꾼 실험이나 각 학습 단계를 따로 제거한 실험이 아니다. 여러 학습 설계가 합쳐진 전략을 제거한 결과이므로 “감정 점수 증가분 중 정확히 얼마가 GRL 덕분”인지 계산할 수 없다. 시스템 전체의 효과와 개별 부품의 인과 효과를 구분해야 한다.
11.3 T2E 자연어 감정 제어의 MOS 결과
다음 표는 T2E를 사용한 자연어 감정 제어다. 절반은 사람이 감정을 따로 지정한 prompt, 절반은 읽을 문장 자체를 prompt로 사용한다. 이를 합친 음성을 이중 눈가림 청취 평가로 비교한다.
SMOS·EMOS·PMOS·QMOS는 CosyVoice2의 2.973·3.339·3.679·3.429에서 IndexTTS2의 3.875·3.786·4.143·4.071로 높아진다. 감정 참조 녹음이 없어도 자연어를 조건으로 전달하는 접근을 지지하는 결과다.
그러나 이 표는 “따로 감정을 지시한 경우”와 “대사의 내용에서 감정을 판단한 경우”를 분리하지 않는다. 평가한 문장 수와 감정별 결과도 충분히 제공되지 않는다. 따라서 어느 입력 방식이 더 안정적인지, 복합 감정이나 비유적 지시에서도 같은 효과가 나는지는 추가 실험이 필요하다.
12. IndexTTS2 공개 코드: duration·emotion API와 재현 조건
12.1 v2.0.0 코드와 model config 버전
이 글은 공개 저장소의 v2.0.0 태그가 가리키는 830f6f8f94a51fea23ab1d639027a86200075a4e, 2026년 3월 16일 커밋을 읽었다. 2025년 9월 최초 공개 시점의 코드라고 소급해서 부르지 않는다. 모델 설정은 IndexTeam/IndexTTS-2의 고정 리비전에서 확인했다.
대조한 설정의 T2S는 24층, 내부 차원 1,280, attention head 20개다. 텍스트 token 수는 12,000이고 음성 코드 8,194개 중 시작·종료용 코드가 따로 있다. S2M은 80개 mel bin, 22,050Hz와 hop 256을 사용한다. 설정 앞부분의 dataset.sample_rate: 24000만 보고 최종 출력이 24kHz라고 적으면 inference 경로와 맞지 않는다.
모델 weight를 내려받아 inference하거나 재학습한 것은 아니다. 아래는 파일과 호출 경로를 읽어 확인한 내용이다. 실행 가능성과 원 논문 성능 재현 여부는 별도 검증이 필요하다.
12.2 max_mel_tokens와 목표 duration의 차이
README에는 길이 제어 기능이 이 릴리스에서 아직 활성화되지 않았다고 적혀 있다. inference 코드는 문장, 화자 참조, 감정 참조나 vector를 받지만 논문처럼 임의의 목표 token 수를 길이 embedding으로 주입하는 API를 제공하지 않는다.
내부 T2S 코드는 두 개의 속도 embedding 항목을 고정된 0·1 인덱스로 읽어 조건에 붙인다. 논문의 ‘T번째 길이 embedding과 위치 embedding 공유’가 그대로 사용되는 호출이라고 볼 수 없다. max_mel_tokens는 생성 상한이다. 값을 줄여 종료되도록 하는 것과 문장 전체를 목표 길이에 맞춰 읽도록 조건을 주는 것은 다르다.
따라서 이 코드로 만든 사용 예제에 duration=5 같은 존재하지 않는 인자를 추가하지 않는다. 논문 Table 4의 결과를 공개 함수 한 번으로 재현했다고도 말하지 않는다. 길이 제어를 실제 제작에 적용하려면 해당 기능이 구현된 경로를 별도로 확인하고 파형 길이와 내용 누락을 함께 측정해야 한다.
12.3 논문 7개 감정과 공개 API 8개 값 비교
README가 설명하는 감정 vector 순서는 다음과 같다.
happy, angry, sad, afraid,
disgusted, melancholic, surprised, calm
논문과 달리 8개 항목이며 melancholic이 추가된다. 설정의 감정 모델 경로도 qwen0.6bemo4-merge이고, 내부 Qwen3 설정은 28층·차원 1,024로 확인된다. 이는 논문이 설명한 Qwen3-1.7B와 다른 공개 설정이다. 파일 경로와 구조를 확인한 것이며 실제 weight의 parameter 수를 실행해 센 것은 아니다.
원문은 감정별 embedding을 평균한 뒤 확률로 섞는다. 공개 vector 경로는 기본적으로 화자 스타일과 유사한 감정 prototype를 골라 가중하고, 남은 비중에 참조 음성의 감정 특징을 섞는다. use_random=True이면 prototype 선택에 무작위성이 들어간다. 논문의 7개 확률 합이 1인 식을 그대로 공개 API의 모든 입력에 적용할 수는 없다.
또한 텍스트·vector 모드를 사용하면 외부 감정 참조를 제거하고 화자 참조를 기본 감정 조건으로 사용한다. 텍스트 설명을 따로 주지 않으면 읽을 문장 자체를 감정 분석 입력으로 사용한다. 감정 음성, 직접 vector, 자연어 지시를 동시에 넣었을 때 모두 동등하게 합쳐질 것이라고 가정하지 말고 우선순위를 확인해야 한다.
12.4 S2M Euler step·sampling·외부 checkpoint 설정
공개 inference 경로는 GPT 내부 표현을 투영해 semantic codec embedding에 더한다. 이후 S2M에서 25번의 Euler 단계, guidance 값 0.7을 사용하고 BigVGANv2로 22.05kHz 파형을 만든다. 이는 확인한 코드의 기본값이며 논문이 따로 비교해 최적값이라고 입증한 수치는 아니다.
생성 기본값은 top_p=0.8, top_k=30, temperature=0.8, num_beams=3, repetition_penalty=10.0, max_mel_tokens=1500이다. 문장은 기본 최대 120개 텍스트 token 단위로 나누며 구간 사이에 200ms 묵음을 넣는다. 이 묵음도 최종 파일 길이에 영향을 준다. do_sample=False만 넘겨도 재현성이 확보된다고 말할 수 없다. 확인한 함수는 값을 읽은 뒤 내부 호출에는 True를 전달한다.
같은 Git 커밋을 사용한다고 실행 전체가 고정되는 것도 아니다. 코드가 별도로 가져오는 w2v-BERT, MaskGCT codec, CAMPPlus와 BigVGAN weight의 리비전도 고정해야 한다. 입력 참조, normalization, 문장 분할, seed와 하드웨어를 함께 기록해야 비교 가능한 실험이 된다. 논문에는 inference 지연·메모리·초당 throughput을 비교한 표가 없으므로 학습 GPU 수에서 서비스 비용을 추정하지 않는다.
13. IndexTTS2의 한계와 후속 실험
IndexTTS2에서 배울 만한 설계는 여러 제어 요구를 하나의 품질 점수에 섞지 않는 것이다. 화자 조건과 감정 조건을 분리하고, 목표 길이를 명시적으로 알리며, 압축 token에서 부족할 수 있는 정보는 내부 표현 경로로 보충한다. 세 단계 학습은 적은 감정 데이터와 큰 일반 데이터가 맡을 일을 나누려는 시도다.
실험 결과도 그 설계만큼 나누어 읽어야 한다. GPT 내부 표현은 여러 dataset에서 WER를 줄였지만 SS를 높이지는 않았다. 추가 학습 전략은 감정 표현에 중요했지만 제거했을 때 WER가 더 낮아지기도 했다. SeedTTS 영어에서는 새 모델의 청취 점수가 이전 모델보다 낮았다. 이 반례들은 부록 같은 주변 정보가 아니라 어떤 시스템을 선택할지 결정하는 핵심 근거다.
학습을 마친 뒤에는 다음 세 실험을 설계해 볼 수 있다. 이는 이 글에서 실행한 결과가 아니라 후속 실습안이다.
-
감정만 바꾸기: 화자 참조와 문장을 고정하고 감정 조건만 바꾼다. WER·SS·ES와 청취 평가를 함께 기록해 감정 변화가 내용이나 화자 보존을 해치지 않는지 본다.
-
길이만 바꾸기: 목표 길이 기능이 실제 제공되는 구현에서 같은 문장에 여러 배율을 준다. token 수뿐 아니라 파형 밀리초 오차, 묵음, 문장 누락과 운율을 따로 잰다. 현재 검토한 공개 API만으로 논문의 이 실험을 수행할 수 있다고 가정하지 않는다.
-
내부 표현 경로 비교하기: 같은 입력과 생성 조건에서 GPT latent representation의 유무를 비교한다. 내용 오류가 낮아지면서 화자 유사도가 변하는지 확인한다. 재학습이 필요한 제거 조건과 inference 단계에서 단순히 값을 지우는 조건은 동일한 실험이 아니다.
아직 알 수 없는 부분도 분명하다. GRL 하나의 기여, 각 학습 단계의 독립 효과, 길이 배율별 사람 평가와 매우 복잡한 감정 지시의 성능은 이 논문의 표만으로 결정할 수 없다. 한국어 품질이나 실제 제작 환경의 처리 비용도 검증되지 않았다. 이 논문은 감정·길이·명료함을 함께 다루는 구체적인 설계를 제공하며, 그 세 목표가 항상 같은 방향으로 움직이지 않는다는 점까지 읽을 때 학습 가치가 커진다.
14. 출처
- 원문 PDF, arXiv:2506.21619v2: method·학습 설정·전체 실험과 figure·table의 근거.
- 검토한 공개 코드: 본문에서 대조한 공개 구현·설정의 고정 버전.
- IndexTeam/IndexTTS-2의 고정 리비전: 본문에서 대조한 공개 구현·설정의 고정 버전.
- inference 코드: 본문에서 대조한 공개 구현·설정의 고정 버전.
자료 확인·수정: 2026년 9월 16일. 검토한 원문과 공개 구현의 버전은 위에 고정했다. 이번 수정에서는 전문 용어, 설명 문장, 검색 주제가 드러나는 제목과 이미지 배치를 보완했다.
관련 글
Paper Review
IndexTTS: An Industrial-Level Controllable and Efficient Zero-Shot Text-To-Speech System — voice cloning·병음 발음 제어 분석
IndexTTS v1의 SEQ3 입력, Conformer·Perceiver와 BigVGAN2 구조를 설명한다. 병음 교정률 94%의 분모, CER·WER·SS·MOS와 inference 속도를 원문 figure·table과 코드로 분석한다.
Paper Review
A Defense of the Quadratic Model — LLM 학습의 Gauss–Newton 근사와 안정성 분석
A Defense of the Quadratic Model의 Gauss–Newton 근사, Lanczos spectrum과 학습 안정성을 설명한다. batch 64 예제, 원문 figure·table, 공개 코드로 근사가 맞는 조건과 반례를 분석한다.
Paper Review
IndexTTS 2.5 Technical Report — multilingual TTS·GRPO 학습 분석
IndexTTS2.5의 multilingual TTS, 언어 conditioning, GRPO와 25Hz codec을 설명한다. 언어별 WER·SS, cross-lingual 감정 전이와 Zipformer·공개 DiT 구현의 차이를 분석한다.