CosyVoice v1, v2 논문 리뷰

CosyVoice: A Scalable Multilingual Zero-shot Text-to-speech Synthesizer based on Supervised Semantic Tokens
김호진's avatar
Aug 17, 2025
CosyVoice v1, v2 논문 리뷰
2407
CosyVoice2 논문(2412)이 있고 물론 더 좋다. Alibaba에서 나름 열심히 만드는 모델.

Recently, significant progress has been made in multi-modal large language models (LLMs), where the response latency and real-time factor of speech synthesis play a crucial role in the interactive experience.
그러므로 improved streaming speech 합성 모델 제안, with comprehensive and systematic optimizations.
특히 finite-scalar quatization to improve the codebook utilization of speech tokens.
LLM으로는 pretrained LLM을 백본으로 쓸 수 있게 설계했다.
그리고 LLM이후의 Flow matchig 모듈 부분도 streaming 기능을 위해 chunk-aware causal 형태를 도입했다.
 

최근의 TTS 모델들은 크게 3가지 카테고리로 나뉜다.
  1. Discrete Codec Language Model
  1. Feature Diffusion Model
    1. 최근에는 Phoneme도 사용하지 않는 구조인 E2, F5
  1. Hybrid systems
 
Streaming이 가능한지 아닌지는 어플리케이션 단에서 매우 중요한데 LLM base[Live-Speech1, 2, BASE TTS, LLM2Speech]에서만 탐구되었고, 2,3에서 연구된 바는 아직 많이 없다.
 
최근에는 LLM 기반의 TTS 모델들이 많이 개발되고 있다. high naturalness + zero-shot capacity
speech signal들을 token sequence로 discretize된다. → 이걸 텍스트처럼 다뤄서 처리하고, decoding해서 오디오 완성
즉 speech를 토큰으로 만드는 과정이 매우 중요하다.
기존의 speech token은 unsupervised 방식으로(Encoder + Decoder AutoEncoder, recon-gan loss로 학습) 학습되기 때문에 명시적으로 발음(semantic)에 대한 정보를 담진 못한다.
여기서는 speech tokenizer를 supervised 방식으로 학습하여 발음 정보를 담은 토큰이 되도록 유도한다. derived from a multilingual speech recognition model.
 
그리고 그걸로 생성 모델까지 모델링해본다. LLM for text-to-token generation and a conditional flow matching model 을 사용해서.
 

이전의 token들은 unsupervised - 그렇기 때문에 높은 압축률 + reconstruction에만 초점을 맞춘 방식으로 학습되어서 semantic 정보가 부족하고 not aligned well with corresponding text.
 
notion image
 
크게 3가지 모듈로 이루어져 있다고 볼 수 있다.
1) Speech Semantic tokenizer + 2) LM + 3) Flow matching module for token to mel → 최종 출력은 여기 Vocoder를 태워서 waveform으로
(개인적으로 이것도 모듈이 좀 많다는 생각은 있음)
 
  1. Speech token : S3S^3 tokenizer
토대로 잡는 기존 연구가 Codec보다는 STT다. Codec에서 당연하게 쓰는 개념과 STT에서 쓰는 개념이 합쳐진 듯한
Encoder로는 supervised automatic speech recognition(ASR - STT) model를 사용한다.
정확히는 기존에 본인들이 만든 SenseVoice ASR이라는 모델을 쓴다. Encoder안에 Encoder가 두개라고 말을 하는데 Encoder1 후 VQ를 적용해서 speech token을 만들고, 이게 다음 Encoder2를 태워서 text를 예측해낼 수 있게 학습한다.
그래서 ASR을 목적으로 학습하면서, 중간의 Quantized vector에 발음에 대한 정보를 담기도록 해서 Speech 생성시 더 활용하기 좋은 Token을 만든다는 개념.
  • VQ자체는 새로운 방식을 사용하진 않은 것 같다. codebook + EMA update
어떻게보면 Encoder Decoder인데 Decoder의 output distribution이 text인??
그래서 본인을 recon하는게 아니라 다른 target text를 predict해야하기 때문에 supervised manner라고 위에서 말한 것. recond보다는 훨씬 생성 모델링의 목적에 맞는 방법이라고 볼 수 있다!
 
  1. Large Language Model for TTS
auto-regressive speech token generation problem with a large language model
LLM의 input을 잘 구성하는게 중요하다.(어떻게 구성하느냐에 따라 voice cloning등이 가능해짐)
notion image
 
sos, eos, speech_start token과 speaker token v, 그리고
  • Y = TextEncoder(BPE(Script))
  • : speech token
같은 시퀀스로 처리하는데 speeck와 text token의 분포가 다르기 때문에 text만 linear layer를 한번 통과시킨다.
Language model의 형태로 학습하기 때문에 cross-attention이 아니라 전부 하나의 시퀀스로 처리하는 것 같다.
 
teacher forcing next token prediction(기존 AR)으로 학습하고, loss 계산하는 부분은 speech 부분만. 기존 LM과 같이 cross entropy loss다.
 
  1. Optimal-transport Conditional Flow Matching
처음의 encoder1 + encoder2(which output is text)를 보면 알 수 있듯이, quantize한 speech token을 다시 오디오로 만들기위해 학습되는 부분(Decoder)이 없다.
따라서 speech token → audio 모듈을 별개로 학습해서 가져야한다. 여기서는 speech token → mel spectrogram → audio(by vocoder)로 한다. vocoder는 따로 학습하진 않음.
 
speaker vector, output speech token이 condition으로 사용되는 Flow matching denoising. 즉, LM단에서는 semantic token(항상 헷갈린다. semantic이라고 하면 더 담는 것 같은데 발음 정보만 담기는 벡터.)만 뱉고, 여기서 speaker 정보가 들어간다.
 
  • Zero shot
CosyVoice 모델은 제로샷 In-context learning 능력을 보여주며, 짧은 참고 음성 샘플만으로도 임의의 목소리를 복제할 수 있다.
대신 input을 임의로 잘 구성해야한다. zero shot voice cloning하려면 phoneme embedder와 duration prediction이 필요한 아키텍처들도 있는데 그것보단 훨씬 쉽다.
 
notion image
LLM 파트 뿐만 아니라 flow matching 과정에도 speaker embedding이 들어가서 zero shot - voice cloning을 돕는다.
 
  • Evaluation on S3 tokenizer
일단 Suprvised Semantic token의 성능이 중요하다.
notion image
  1. 원래의 ASR(Conformer)에 VQ를 넣어도 성능은 약간만 하락했다.(약간의 기준이 뭐지)
    1. WER 2.62% → 3.13% 로 소폭 증가
  1. 의 semantic 정보 보존 능력 평가
    1. Whisper보다 S3가 중국어기준 더 성능이 좋다(중국어로 대부분 학습해서 그런듯하다). VQ로 Tokenize를 했는데도! lid는 무슨 언어인지 알려줬는지 아닌지를 의미
한개의 Codebook, 4096 entries를 사용했다,
 
 
LLM Model detail.
pre-trained를 활용한건 없고 생각보다 LM 파트 자체는 크지 않네. Text encoder가 오히려 생각보다 크다.
notion image
normal은 80만 스텝 학습.
 
모델 디테일 : Text encoder, LM은 위의 표
  • Speech tokenizer
    • ESPNet Conformer ASR model as the backbone and insert the vector quantizer after the first six encoder layers. There is a single codebook with 4,096 codes
그런데 Flow matching 파트에 대한 모델 디테일이 없어서 어디가 얼마나 역할을 하는지 잘 모르겠다.
LM이 대부분의 역할을 하고 FM은 detail을 다듬는 역할만 하는게 아니라, 분리되어서 동등한 수준의 작업을 맡는다고하면 또 변형할 부분이 있을 것 같은데 2를 봐야 알듯하다.
 
 
다른 방법론들과 성능 비교
notion image
Exp-4 Large scale을 보면 scale이 커질수록 성능이 좋아지는 현상을 보였다.
Phoneme이 아니라 BPE가 성능이 더 좋다.
Speaker similarity도 꽤 좋아보인다.
tokenizer를 썼을 때 확실히 성능이 더 좋아졌다.
 
 
사용한 데이터양
notion image
 
 
 

CosyVoice2

CosyVoice1과 마찬가지로, 음성 신호의 의미 정보(semantic)와 음향 정보(acoustic)를 분리하여 각각 독립적으로 모델링하는 철학을 기반으로 설계되었다.
즉, script가 어떻게 발음 되어야하는지(LM)화자의 목소리 톤, 억양, 발음적 특성 같은 음향적 요소(Flow)를 따로, 순서대로 처리한다.
 
각 파트들
  1. Text Tokenizer
    1. raw text → BPE-based text tokenizer
      임의로 phoneme을 알아낼 수고가 없을 뿐더러 문맥에 따른 발음을 할 수가 있어서 좋다.
      발음의 자연스러움과 general한 학습을 위해 한 토큰이 너무 길지 않게 토크나이즈 한다.
  1. Supervised Semantic Speech Tokenizer
    1. SenseVoice-Large ASR model을 쓰고(= CosyVoice1), 뒤에는 FSQ module을 사용함
      그리고 Encoder 2와 ASR Decoder를 통해 posterior text distribution(script)를 예측하도록 학습되는건 이전과 같다.
       
      FSQ를 하는 방법 from https://arxiv.org/pdf/2309.15505
      FSQ는 다음 두 단계를 통해 연속적인 벡터를 정수형 코드로 양자화하는 방식입니다
      1. 차원 축소 및 바운딩 (Bounding):
          • VAE 인코더의 출력을 d차원으로 줄입니다. (예: d=5)
          • 각 차원의 값을 tanh 등을 써서 미리 정해진 범위로 제한합니다. (예: [-K, K]
      1. 스칼라 양자화 (Scalar Quantization):
          • 각 차원의 값을 미리 정해둔 L개의 값 중 하나로 반올림하여 정수로 만듭니다.
          • 예: L=5면 가능한 값은 [-2, -1, 0, 1, 2]처럼 제한됩니다.
      → 최종적으로 생성되는 벡터 는 가능한 값의 조합으로 이루어진 격자(grid) 위에 위치하게 되며, 암묵적인 코드북 크기|C| = L^d입니다.
      그리고 이걸 Up Projection Layer에 태우면 코드북 벡터를 얻은게 된다.
       
       
      즉 따로 코드북 벡터를 관리하거나, 매칭을 위한 연산이 없기 때문에 VQ의 복잡성이 많이 내려간다. 코드북 활용률도 일반 VQ보다 훨씬 높다.
       
      by chatGPT
      notion image
       
      downsampled sample rate가 25Hz
       
  1. Unified Text-Speech Language Model
Backbone LLM으로 Qwen2.5-0.5B를 사용했다.
notion image
CosyVoice1과 다르게 1) speaker embedding을 없앴고, 2) text encoder도 없앴다.
1) information leaking이 있었고 2) Qwen2.5 쓰면 알아서 text-speech align을 잘해서 없앴다고함
→ 모델 구조가 단순해졌다!
 
Streaming 모드는 output 뿐만 아니라 input도 전체 문장말고 한단어씩 들어오는걸 처리할 수 있도록 한다.
notion image
Streaming과 Non-streaming의 차이는 LM에 input sequence가 구성되는 방법에만 있다.
 
  • Non-Streaming
    • [S(sos), all text tokens, T(turn of speech), all speech tokens, E(eos)]
      그냥 순서대로 concat
  • Streaming
    • text와 speech를 사전에 정의한 비율 N:M 대로 섞는다.
      항상 N개의 text token, 다음 M개의 speech token 이런 순서대로 처리된다.
      학습 과정에서 모델이 speech를 뱉고 다음 토큰으로 text가 들어온 상황에는 filling token이라는걸 뱉도록 학습된다. inference때는 모델이 filling token을 뱉으면 추가로 text token을 임의로 Input seqeunce에 붙여서 다시 넣어준다.
      이제 text token을 다 넣었으면 turn of speech를 넣고, 그 뒤로는 항상 speech만 뱉는다.
      실험결과는 N, M을 각각 5, 15를 사용했다.
 
두가지 모드 학습을 병렬적으로 unified model에 한다. 기타 추가 기능들은 사용가능한 토큰들을 어떤 순서대로 넣느냐에 따라서 구현된다.
 
  1. Chunk-aware Flow Matching
notion image
acoustic feature를 위해 Mel spectrogram을 사용한다. 50 Hz frame rate, 24kHz sampling rate
speech token은 25Hz니 2배로 업스케일해서 쓴다. 이 부분이 중요해보이네
그전에 1D convolution layer를 추가해서 뒤에나올 causal transformer가 미래정보를 살짝 볼 수 있게한다.(= receptive field 크기만큼 보겠지 1 layer면 Kernel size만큼)
→ Cousal Upsampling, Transformer
→ Upsampled Speech token
→ N x layers Causal Conv-Transformer UNet
 
목표는 speech token으로 mel spectrogram을 예측하는 것이다. by CFM
A causal convolutional Transformer UNet is employed to learn the above ODE with the up-sampled token µ, masked Mel spectrogram X˜1, speaker embedding2 v and timestep t
  • 학습할 때 70~100 masking → 나중에 inpainting 활용을 위해, training은 [0,1] uniform, inference는 초기 timestep을 더 자주 샘플링하게 코사인으로
    • notion image
 
일반적인 FM으로는 스트리밍 가능하지 않기 때문에 뭔가 추가해야한다.
마스킹 방법을 4가지를 두고 학습해서 필요한 성능-latency trade-off에 맞게 선택해서 쓸 수 있게 했다.
 
 
 
Latency 분석
Latency는 아래 3가지 이유로 생긴다.
  1. Speech token 생성 (LM 추론)
  1. Mel spectrogram 재구성 (Flow Matching)
  1. Mel spectrogram → Waveform 합성 (Vocoder)
여기 무슨 말을 할지를 결정하는 LLM의 N 토큰을 뱉는 latency도 더해진다.
 
기타 다른 것들도 있지만 우선 실험 결과
 
notion image
Speech token만 모델링할때는 오히려 화자에 대한 정보는 제거되는게 좋다. 그래서 클러스터링이 안되는지, 특정 화자는 특정 코드북만 사용하는건 아닌지 시각화해봤는데 잘 분리된 듯 보임
notion image
 
 
성능비교
notion image
 
 
notion image
 
Modular Ablation Study
notion image
점점 좋아지는데 pre-trained LLM, FSQ가 특히 좋았다.
Pitch Loss는 학습할 때 도입한 방법이라는데 어떻게 한건지 모르겠다.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Share article
Subscribe to our newsletter

Kim Hojin