wikiAudio10|CosyVoice:监督语义 token、流式生成与后训练04|分块声学生成:前瞻、注意力遮罩与流匹配
6 分钟
0 次观看

04|分块声学生成:前瞻、注意力遮罩与流匹配

即使语音 LM 已经逐块产生 token,后面的声学生成器仍可能等待完整句子。CosyVoice 2 把 token 到 mel 的流匹配网络也纳入分块设计,通过受控前瞻和注意力遮罩限制可读取的上下文。

本篇解释三个时间尺度:25 Hz token、50 Hz mel、24 kHz 波形。网络内部的流时间又是另一条 0→1 的积分进程,不应与这三条音频时间轴混用。CosyVoice 2 §2.4

低延迟是整个解码链的属性;一个因果注意力 mask 不能抵消前端和声码器的未来依赖。

图 1|token 前瞻、二倍上采样、分块 CFM 与波形输出

图 1|token 前瞻、二倍上采样、分块 CFM 与波形输出

1. token 帧率与 mel 帧率

表示每秒数量15 token 对应的约定时长
语音 token250.6 秒
mel 帧50约 30 帧
波形点24,00014,400 点

这是速率换算,不等于首包墙钟延迟一定是 0.6 秒。token 由模型计算生成,可能快于播放;不过若输入来自真实录音在线编码,等待未来录音就会直接增加采集延迟。

前瞻卷积在 token 上读取一定数量的后续位置,再二倍上采样到 mel 时间轴。若取教学前瞻 P=2,token 时间范围为 2/25=80 ms;在 TTS 输出端,具体额外等待取决于未来两个 token 何时生成。

2. 分块 mask 与逐位置因果 mask

下面用块长 2 的简化规则:查询可以看过去所有块及当前块,不能看后续块。它用于解释“块内双向、块间因果”,不冒充官方全部四种 mask 的逐位实现。

Ai,j=1[⌊j/C⌋≤⌊i/C⌋].A_{i,j}=\mathbf1\left[\left\lfloor j/C\right\rfloor\le \left\lfloor i/C\right\rfloor\right].
符号、形状与约定
符号解释与例值
i,ji,j查询和键的位置索引,从 0 开始。
CC块大小,教学值 2。
⌊⋅⌋\lfloor\cdot\rfloor向下取整,把位置映射到块编号。
1[⋅],A\mathbf1[\cdot],A条件成立时为 1;这里 1 表示允许,不是 blocked。

位置 0 可以看位置 1,因为同属第一块;它不能看位置 2。逐位置严格因果则连位置 1 也不可看。需要转换到某个 attention API 时,必须确认布尔 True 表示允许还是屏蔽,不能按变量名猜。

图 2|逐位置因果与块内双向遮罩的可见范围

图 2|逐位置因果与块内双向遮罩的可见范围

def chunk_allow(length, chunk_size):
    q=torch.arange(length)[:,None]
    k=torch.arange(length)[None,:]
    return k//chunk_size <= q//chunk_size

CPU 检查把第 2 位置以后的 value 全部增加 100,第一块输出完全不变。这只验证该教学 attention 层的可见性;完整模型还要检查卷积、归一化、上采样与每一次流积分调用。

3. 跨积分步的因果性约束

流匹配推理反复更新状态。若任意一步使用了完整未来条件,未来信息就可能进入当前块;后续再加 mask 也不能撤销已经泄漏的信息。因此应把展开后的多步网络视为一条长计算图,逐个检查所有路径。

路径需要检查常见遗漏
token 前处理前瞻范围及末块补齐把右 padding 当作无前瞻
CFM 注意力每步采用的 mask首步正确、后续步改回全上下文
卷积/UNet右侧感受野仅遮罩 attention
mel→波形声码器上下文和裁切输出边界重复或破音

原报告用非因果、全因果及不同分块上下文配置统一训练。其目的在于兼容质量/延迟取舍,而不是宣称所有配置具有相同延迟。

4. CosyVoice 的条件与训练目标

CosyVoice 2 报告用 token、参考 mel、说话人向量和流时间作条件,并使用预测速度与目标速度的 L1 差异。F5 教学常见的 MSE 不能原封不动称为这里的论文损失。

对单个速度向量,预测 (1,4)、目标 (2,2),元素平均 L1 为 (1+2)/2=1.5;平均平方误差则为 (1+4)/2=2.5。两者梯度与异常值敏感性不同,日志数值也不可直接对比。

本章把论文条件、损失类型和教学 mask 分开记录,便于读者回到源码逐项核对。

5. 首块、续块与末块

首块缺少左历史,常对延迟最敏感;续块可利用已有上下文;末块必须在没有真实未来 token 时按协议补齐并及时结束。只测中间长片段,容易漏掉首尾错误。固定一句话,用整句与不同分块切法比较边界附近波形,是比只听一段顺滑样例更有区分力的验证。

分块结果相近需要实际对照;不能因为每块 shape 正确就宣称等价于整句推理。

阅读 流式指标与状态继续检查服务层首音延迟。

专题导航:TTS 总目录 · 上级章节 · 实验代码与实测记录

正在连接 GitHub 评论…