跳转至

Glossary 概念登记

每个概念在此有唯一权威定义。别处提到就链回来。 这里登记定义,不登记结论 —— 结论在 05 Findings。


alpha

情感强度旋钮。 推理时对情感方向 A 的标量系数:

\[v_{\text{ctrl}} = v_{\text{neu}} + \alpha \cdot 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)\) 张量拉平成一个向量:

\[\cos_{\text{flat}}(A,B)=\frac{\sum_{\tau}\langle a_\tau, b_\tau\rangle} {\sqrt{\sum_\tau\|a_\tau\|^2}\ \sqrt{\sum_\tau\|b_\tau\|^2}}\]

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\) 的通道两两余弦:

\[\hat{A}_i=\frac{A_i}{\|A_i\|},\quad \mathcal{L}_{\text{ortho}}=\frac{1}{80^2}\sum_{i,j}\bigl(\hat{A}_i\cdot\hat{B}_j\bigr)^2\]

既不是逐帧、也不是整体拉平。 详见 03 Method。

③ frame_cos —— 逐帧等权

M5 探针用的。先对每帧的 80 维求余弦,再对帧求平均:

\[\frac{1}{T}\sum_{\tau}\frac{\langle a_\tau,b_\tau\rangle}{\|a_\tau\|\|b_\tau\|}\]

注意它比较的是同一张量的不同帧(\(k\) vs \(k'\)),用于测 \(A\) 沿时间的方向一致性, 不是比 \(A\) 与 \(B\)。见 F6 的「帧间方向一致性 0.367」。


有效秩(participation ratio)

\[\text{eff-rank}(M) = \frac{(\sum_i \sigma_i)^2}{\sum_i \sigma_i^2}\]

\(\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,按说话人+文本划出的测试集