Contents

Cosy Voice

项目地址:https://github.com/FunAudioLLM/CosyVoice

论文地址:https://fun-audio-llm.github.io/pdf/CosyVoice_v1.pdf

Supervised Semantic Tokens for Speech

核心思路:在网络的中间某一层插入一个“打格子”层,把格子坐标当作离散化的 token。这样可以保证 token 有语意层面的信息。

基于现有的一个 ASR(automatic speech recognition)模型训练出一个语音 tokenizer,用于将输入的 Mel Spectrogram 转化为一些离散的 tokens。一个 ASR 模型,它包含 encoder-decoder 两部分。将 encoder 拆分成两个部分:encoder 1 和 encoder 2,并在中间插入一个向量量化层。进行有监督训练后丢弃掉 encoder 2 和 decoder,只保留 encoder 1 和向量量化层,就得到了 tokenizer。具体见下

Positional Encoding + Encoder 1

把输入的 Mel spectrogram 转化为向量表示: 的第 帧记作

Vector Quantizer

Vector Quantizer(VQ)包含一个由若干向量组成的 codebook ,输入向量 会被分配到距离它最近的向量上,以它的指标作为 token

其中 范数。Codebook 的向量,在训练过程中指数平均: 其中 是一个预定义衰减系数。把每个 token 在 Codebook 中对应的向量,当作该层量化后的隐藏表示:

Positional Encoding + Encoder 2

插入一个额外的 positional encoding,来增强时间信息。

ASR Decoder

直接复用原有的 ASR Decoder,输出概率分布 其中 是偏移了一位的监督数据,用于预测下一个 token。

LLM for TTS

LLM 用于输出若干语音 token。它的自回归序列依次由这样一些要素构成:

  • Ⓢ:序列开始
  • :speaker embedding,通过与训练的声纹模型直接获得
  • :文本 embedding
    • 通过在 BPE tokenizer 的基础上再增加一个 encoder,将文本和语音对齐
  • Ⓣ:语音 token 开始,用于分隔文本 token 和语音 token
  • :语音 tokens
  • Ⓔ:序列结束

Flow Matching

可以看作是一种比 Diffusion Model 更优秀的生成模型,具体技术比较复杂。参见这篇文献:

Flow Matching for Generative Modeling

Flow matching 的技术有点复杂, 我单独写了一篇笔记:Flow Matching

和原本的 Flow Matching 的一个小小的不同在于,这里添加了一个时间 decay

意思是在执行的时候,给靠前的时间更多的 step。

整体架构图

/images/cosy_voice_architecture.png