和之前的不同,是直接 音素 → 离散编码 → 波形; 音频编解码器编码作为中间表示,利用大规模且多样化的数据
任务总览
- 音频线(相当于label)原始 waveform → EnCodec encoder → latent z → RVQ → token C
- 同时还将label分层使用了,第一层c[:,1]是大颗粒度的(一般认为是speaker信息),使用自回归;后面的2-8层是一些小部分,使用NAR。
- 文本线(TTS LM训练)音素 x + prompt token → Transformer LM → 预测 token C
- 其中prompt token是和上面使用同一个EnCodec编码出来的,
过往TTS
- 利用Mel Spectrogram做中间表示,再生成波形。
- 有几个概念:
- Speaker encoder 主要是“提供说话人条件”,可以zero-shot clone
- Acoustic Model 负责内容(词、韵律)变成频谱
- Vocoder 负责音质(把频谱变成声波)
- Speech Quantization
- 如果直接表示raw audio的话,首先要2^16来表示一个timestep,再加上长序列就会很长
- μ-law可以保持reconstruction quality的同时,把65536降低到256,但是还是很长
- vector quantization更高效,但是丢失了speaker的信息
- AudioLM 发现:自监督 token → 表示内容;neural codec token → 表示音色、说话人、录音条件( k-means + neural codec)
Model
先是利用了一个pre-trained的neural audio codec,RVQ:有8个(或者更多)量化器,每个量化器只是学习上一个的残差(感觉有点像泰勒展开一样),逐步去逼近编码x得到的z
1z → [Q1] → c1 → residual1 2 ↓ 3 [Q2] → c2 → residual2 4 ... 5 [Q8] → c8 → residual8 6 7final_quantized = c1 + c2 + ... + c8在第一层量化的时候采用自回归(带mask的tranformer)(每个token其实是codebook的index了,不是我最开始认为的像embedding层一样的向量)
- 拼接c~[:,1] + c[:,1] 形成完整序列,其中~是prompt,只当作上下文
- Transformer LM 只计算 c[:,1] 的损失
- 事实上只使用了transformer的decoder部分
在其他层的时候,采用非自回归,一次性预测所有token
- 同层 token 并行生成;推理快
- 每层是独立的,互相不影响
model具有上下文学习能力,可以通过prompting,不需要微调直接clone说话人的语音
- prompting设计
- 将文本转换为音素序列,并将注册的录音编码成声学矩阵,从而形成音素提示和声学提示。(phoneme prompt and acoustic prompt)
- AR 模型使用 采样解码(就是nanoGPT里面提到的top-k/p),以 prompt 为条件,因为 beam search 有时会导致 LM 进入“无限循环”。
- NAR 模型使用 贪心解码(不会像AR一样累计错误)
- 然后就丢给decoder生成waveform
- 另外VALL-E的prompt语义可以连续也可以不连续
- prompting设计