Glossary 概念登记¶
每个概念在此有唯一权威定义。别处提到就链回来。 这里登记定义,不登记结论 —— 结论在 05 Findings。
alpha¶
情感强度旋钮。 推理时对情感方向 A 的标量系数:
\(\alpha = 0\) 给出中性,\(\alpha = 1\) 给出情感样本本身的强度,\(\alpha > 1\) 为外推。 在调色板里推广为多情感权重 \(\{w_e\}\),其中 \(w_{\text{neu}} = 1 - \sum_e \alpha_e\)。
A(情感方向)¶
两次 DiT 前向的速度之差:\(A := v_{\text{emo}} - v_{\text{neu}}\),形状 \((1,80,K)\)。
两个分支在同一个 \(x_t\)、同一串 gen_token 上求速度,只有参考前缀不同 —— 两者共有的语义内容在相减时抵消。
构造,非学习
训练里没有任何损失直接监督 \(A\)。它只在推理时被构造出来。
源–闸门(source–gate)¶
情感的两个来源及其分工:
| 通道 | 角色 |
|---|---|
| LLM token | 源 —— 决定有没有情感(语速、韵律骨架) |
| flow 的 \(\alpha\) | 闸门 —— 决定情感放出多少(频谱层强度) |
生成段 / 前缀段¶
ICL 推理里张量沿时间轴分两段:
- 前缀段(长度
plen):参考音频占据,最后被切掉 - 生成段(长度 \(K\)):目标文本的输出,这才是产物
各分支前缀可不等长;生成段必须等长才能逐帧混合。
K / L¶
\(K\) = mel 帧数 @ 50 Hz(1 帧 = 20 ms);\(L\) = 语音 token 数 @ 25 Hz(1 token = 40 ms)。 恒有 \(K = 2L\)。
长度离散度(spread)¶
同一句话在各情感下的生成长度之比:\(\max_e K_e / \min_e K_e\)。
逐帧混合要求 \(\text{spread} \lesssim 1.05\)。参照值见 Findings F3。
warp / 时间轴重心¶
把各分支的原生时间轴与共同输出时间轴互相映射的两张索引表:
- \(U_e[k]\):输出帧 \(k\) → 分支 \(e\) 的第几帧(把 \(v_e\) 搬回输出轴)
- \(D_e[j]\):分支帧 \(j\) → 输出的第几帧(把 \(x\) 搬到分支轴)
二者互为反函数。不是学出来的 —— uniform 是等比例索引,dtw 是动态规划。
输出长度取凸组合 \(K^* = \sum_e w_e K_e\),因而混合时长成为 \(\alpha\) 的连续函数。
条件侧 vs 状态侧¶
长度对齐可以改两样东西之一:
| 改什么 | 后果 | |
|---|---|---|
| 条件侧 | token / \(\mu\) 重采样到 \(K^*\) | 模型看到被改造过的输入 |
| 状态侧 | 只搬运积分变量 \(x\) | 条件全原生,模型只见训练时见过的输入 |
mono / delta¶
- mono:相邻 \(\alpha\) 步中情感分上升的比例,按 (key, 情感) 分组平均。 7 个 \(\alpha\) → 6 个间隔 → 量化到 1/6 格点
- delta:\(\alpha{=}1\) 与 \(\alpha{=}0\) 的情感分之差
Warning
两者都基于 emotion2vec 的输出,而该分类器在本任务上饱和(见 F5)。 n=12 时 mono 的格点粗糙到两个不同模型可能撞上同一个值。
三种余弦口径¶
代码里有三处在算余弦,口径互不相同。混用会读错数。
① cos_A_B / cos_A_target —— 整体拉平¶
诊断量,F8 引用的就是它。把整个 \((B,80,K)\) 张量拉平成一个向量:
train_svd_flow_v4.py:176,用 torch.linalg.vector_norm(整个张量) 而非逐帧。
这是能量加权的,不是逐帧等权
展开可见它等于按 \(\|a_\tau\|\|b_\tau\|\) 加权的逐帧余弦平均。 而 F6 测得 \(A\) 的能量集中在句首(2.04×,逐帧范数变异 0.389), 因此高能量帧主导了读数。
所以 cos_A_target = 0.959 的正确读法是
「在能量加权意义下 \(A\) 与真实情感方向高度一致」,
不是「\(A\) 在每一帧都指向正确方向」。逐帧等权版未测。
② \(\mathcal{L}_{\text{ortho}}\) —— 跨通道¶
训练损失项。沿时间轴归一化,使每个 mel 通道成为一条时间序列的单位向量, 再取 \(80\times80\) 的通道两两余弦:
既不是逐帧、也不是整体拉平。 详见 03 Method。
③ frame_cos —— 逐帧等权¶
M5 探针用的。先对每帧的 80 维求余弦,再对帧求平均:
注意它比较的是同一张量的不同帧(\(k\) vs \(k'\)),用于测 \(A\) 沿时间的方向一致性, 不是比 \(A\) 与 \(B\)。见 F6 的「帧间方向一致性 0.367」。
有效秩(participation ratio)¶
\(\sigma_i\) 为奇异值。取值 \([1, \min(80,K)]\),衡量能量分布在多少个方向上。
子空间重叠¶
两个 \(80\times r\) 正交基之间主角余弦平方的均值,取值 \([0,1]\)。 用于与时间对齐无关地比较两段变长信号的主方向。 80 维里取 5 维的随机基线 = \(5/80 = 0.0625\)。
数据集与划分¶
- ESD:20 说话人 × 5 情感的平行语料。本项目主力数据集
- 平行组:同说话人同文本的 5 个情感录音,共 6724 组(zh 3386 / en 3338)
- P6 held-out:
p6_test_zh/p6_test_en,按说话人+文本划出的测试集