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。