跳转至

M9 · 不训练的模型能不能直接用 α 调情感?

状态 ⚠️ 假设被推翻
日期 提出 2026-08-15,按用户更正重写并跑完 2026-08-17
一句话 别的论文的模型不训练也能用 α 调情感(受控组数还更多),我们的训练改善的是可懂度而非情感可控性
上游 ← 用户想法「用其他论文里面的模型不训练直接加权来调节 alpha 情感,佐证我们训练的有效」
下游 必须收窄 novelty claim(OPEN G7)

编号变更(2026-08-18)

本页原为 M7。用户澄清 M7 想问的是另一件事 —— 对有显式情感 embedding 的模型 施加 α(见 M7)。本轮已完成的实验改编号为 M9, 内容与结论不变。

通常实验 ID 一经发布不重编,此处是例外: 权衡后认为「保住一份已完成、且产出了 F11 的记录」 优先于「编号绝不变动」。

本实验推翻了我们的核心假设

预期是「不训练就调不动」。实测恰好相反 —— 未训练的模型受控组数更多。 这正是 proposal §7 里标注的「打脸风险」,现在兑现了。

1 动机

我们的 DFD 由两部分组成:

  1. 机制:同一个 \(x_t\) 上跑两遍 DiT,\(v_{\text{ctrl}} = v_{\text{neu}} + \alpha(v_{\text{emo}}-v_{\text{neu}})\)
  2. 训练:在 ESD 平行对上微调 flow decoder(53,700 步)

机制是通用的 —— 任何 flow-matching TTS 都能这么算。那第 2 步到底有没有用?

2 假设

H:α 控制的有效性依赖我们的微调。未经训练的模型施加同样的 α, 情感强度不随 α 单调变化(或远弱于我们的模型)。

3 设计

只改模型,其余全部对齐

自变量 模型(3 档)
控制量 α 机制、p6_test_zh、α∈{0,.25,.5,.75,1,1.25,1.5}、seed 1234、eval_suite 原口径
判据 受控组数(delta>0.5) 为主(见 M4 的教训:delta 均值会被近零组带跑)
n 12 组 × 7 个 α = 84 条/档
模型 论文 我们训练过?
cv2 CosyVoice2-0.5B CosyVoice 2(另一篇论文)
cv3_frozen CosyVoice3 基座 CosyVoice 3
cv3_v4 CosyVoice3 + v4 本工作

4 运行

bash emo/exp/M7_untrained_baseline/launch.sh 7
三档各 84 条,卡 7,0 报错(接口适配见 §7)。

5 结果

定量(n=12 组/档)

受控组>0.5 失控<0.02 负 delta CER ↓ SECS MOS 饱和率
cv2(他方,未训练) 7/12 4 0 0.039 0.748 3.37 94%
cv3_frozen(未训练) 6/12 6 0 0.034 0.759 3.28 93%
cv3_v4(我们的) 5/12 5 1 0.029 0.754 3.24 95%

汇总口径:mono 0.847 / 0.861 / 0.861;delta 均值 0.553 / 0.468 / 0.382。 「饱和率」= 情感分落在 <0.05 或 >0.95 的比例。

定性 —— 直接听

同一句(0001_text00000)、同一情感(Angry)、同种子:

α=0(中性端) α=1(情感端)
cv2(他方,未训练)
cv3_frozen(未训练)
cv3_v4(我们的)

三档都听得出 α=0 → α=1 的情感变化。 未训练的两档并没有「调不动」。

6 结论

H 被推翻。 三条读法,按可靠性排序:

6.1 α 机制不需要我们的训练 —— 这是稳健结论

受控组数 7 / 6 / 5,未训练的反而更多。共享状态速度混合是 flow-matching 的 通用性质(与 CFG 同构),不依赖任何针对性微调。

6.2 我们的训练改善的是可懂度,不是情感可控性

CER 呈严格单调:cv2 0.039 > cv3_frozen 0.034 > cv3_v4 0.029。 在 α 扫描(含 α>1 外推)下,微调过的模型输出更清楚。这是训练带来的、可测的收益 —— 但它不是我们原本主张的那个收益

6.3 ⚠️ 「情感可控性没差别」这个结论本身也受限

三档的饱和率都是 93–95% —— F5 说的问题在这里同样成立。 指标几乎只输出 0 或 1,它分辨不出「调得顺不顺」,只能分辨「有没有跳过去」

所以准确的表述是:

在这把尺子下,训练与否对情感可控性没有可检测的差异。 不是「训练没用」,而是「这个指标测不出训练在情感维度上的作用」。

6.4 口径边界

  • cv2 vs cv3_v4 混杂了模型代次有没有训练两个变量 —— 所以 cv3_frozen vs cv3_v4 才是干净的因果对(6/12 vs 5/12,差 1 组,n=12,属噪声)
  • n=12 组,按约定属弱样本量; 定性结论(未训练也能调)可信,具体名次不可信

7 坑 —— 跨模型复用代码踩了三层接口差异

以为「estimator 签名一致就能原样跑」,实际差异分三层,逐层暴露:

差异 处理
estimator ✅ 签名相同 (x, mask, mu, t, spks, cond, streaming) 无需改动
flow 外壳 CV3 input_embedding → pre_lookahead_layer → repeat_interleave(2)
CV2 input_embedding → encoder(内含 ×2) → encoder_proj
build_flow_inputs_cv2,逐行对齐 CV2 自己的 inference()
声码器 CV3 inference(speech_feat, finalize)
CV2 inference(speech_feat, cache_source)
inspect.signature 分派
LLM prompt CV3 断言含 <|endofprompt|>;CV2 用 Qwen2LM 无此约束 只对 CV3 加 PROMPT_PREFIX

教训:接口"看起来一致"只说明最内层一致。跨模型复用要逐层验证, 而且要用目标模型自己的推理路径当参照,不能凭签名相同就假定行为相同。

→ 提炼进方法论 §5.8

8 引出

novelty claim 必须收窄。 不能再说「只有我们的可分离 \(v\) 能做到」。 可站住的表述: - 「共享状态速度混合是通用机制;我们刻画了它的行为边界」 (F1/F3/F9/F10) - 「我们的微调在 α 扫描下改善可懂度」(CER 0.039→0.029,单调) → OPEN G7 从「要不要换重心」变成「必须换」。