和之前的不同,是直接 音素 → 离散编码 → 波形; 音频编解码器编码作为中间表示,利用大规模且多样化的数据

任务总览

  • 音频线(相当于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语义可以连续也可以不连续