S8 · 基线对比:谁能控制情感强度、怎么比、能不能比¶
| 批次 / 日期 | 合作者列对象(微信)· 用户 09-07:"只需检验他们是否能够控制情感强度即可;RAR-based = Zhu et al. 2019"· 09-11:"一定要找好对比的模型……再认真找一下这些文章的评测渠道……MORL-TTS 的 EIT 也补上当参考分数" |
| 延续自 | 新实验;我们的曲线用 S7 T0 |
| 状态 | ✅ 九条臂在 ESD 与 RAVDESS 上全部完成并打分(ESD 09-13 · RAVDESS 09-15 · EmoSphere-TTS 09-17):Mixed-Emotions ① · EmoKnob ① · EmoSphere-TTS ①(自训 16 kHz 声码器,§5.5)· CosyVoice3 ②③ · EmotiVoice ②③ · PromptTTS ③ · VALL-E X。EmoSphere++ 未跑(§5.6) |
1 目的与用法¶
目的:基线节只回答一个问题——基线能不能像 α 一样连续、单调、有跨度地调情感强度。不比音质排名(任务、语言、骨干都不同)。 可比性前提:我们是语音→语音编辑(输入一条情感录音),基线多为文本→语音;可比的是"强度旋钮的行为",同一协议下三档是否可分、跨度多大、弱档能否到中立。
2 三类控制方式(对比的组织方式)¶
能直接跑的基线按强度从哪里来分三类,每类的三档定义方式不同,评测协议完全相同。
| 类 | 定义 | 三档怎么产生 | 成员 |
|---|---|---|---|
| ① 显式可调 | 模型自己就有强度旋钮,用它原生的接口 | 取该接口的三个值 | Mixed-Emotions(属性向量中目标情感占比)· EmoSphere-TTS / ++(球坐标半径)· EmoKnob(强度标量)· 我们(α) |
| ② 隐式可调 | 模型没有强度接口,但情感是通过某个内部向量注入的;我们在推理时改这个向量的模长(情感向量与中立向量之间插值),造出强度 | 内部向量 e_α = (1−α)·e_neu + α·e_emo,α 取三点 | CosyVoice3-instruct(instruct 嵌入)· EmotiVoice(情感嵌入)· VALL-E X(参考音频的声学提示) |
| ③ 提示词控制 | 只能用文字说"更强 / 更弱",不碰内部 | slightly / moderately / very(中文:有点 / 比较 / 非常) | PromptTTS · CosyVoice3-instruct · EmotiVoice |
② 与 ③ 有重叠成员(CosyVoice3、EmotiVoice):同一个模型两种做法都跑,这本身就是一个有意思的对照——内部插值能不能做到提示词做不到的连续控制。VALL-E X 没有文字接口,只进 ②。
为什么要分这三类:论文的论点不是"我们比基线强",而是"连续强度控制需要专门的机制"。① 是同类方法的正面比较;② 回答"不做专门设计、只在嵌入上插值够不够";③ 回答"语言模型时代直接用提示词够不够"。
2.1 每类的实现细节(跑前定,跑后不改)¶
计划 9 项,实际跑出 8 项;EmoSphere-TTS 靠自训 16 kHz 声码器补上(§5.5),EmoSphere++ 未跑。末列给出去向。
| 类 | 模型 | 动哪个量 | 三档取值 | 实现位置 | 结果 |
|---|---|---|---|---|---|
| ① | 我们 | α(速度场混合系数) | 0.5 / 0.75 / 1.0 | Gen.sample_pa |
✅ §5.2 |
| ① | Mixed-Emotions | 情感属性向量中目标情感那一维(0 = 完全在场,见 §5.7) | 弱 / 中 / 强 = 0.8 / 0.4 / 0.0,其余四维固定 1.0 | reader.py L116–124 |
✅ 已跑(§5.2) |
| ① | EmoSphere-TTS | 球坐标情感向量的半径 emo_inten |
官方配置 esd_0.1 / 0.5 / 0.9 = 0.1 / 0.5 / 0.9 | run.py --infer + 自训 16 kHz 声码器 |
✅ §5.2;EmoSphere++ 未跑(§5.5) |
| ① | EmoKnob | 情感方向向量的强度标量 | demo 默认范围的 1/2、3/4、1 | demo.ipynb 接口 |
✅ §5.2 |
| ② | CosyVoice3-instruct | instruct 文本编码后的嵌入 | e_α = (1−α)·e(中立指令) + α·e(情感指令),α = 0.5 / 0.75 / 1.0 | 拦截 instruct 嵌入,插值后送入 | ✅ §5.2 |
| ② | EmotiVoice | 情感嵌入(其 prompt encoder 输出) | 同上,中立嵌入与目标情感嵌入插值 | 拦截情感嵌入 | ✅ §5.2 |
| ② | VALL-E X | 参考音频的声学提示 | 原计划在 prompt token 的连续表示上插值 | 拦截 prompt 编码 | ⚠️ ② 不适用:其声学提示是离散 codec token,无法线性插值。按本节末的规则只出单档,EIT 记 N/A |
| ③ | PromptTTS | 提示词文本 | slightly / moderately / very + 情感词 | 只改输入文本 | ✅ 已跑(§5.2) |
| ③ | CosyVoice3 · EmotiVoice | 提示词文本 | 有点 / 比较 / 非常 + 情感词 | 只改输入文本 | ✅ §5.2 |
② 的通用规则:只在"中立"与"目标情感"两个端点之间线性插值,不外推,与我们的 α ∈ [0, 1] 同构。若某模型没有可用的中立端点或其表示不可插值(如 VALL-E X 的离散 token),则记为"② 不适用",在结果表标注,不强行构造。
③ 类的一处实现修正(2026-09-13):CosyVoice3 的提示词最初写成整句指令("用非常生气的语气说这句话")作为 prompt_text 传入,LLM 会把指令当成内容念出来,CER 高达 0.7–0.85。改为只给「程度词 + 情感词」(非常生气<|endofprompt|>)后 CER 降到 0.02–0.08。§5.2 是修正后的数据,详见 §5.4 第 1 条。
2.2 公平性约束¶
| 约束 | 内容 | 理由 |
|---|---|---|
| 同文本 | 所有模型合成同一批 ESD test 句子(中文模型用 zh 侧,英文模型用 en 侧) | 文本难度一致 |
| 同说话人参考 | 支持说话人克隆的(EmoKnob、VALL-E X、我们)统一用该句的真实中立录音作参考;不支持的用其默认音色(EmoSphere-TTS 为说话人 id 查表,取该句自己的说话人) | 避免音色差异混入强度判断 |
| 同打分器 | 全部用同一个 RA 排序器(E2)与同一批锚点(该库真实中立 / 真实情感均值) | 强度分可比 |
| 同声码器口径 | 各模型用自己的声码器,输出统一重采到 16 kHz 再打分 | 声码器是各模型的一部分,不替换;只统一采样率 |
| CER 门槛 | CER > 0.15 的样本不计入强度统计,但在结果表单列"CER 通过率" | 防止"崩坏被读成强" |
| 不训练 | 所有基线均不做任何训练或微调;Emovox 因需 Stage II 训练而排除(除非用户另行决定) | 保证是各模型的公开能力 |
| 失败即记录 | 某模型在某档下无法产出(接口不支持、崩溃),该格记 N/A 并说明,不用别的档替代 | 不掩盖能力缺口 |
2.3 判据(跑前定)¶
| # | 判据 | 口径 |
|---|---|---|
| 1 | 相邻档可分:EIT 三个成对准确率 | 显著高于 50% 才算"有旋钮";三个都 ≈ 50% 即"无旋钮" |
| 2 | 刻度单调:BWS 分随档位单调 | 四档(含中立端)BWS 严格单调 |
| 3 | 跨度:归一跨度 = (强档 − 弱档) / (该库真实情感 − 真实中立) | 越接近 1 说明旋钮覆盖了真实情感的动态范围 |
| 4 | 能否到中立:弱档的归一 RA 距 0 的距离 | 只有 ① 类可能做到;② ③ 预期做不到 |
| 5 | 可懂度不塌:CER 通过率 | 低于 0.8 的模型,其强度结论标注"受可懂度限制" |
预期与证伪:② 与 ③ 的预期是判据 1 不通过(≈ 50%)。若某个 ② 类模型通过了判据 1 和 2,那是对本文论点的有力反例,必须如实报告并在结论里讨论——这正是设这一类的意义。
3 对比对象逐一核实(09-11)¶
| 模型 | 出处 | 做什么 / 强度接口 | 论文自己的评测(数据 · 强度指标) | 代码 / 权重 | 类 | 处理 |
|---|---|---|---|---|---|---|
| Mixed-Emotions | Zhou et al., TAFFC 2022 | 两阶段 seq2seq TTS(VCTK 预训练 → ESD 适配),相对属性排序给情感属性向量 | ESD-en · MOS + BWS 混合情感听测 | 仓库 ✅ 训练 + 推理代码;Stage I/II 权重已下(325 MB + 324 MB) | ① | RA 家族代表;属性向量占比三档 |
| EmoSphere-TTS | Cho et al., Interspeech 2024 | 球坐标情感向量,半径 = 强度 | ESD-en · MOS、情感分类、强度听测 | 代码 ✅;ESD 检查点已下(354 MB);16 kHz 声码器自训 | ① | 半径三档 ✅ |
| EmoSphere++ | Cho et al., TAFFC 2025 | 同上 + 零样本说话人 | ESD-en · 同上 | 代码 ✅;检查点已下(339 MB) | ① | 未跑:需 WavLM / emotion2vec 抽取管线,① 类已有三个成员 |
| EmoKnob | Chen et al., EMNLP 2024 | MetaVoice-1B 上少样本情感方向 × 强度标量,免训练 | 自采英文 · 听测 | 代码 ✅,骨干权重 ✅ | ① | 标量三档 |
| CosyVoice3-instruct | Du et al., 2025 | 我们的骨干,指令给情感类别 | — | 本地 ✅ | ② + ③ | 嵌入插值 / 提示词,两种都跑 |
| EmotiVoice | 网易 2023 | 情感提示词 TTS | — | 本地 ✅ | ② + ③ | 同上 |
| VALL-E X | Wang 2023 / Plachtaa 复现 | 参考音频克隆,无情感接口 | — | 检查点 ✅ | ② | 声学提示插值 |
| PromptTTS | Guo et al., ICASSP 2023 | 风格提示词(情感/音高/语速/音量/性别) | PromptSpeech · 属性准确率 | 官方无代码;第三方复现 + 权重已下(ControlSpeech baseline/promptTTS,440 MB) |
③ | 提示词三档 |
| EmoDiff | Guo et al., ICASSP 2023 | Grad-TTS + 软标签引导,α ∈ [0,1] | ESD-en(10 说话人)· 情感分类器对目标类的概率随 α 单调上升(Fig. 2)+ MOS | ❌ 无官方代码,无第三方复现 | 按协议对齐 | 在 ESD-en 上训分类器,画我们的同一条曲线并列 |
| EMORL-TTS | Li et al., ICASSP 2026 | Spark-TTS + RL,三档强度 | ESD-en + Expresso · EIT(30 人主观) | ❌ 无代码 | 协议来源 | 采用其 EIT;引 Table 3 作参考分 |
3.1 三个不可比对象的详细理由¶
| 模型 | 语料 | 代码 / 权重 | 强度指标 | 为什么不能比 |
|---|---|---|---|---|
| MsEmoTTS Lei et al., TASLP 2022 |
内部中文女声(10k 中立 + 每情感 2k),从未公开 | 仓库 1 次提交、README 只有标题,无代码无权重;项目页只有音频 demo | 论文没有定量强度指标:只给 strength=0 vs 1 的 F0 曲线对比 + MOS/CMOS/AB 听测 | 三缺:无同一数据、无法复现、即使复现也没有可对齐的数字 |
| InstructTTS Yang et al., TASLP 2024 |
自建中文风格描述语料,未公开 | 仓库 只有 gh-pages 分支的音频 demo,README 无发布计划 |
无强度维度——控制的是自然语言风格描述("叹气的、充满悲伤") | 任务不匹配:定义不出弱/中/强三档 |
| PromptTTS 2 Leng et al., 2023 |
LibriTTS + 合成描述 | NeuralSpeech 只放 variation network,无 TTS 权重;第三方复现 标 WIP | 属性准确率,无强度档 | 无权重;用 PromptTTS(第一代,有复现权重)代表提示词家族 |
3.2 Zhu et al. 2019(RAR-based):原文不可比,但有公开的同族替代¶
| 项 | 情况 |
|---|---|
| 原文 | Zhu, Yang, Yang, Xie, ASRU 2019,内部普通话语料 + 无官方代码 |
| 方法 | 用相对属性排序(RA)分数作 Tacotron 的条件——与 Zhou et al. 2022 的 Mixed-Emotions 同源 |
| 替代 | Mixed-Emotions 代码与两阶段权重都公开,作 RA 家族代表 |
| 第三方 | hs-oh-prml 是韩语 FastSpeech2、且混了 Cai 2021 的方法,不是 Zhu 2019;只能测单调性,可选 |
4 评测协议:EIT + BWS(客观版为主)¶
情感强度评测在本领域有两套成型协议,都采用:
| 协议 | 出处 | 原始形式 | 报什么 |
|---|---|---|---|
| EIT(Emotion Intensity Test) | EMORL-TTS(Li et al., ICASSP 2026, arXiv 2510.05758)首次形式化 | 同句同情感的弱 / 中 / 强三档,听众在每一对里选"情感更强的那条",30 人 | 三个成对准确率 Weak<Medium、Medium<Strong、Weak<Strong,随机 = 50% |
| BWS(Best-Worst Scaling) | Zhou et al., TAFFC 2022(Mixed-Emotions)· Zhou et al., 2022(EVC 强度) | 每组 4 条同句同情感、不同强度的样本,听众各选一条"情感最强"和一条"情感最弱",20 人 | 每条的 BWS 分 = (选为最强次数 − 选为最弱次数) / 出现次数,范围 [−1, 1]。我们的客观版把听众换成 RA,记作 BWS-auto(见 S7 §5.6 的说明与限制) |
两者互补:EIT 只看相邻档能否分开(分辨力),BWS 给每档一个连续分数、能看整条刻度是否线性。
我们的做法:两套都出客观版(用 RA 打分代替听众),主观版按合作者需要可选。
| 层 | EIT | BWS |
|---|---|---|
| 客观(主) | 同句同情感三档的 RA 两两比较,报三个准确率(EIT-auto) | 每组 4 条,RA 最高者 +1、最低者 −1(BWS-auto);两者都是「原协议 + RA 代替听众」,数值只在本文内部可比 |
| 主观(可选,≥ 10 人) | 每模型 4 情感 × 5 句 × 3 档,成对随机呈现 | 同样的四元组,选最强 / 最弱 |
| 门槛 | CER ≤ 0.15 才计入 | 同 |
判据:① EIT 三个准确率(随机 50%);② BWS 分是否随 α 单调、四档是否拉得开;③ 归一跨度 = (强 − 弱) / (该库真实情感 − 真实中立);④ 弱档到真实中立的距离。
样本:ESD test 每情感 30 句 × 4 情感;英文模型用 en 侧、中文模型用 zh 侧;同一模型内同句同情感配对。
参考分(EMORL-TTS Table 3,主观 EIT,英文,Spark-TTS 骨干,30 人,四情感平均):
| 模型(其论文自报) | W<M | M<S | W<S |
|---|---|---|---|
| Relative Attribute(≈ Mixed-Emotions 式) | 0.50 | 0.52 | 0.58 |
| EmoSphere++ | 0.56 | 0.47 | 0.50 |
| EMORL-TTS | 0.71 | 0.65 | 0.72 |
(网页版抽取,回填前对照 PDF 核一次;主观分与我们的客观 RA 版不直接可比,作量级参照。)
5 结果(ESD 2026-09-13 · RAVDESS 2026-09-15 · EmoSphere-TTS 2026-09-17)¶
5.1 评测口径:怎么测、怎么比¶
| 项 | 做法 |
|---|---|
| 样本 | ESD test 每情感 30 句 × 4 情感 = 120 条输入,每条出弱 / 中 / 强三档 = 360 条/模型。中文模型用 zh 侧,英文模型(EmoKnob)用 en 侧 |
| 说话人参考 | 支持克隆的统一用该句的真实中立录音;不支持的用其默认音色 |
| 三档怎么对应 | 见 §2.1。我们 α = 0.5 / 0.75 / 1.0;EmoKnob 强度标量同值;② 类在「中立嵌入 ↔ 情感嵌入」上按同样三个系数插值;③ 类用「有点 / 比较 / 非常」+ 情感词 |
| 打分 | 全部重采到 16 kHz,用同一套指标:RA(强度)· CER(内容)· UTMOS(音质)· SECS(音色,参照该条输入的真实情感录音) |
| 归一 RA | (RA − 该语言真实中立均值) / (真实情感均值 − 真实中立均值)。zh 锚点 0.065 → 1.029,en 锚点 0.267 → 0.775。所以 0 = 真实中立水平、1 = 真实情感水平 |
| CER 门槛 | 单条 CER > 0.15 不计入强度统计,但 CER / UTMOS / SECS 仍按全部 360 条算 |
| 判据 | 弱→强的归一 RA 跨度(旋钮有多大)+ EIT 三个成对准确率(相邻档能否分开,随机 50%) |
5.1b 每个模型到底在调什么¶
下表逐一说明每条臂的控制链路与实际拧动的量。表中「原生」指该接口由原作者提供, 「构造」指模型本身没有强度接口、由我们按其条件表示构造(②类,见 §5.4b)。
| 模型(臂) | 类 | 条件链路 | 拧的是什么 | 三档取值 | 接口 |
|---|---|---|---|---|---|
| 我们 | — | whisper → 双 Adapter → 双 DiT 速度场 | 速度场的混合系数 α:v = v_B + α·v_Δ,两端在训练时分别由真实中立、真实情感录音监督 |
α = 0.5 / 0.75 / 1.0 | 原生 |
| Mixed-Emotions | ① | 相对属性排序(RA)分数 → 5 维情感属性向量 → 两阶段 seq2seq | 属性向量中目标情感那一维。约定为 0 = 该情感完全在场、越大越不在场(见 §5.7),其余四维固定 1.0 | 目标维 = 0.8 / 0.4 / 0.0 | 原生 |
| EmoKnob | ① | 说话人嵌入 + 固定情感方向向量 | 方向向量前的标量:emb + strength × 情感方向。方向固定,标量只缩放长度 |
demo 默认范围的 1/2、3/4、1 | 原生 |
| EmoSphere-TTS | ① | 参考录音 → VAD 伪标签(wav2vec2)→ 减中立中心、转球坐标 (r, θ, φ) → FastSpeech2 | 球坐标的半径 r(emo_inten,钳位 [0,1])。θ/φ 分桶为风格,取自该条真实情感录音;r 由推理参数覆盖 |
r = 0.1 / 0.5 / 0.9(官方 esd_0.1/0.5/0.9 配置) | 原生 |
| CosyVoice3(提示词) | ③ | instruct 文本 → token → 自回归 LLM | 提示词里的程度副词。指令须为短式(非常生气<\|endofprompt\|>);整句指令会被 LLM 当内容念出 |
有点 / 比较 / 非常 | 原生 |
| CosyVoice3(嵌入插值) | ② | 同上 | LLM 词嵌入查表之后的连续嵌入:两条指令各自查表,按 α 混合后替换指令段。α=1 严格退化为纯情感指令 | α = 0.5 / 0.75 / 1.0 | 构造 |
| EmotiVoice(提示词) | ③ | 提示词文本 → BERT 风格编码器 → 风格向量 → JETS | 提示词里的程度副词 | 有点 / 比较 / 非常 | 原生 |
| EmotiVoice(嵌入插值) | ② | 同上 | 风格编码器输出的连续向量:(1−α)·StyleEnc("中立") + α·StyleEnc(情感词) |
α = 0.5 / 0.75 / 1.0 | 构造 |
| PromptTTS | ③ | 自然语言风格提示词 → BERT 风格编码器 → TTS | 提示词里的程度副词:The speaker sounds slightly / moderately / very {emotion}. |
slightly / moderately / very | 原生 |
| VALL-E X | — | 参考录音 → EnCodec 声学 token + 音素 → 克隆 | 无可调量。条件是一条具体录音的离散声学 token,不存在能取三个值的标量(见 §5.4c) | 单档(情感参考克隆) | 无 |
三点归纳:
- 只有三个基线有原生强度接口:Mixed-Emotions 的属性向量、EmoKnob 的方向向量标量、EmoSphere-TTS 的球坐标半径。其余模型的「三档」要么靠提示词文本里的程度副词(③ 类),要么由我们在其条件表示上构造(② 类)。
- ③ 类的三档是语言层面的,不是参数层面的:模型收到的只是不同的词,能否区分取决于它训练时有没有学过这些词对应的强度差异。
α在不同模型里不是同一个量:我们的 α 是速度场混合系数、EmoKnob 的是方向向量长度、② 类的是条件嵌入的插值系数。三档取同样的数值只是为了对齐比较位置,不代表量纲可比;可比的是归一 RA 与 EIT 这两个结果侧指标。
复现元数据¶
上表说明「拧什么」,下表给出复现所需的全部设定。脚本统一在 emo/exp/M17_editor/m23_*.py。
共同设定
| 项 | 值 |
|---|---|
| 样本池 | manifests/esd_parallel.jsonl 中 split=="test" 且四情感与中立齐全的条目 |
| 抽样 | 每情感独立 random.seed(0) → random.shuffle → 取前 n_per_emo=30;四情感共 120 条输入 |
| 情感 | Angry · Happy · Sad · Surprise(不含中立) |
| 输出 | 一律重采至 16 kHz 单声道 后入打分链路 |
| 打分 | RA(m21_ra.py:eGeMAPSv02 88 维 + E2 相对属性排序器)· CER(m21_score.py,zh 用 paraformer、en 用 whisper)· UTMOS · SECS |
逐模型设定
| 模型 | 代码来源 | 权重 | 语言 | 说话人处理 | 关键推理参数 |
|---|---|---|---|---|---|
| Mixed-Emotions | 官方仓库 | 官方 Stage II checkpoint_11200(310 MB) |
en | 单说话人 ESD-0019,只能合成该音色 | inference.py --num 30 --hparams SC_kernel_size=1, speaker_B={情感};strength 向量经 reader.py 由环境变量注入;声码器为其内置 Griffin-Lim |
| EmoKnob | 官方仓库 | MetaVoice-1B first_stage.pt(4.7 GB)+ second_stage.pt(56 MB)+ speaker_encoder.pt |
en | 说话人嵌入取自该条的真实中立录音 | seed=1234、dtype=bfloat16、top_p=0.95、guidance_scale=3.0、temperature=1.0;二阶段 top_k=200 |
| EmoSphere-TTS | 官方仓库 | 官方 model_ckpt_steps_160000.ckpt(ESD-en 十说话人,354 MB)+ 自训 16 kHz BigVGAN g_00114000(§5.5) |
en | 说话人 id 查表(非克隆):ESD 取该句自身说话人;RAVDESS 按性别循环映射到 0011/0020(男)与 0015–0019(女) | run.py --config egs/datasets/audio/esd_{0.1,0.5,0.9}/fs_orig.yaml --infer,use_gt_dur=false(预测时长,故无需 MFA 对齐);风格角由该条真实情感录音经 audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim 取 VAD、减官方中立中心 (0.4135, 0.5169, 0.3620) 转球坐标;音素表由官方 esd_text_emo.txt 全文经 g2p_en 重建(74 维,与检查点逐行核对);两处补丁:检查点缺未使用的 azi_proj/ele_proj → 非严格加载;声码器接口改为只落 mel 再外部合成 |
| CosyVoice3 | 官方仓库 | 官方 llm.pt(1.9 GB)+ flow.pt(1.3 GB)+ hift.pt(80 MB),fp16=False |
zh | 参考音色为该条的真实中立录音 | ③:inference_instruct2(text, instr, ref, stream=False);②:model.tts(..., stream=False, speed=1.0) + embed_tokens forward hook |
| EmotiVoice | 官方仓库 | prompt_tts_open_source_joint/ckpt 与 style_encoder/ckpt 下的最新检查点(脚本自动扫描) |
zh | 不支持克隆,固定用内置音色库第一个说话人 | alpha=1.0(length regulator 的时长系数,非强度);风格向量取 StyleEncoder(...)["pooled_output"] |
| PromptTTS | 第三方复现 ControlSpeech baseline/promptTTS(官方无代码) |
该复现发布的权重(440 MB)+ 官方 libritts_24k_nsf_hifigan 声码器 + finetune_bert_style 适配器 |
en | 不支持克隆(use_spk_id: false) |
exp_name=promptts1_style_baseline;推理类 TCTTSInfer;输出 24 kHz → 重采 16 kHz |
| VALL-E X | 官方仓库 | 官方检查点 | zh | 克隆该条的真实情感录音 | make_prompt(audio_prompt_path=情感录音, transcript=文本) → generate_audio(text, prompt, language="zh") |
两处需要额外说明的设定
- EmoKnob 的情感方向向量:用 ESD-en train 划分中同说话人的 8 对(情感 − 中立)说话人嵌入之差取均值构造,不使用 test 条目,避免泄漏。强度标量
strength ∈ {0.5, 0.75, 1.0}乘在该方向上。 - EmoKnob、PromptTTS 与 EmoSphere-TTS 的说话人范围:ESD-en 中 0012–0014 的音频未下载,三者的样本池限定在
{0011, 0015–0020}七位说话人。Mixed-Emotions 为单说话人模型,样本池仅 0019。 - EmoSphere-TTS 的评测句可能与其训练集重叠:它是 ESD-en 全量(每说话人 350 句 × 5 情感)训练的说话人相关模型,作者划分未公开;本节只用它验可控性(EIT 为模型内同句配对),不据此报泛化。
5.2 三档 × 四指标(ESD)¶
| 类 | 模型 | 档 | RA | 归一 RA | CER ↓ | UTMOS ↑ | SECS ↑ |
|---|---|---|---|---|---|---|---|
| — | 我们(α=0.5 / 0.75 / 1.0,zh) | 弱 | 0.47 | 0.42 | 0.161 | 2.07 | 0.883 |
| 中 | 0.69 | 0.65 | 0.085 | 2.19 | 0.902 | ||
| 强 | 0.97 | 0.94 | 0.064 | 2.29 | 0.917 | ||
| ① | EmoKnob(en) | 弱 | 0.62 | 0.69 | 0.072 | 2.99 | 0.820 |
| 中 | 0.67 | 0.78 | 0.082 | 2.95 | 0.803 | ||
| 强 | 0.68 | 0.81 | 0.091 | 2.90 | 0.804 | ||
| ① | Mixed-Emotions(en,v=0.8/0.4/0.0) | 弱 | 0.67 | 0.80† | 0.067 | 1.36 | 0.885 |
| 中 | 0.97 | 1.38† | 0.062 | 1.34 | 0.887 | ||
| 强 | 1.17 | 1.77† | 0.068 | 1.33 | 0.887 | ||
| ① | EmoSphere-TTS(en,r=0.1/0.5/0.9) | 弱 | 0.59 | 0.63 | 0.046 | 3.32 | 0.913‡ |
| 中 | 0.71 | 0.88 | 0.047 | 3.18 | 0.919‡ | ||
| 强 | 0.88 | 1.21 | 0.054 | 2.85 | 0.901‡ | ||
| ③ | CosyVoice3(提示词,zh) | 弱 | 0.10 | 0.04 | 0.047 | 3.56 | 0.876 |
| 中 | 0.08 | 0.02 | 0.021 | 3.54 | 0.876 | ||
| 强 | 0.10 | 0.03 | 0.083 | 3.59 | 0.874 | ||
| ② | CosyVoice3(嵌入插值,zh) | 弱 | 0.12 | 0.06 | 0.018 | 3.57 | 0.877 |
| 中 | 0.11 | 0.05 | 0.021 | 3.55 | 0.875 | ||
| 强 | 0.13 | 0.07 | 0.025 | 3.58 | 0.879 | ||
| ③ | EmotiVoice(提示词,zh) | 弱 | 0.01 | −0.06 | 0.040 | 3.04 | 0.669 |
| 中 | −0.02 | −0.09 | 0.036 | 3.02 | 0.671 | ||
| 强 | 0.07 | 0.00 | 0.027 | 3.04 | 0.668 | ||
| ② | EmotiVoice(嵌入插值,zh) | 弱 | 0.01 | −0.05 | 0.029 | 3.06 | 0.666 |
| 中 | 0.01 | −0.06 | 0.029 | 3.05 | 0.667 | ||
| 强 | 0.01 | −0.06 | 0.042 | 3.06 | 0.668 | ||
| ③ | PromptTTS(提示词,en) | 弱 | 0.24 | −0.04 | 0.034 | 4.28 | 0.690 |
| 中 | 0.27 | 0.00 | 0.040 | 4.30 | 0.688 | ||
| 强 | 0.26 | −0.01 | 0.045 | 4.27 | 0.689 | ||
| ②不适用 | VALL-E X(单档,zh) | — | 0.96 | 0.93 | 0.177 | 2.52 | 0.901 |
| 参照 | 真实中立录音(zh) | — | 0.07 | 0 | 0.016 | 3.68 | 0.887 |
| 参照 | 真实情感录音(zh) | — | 1.03 | 1 | 0.030 | 2.74 | 1.000 |
5.3 旋钮跨度与可分性(ESD)¶
| 类 | 模型 | 弱→强 归一跨度 | EIT W<M / M<S / W<S |
|---|---|---|---|
| — | 我们 | +0.52 | 0.94 / 0.93 / 0.96 |
| ① | Mixed-Emotions(en) | +0.85† | 0.74 / 0.72 / 0.86 |
| ① | EmoSphere-TTS(en) | +0.58 | 0.78 / 0.74 / 0.84 |
| ① | EmoKnob | +0.12 | 0.53 / 0.56 / 0.65 |
| ② | CosyVoice3 嵌入插值 | +0.01 | 0.50 / 0.54 / 0.55 |
| ③ | CosyVoice3 提示词 | −0.01 | 0.51 / 0.45 / 0.60 |
| ② | EmotiVoice 嵌入插值 | −0.00 | 0.58 / 0.55 / 0.54 |
| ③ | EmotiVoice 提示词 | +0.06 | 0.57 / 0.66 / 0.73 |
| ③ | PromptTTS 提示词(en) | +0.04 | 0.60 / 0.48 / 0.56 |
| ②不适用 | VALL-E X | N/A(单档) | N/A |
‡ EmoSphere-TTS 的 SECS 是对同一说话人 id 的查表输出与该说话人真实录音比,不是克隆,数值只说明音色落在正确说话人上。
† Mixed-Emotions 的归一跨度不可与其他模型并列:它用内置 Griffin-Lim 出声,UTMOS 仅 1.34(全场最低,真实录音 2.74),相位伪影把 eGeMAPS 推出了 RA 的标定区间——强档原始 RA 1.17 已高于真实情感录音的 0.775。EIT 是模型内同句配对比较,不受声码器影响,是它与其他模型唯一可比的量。
5.4 六条读法¶
-
CosyVoice3 是支持说话人克隆的模型里质量最好的,但它没有强度旋钮。UTMOS 3.54–3.63、CER 0.02–0.08、SECS 0.876,三项都优于我们(我们 UTMOS 2.07–2.29、SECS 0.883–0.917)——它是成熟的工业 TTS。(UTMOS 的绝对最高值属于 PromptTTS 的 4.3,但它不克隆说话人,SECS 仅 0.690,两者不在同一设定下。)但三档的 RA 是 0.08 / 0.10 / 0.12,归一跨度 −0.01,EIT 0.42–0.60 接近随机。提示词说「有点生气」和「非常生气」,合成出来的强度没有区别。
驱动口径:instruct 必须用短式(程度词 + 情感词 +
<|endofprompt|>)。整句指令会被 LLM 当作内容念出,导致 CER 升至 0.7 以上;上表为短式下的结果。 -
VALL-E X 是"能生成不能控制"的最干净例子:克隆真实情感录音后归一 RA 达 0.93(几乎等于真实录音的 1.0),音色 SECS 0.901 也很高——情感表达完全没问题,但它只有一档,没有任何接口调强弱。
-
EmoKnob 的旋钮在动但很快饱和:弱档归一 RA 已经 0.69,调到强档只到 0.81,跨度 +0.12。机制是
嵌入 + 标量 × 情感方向,方向固定、标量只缩放长度,感知强度对长度的响应很快进平台区。 -
PromptTTS 的音质是全场最高的,强度响应是零。UTMOS 4.27–4.30 超过 CosyVoice3 的 3.6,CER 0.034–0.045,但三档归一 RA 是 −0.04 / 0.00 / −0.01,跨度 +0.04,EIT 0.48–0.60 落在随机附近。原因可以从它的训练数据直接读出:其风格提示词由
libri_emo_preprocess.py从时长 / 音高 / 能量 / 性别 / 情感五类标签生成,情感是类别属性,强度根本不是它的一个轴。不是"模型看不见这个差别",而是"看见了但没学过怎么用"。我核对了三档提示词在其 BERT 风格编码器里的余弦相似度:
提示词对(均为单词替换) cos ↓ 越小越可分 slightly ↔ moderately angry 0.967 slightly ↔ very angry 0.952 moderately ↔ very angry 0.947 对照 — pitch is very low ↔ high(它确实响应的轴) 0.983 对照 — very angry ↔ very happy(它确实区分的轴) 0.943 三档强度之间的距离(0.947–0.967)比音高高低之间的距离(0.983)还大,与它能区分的愤怒↔高兴(0.943)同量级。也就是说输入端的差异是充分可分的,是模型把这一维丢掉了——强度在 PromptSpeech 的标注体系里从来不是一个可控因子。这与 ② 类嵌入插值的失败是同一个结论的两种表现:没有为强度提供监督信号的模型,不会因为接口上多给一个旋钮就获得强度控制。
-
Mixed-Emotions 是基线里旋钮最灵的。EIT 0.74 / 0.72 / 0.86,三个成对准确率全都显著高于随机,是所有基线里最高的(EmoSphere-TTS 0.74–0.84、EmoKnob 0.53–0.65,其余都在随机附近)。这说得通——它是相对属性排序(RA)家族,强度条件本来就是它的设计目标,与 Zhu et al. 2019 同源(见 §3.2)。
但它有两个代价。一是音质:内置 Griffin-Lim 使 UTMOS 只有 1.34,全场最低(我们 2.07–2.29,真实录音 2.74);可懂度反而正常(CER 0.062–0.068,通过率 84%),音色也高(SECS 0.886,它是 0019 单说话人模型,参照就是 0019 自己的录音)。二是可比性:声码器伪影把它的 RA 推出标定区间,归一跨度 +0.85 看着比我们的 +0.52 大,但那是伪影不是更好的可控性——要比只能比 EIT(我们 0.94/0.93/0.96 仍明显高于它的 0.74/0.72/0.86)。
跨语言的注意:EmoKnob 与 PromptTTS 是英文模型,用 en 锚点归一(跨度 0.508),其余用 zh 锚点(跨度 0.964)。归一后可比,但绝对 RA 不可跨语言直接比。
- EmoSphere-TTS 是唯一同时有旋钮和正常音质的基线,但代价是强档失真。半径 r = 0.1 / 0.5 / 0.9 三档归一 RA 0.63 / 0.88 / 1.21,跨度 +0.58(数值上略高于我们的 +0.52),EIT 0.78 / 0.74 / 0.84(低于我们的 0.94 / 0.93 / 0.96)。弱档 UTMOS 3.32 高于我们,但随 r 单调下降到强档 2.85,CER 也从 0.046 升到 0.054——它把强度推上去的方式伴随可闻失真,我们的三档 UTMOS 是反向的(2.07 → 2.29)。两处不可比:它是 ESD-en 全量训练的说话人相关模型,评测句可能在其训练集内(作者划分未公开);出声用的是我们自训的声码器(§5.5),弱、中两档 UTMOS 已高于该声码器的复制合成天花板 3.06,说明音质上限主要不由声码器决定。
5.4b ② 类「嵌入插值」的设计与结果¶
为什么要测这一类¶
CosyVoice3 与 EmotiVoice 都没有强度接口——它们的论文也没有声称有。但两者都把情感作为一个连续的条件表示送进声学模型, 于是存在一个不需要训练、不需要改架构的自然做法:在中立条件与目标情感条件之间做线性插值,用插值系数当强度旋钮。
这是任何人拿到这类模型后会最先尝试的办法,也是我们方法的最朴素对照。本节要回答的是:这个「免费」的做法能不能得到可用的强度控制。
这一接口由我们构造,不是原作者提供的;因此本节的结论是关于「嵌入插值这条路」,不是关于这两个模型的能力评价。
在哪一层插值¶
插值必须发生在连续表示上才有定义。两个模型的条件链路不同,插值点也不同:
| 模型 | 条件链路 | 插值点 | 插值对象 |
|---|---|---|---|
| EmotiVoice | 提示词文本 → BERT 风格编码器 → 风格向量 → JETS 声学模型 | 风格编码器输出 | (1−α)·StyleEnc("中立") + α·StyleEnc(情感词),即风格向量本身 |
| CosyVoice3 | instruct 文本 → token 序列 → LLM 词嵌入 → 自回归 LLM | LLM 词嵌入之后 | 两条指令各自查 embed_tokens 得连续嵌入,按 α 混合后替换指令段;其余位置不变 |
对 CosyVoice3 需要强调插值点的选择:它的 instruct 在进入 LLM 前是离散 token ID,在整数 ID 上做加权平均没有定义 (结果是与两条指令都无关的另一个 token)。因此插值必须放在词嵌入查表之后、于连续嵌入空间进行。 该实现下 α=1 严格退化为纯情感指令,α=0 严格退化为纯中立指令,中间为两者的凸组合。
两条臂的 α 均取 0.5 / 0.75 / 1.0 作弱 / 中 / 强,与我们的 α 同值;其余条件(文本、参考音色、采样设置)与该模型的 ③ 提示词臂完全一致,唯一变量就是这个插值系数。
结果¶
| 模型 | 弱 | 中 | 强 | 跨度 | EIT |
|---|---|---|---|---|---|
| CosyVoice3(LLM 指令嵌入) | +0.06 | +0.05 | +0.07 | +0.01 | 0.50 / 0.54 / 0.55 |
| EmotiVoice(BERT 风格向量) | −0.05 | −0.06 | −0.06 | −0.00 | 0.58 / 0.55 / 0.54 |
(数值为归一 RA,0 = 真实中立水平、1 = 真实情感水平;完整四指标见 §5.2。)
两个模型的架构与条件表示完全不同——一个是自回归 LLM 的词嵌入,一个是判别式风格编码器的输出向量——插值系数在两者上都不产生强度变化: 跨度 ≤0.01,EIT 三个成对准确率均落在随机附近。合成质量不受影响(CER 0.018–0.042、UTMOS 3.05–3.58),说明插值点并未破坏模型, 只是这一维不携带强度信息。
为什么不work¶
两个模型的情感条件都是用类别式监督学出来的:EmotiVoice 的风格编码器以「提示词 ↔ 音频风格」配对训练(余弦相似度损失), CosyVoice3 的 instruct 由 LLM 当作语义指令消费。训练数据里不存在「同一句话、同一情感、不同强度」的成对监督, 因此这些表示只被约束了「类别之间要可分」,没有被约束「类别内部要有连续的强度刻度」。 在这样的表示上做线性插值,得到的是类别空间里两点之间的一条线段,而这条线段与感知强度没有确立的对应关系。
与我们方法的区别不在于「是否插值」,而在于插值的两端是否受监督:我们的 v = v_B + α·v_Δ 同样是线性组合, 但 α=0 与 α=1 两端在训练时分别由真实中立录音与真实情感录音监督,中间的连续性才有依据。 本节的负面结果恰好界定了这一点——线性组合本身不产生可控性,端点监督才产生可控性。
5.4c VALL-E X 为什么只有单档¶
VALL-E X 在本节记 EIT / 跨度为 N/A,这不是「跑不了」——120 条已生成并打分(§5.2), 而是它不存在可以取三个值的量。
它的条件是从参考录音抽取的 EnCodec 声学 token 加转写音素:给一条录音,克隆其音色与情感说出新文本。 链路中没有标量、没有强度维度,也不适用 ② 类插值——声学 token 是离散的,且把音色、韵律、内容纠缠在一起, 两条不同录音(中立与情感)的 token 序列长度亦不同,插值没有对应的语义。
因此我们只取情感参考克隆这一档,作为「无强度旋钮」的证据。其结果恰恰因为单档而有说服力:
| 归一 RA | SECS | CER 通过率 |
|---|---|---|
| 0.93 | 0.901 | 54% |
归一 RA 0.93 几乎等于真实情感录音的 1.0,音色相似度 0.901 也很高——情感表达与音色克隆都做到了, 但没有任何接口能把这个情感调弱。这是「能生成情感」与「能控制强度」是两件事的最干净例子。
口径标注:CER 通过率仅 54%,转写显示确实会跑偏(「再多吃些鸡肉」→「知较比较」), 系 VALL-E 系列已知的克隆不稳定,非调用问题;上表归一 RA 在通过门槛的 65 条上计算。
5.4d 定性试听¶
统一取 Angry。中文五条臂共享同一句输入,可直接同句对比;英文四个模型的样本池不同 (EmoKnob / PromptTTS / EmoSphere-TTS 限于 ESD-en 七位说话人,Mixed-Emotions 为单说话人 0019),只能各听各的。
中文:0001_text00010「不是,他住在沃斯盾的老房子里。」¶
参照
| 音频 | |
|---|---|
| 真实中立录音 | |
| 真实情感录音(Angry) |
我们(α = 0.5 / 0.75 / 1.0,音高对齐链路)
| 弱 | 中 | 强 |
|---|---|---|
基线
| 模型(臂) | 弱 | 中 | 强 |
|---|---|---|---|
| CosyVoice3(提示词) | |||
| CosyVoice3(嵌入插值) | |||
| EmotiVoice(提示词) | |||
| EmotiVoice(嵌入插值) |
VALL-E X 只有一档:
英文:各模型自己的样本¶
| 模型 | 句子 | 弱 | 中 | 强 |
|---|---|---|---|---|
| EmoKnob | 0015_text00130「How do you like you dirty bird!」 |
|||
| PromptTTS | 0011_text00040「And they did push so!」 |
|||
| EmoSphere-TTS | 0017_text00180「I've hit the wrong nose.」 |
|||
| Mixed-Emotions | 0019_text00000「A boat put out-on the bay.」 |
Mixed-Emotions 的三档对应属性向量目标维 v = 0.8 / 0.4 / 0.0(v 越小越强,见 §5.7)。
听感与 §5.2 的数值一致:我们、Mixed-Emotions 与 EmoSphere-TTS 三档能听出递进(前者音质受其内置 Griffin-Lim 限制,EmoSphere 强档经自训声码器有可闻损失); CosyVoice3、EmotiVoice、PromptTTS 的三档几乎听不出差别;VALL-E X 情感饱满但无从调节。
5.4e 第二语料 RAVDESS:同一协议重跑九臂¶
§5.2 的结果全部在 ESD 上。为检验结论是否依赖语料,用同一协议在 RAVDESS 上把九个臂重跑一遍。
与 ESD 轮的三处必要差异¶
| 项 | ESD 轮 | RAVDESS 轮 | 原因 |
|---|---|---|---|
| 样本构成 | 每情感 30 个不同句子 | 每情感 30 个不同 (说话人, 句子) 组合 | RAVDESS 全库只有 2 个句子("Kids are talking by the door" / "Dogs are sitting by the door"),内容多样性换成说话人多样性(24 位演员) |
| 语言 | CosyVoice3 / EmotiVoice / VALL-E X 走中文 | 全部走英文 | RAVDESS 为纯英文,情感词与程度词相应替换 |
| EmoKnob 情感方向 | 由 train 划分同说话人 8 对 (情感−中立) 嵌入差构造 | 由评测集外的 8 对构造 | RAVDESS 无 train 划分;仍与评测集不重叠 |
| EmoSphere-TTS 说话人 | 该句自身的说话人 id | 按演员性别循环映射到 ESD-en 的 0011 / 0020(男)、0015–0019(女) | 说话人 id 查表模型,RAVDESS 演员不在表内;风格角仍取该条 RAVDESS 真实情感录音 |
其余一致:每情感 30 条 × 4 情感 = 120 输入,三档取值不变,打分链路不变。 归一 RA 用 RAVDESS 自己的锚点(真实中立 0.255 → 真实情感 0.879,跨度 0.624)。
结果¶
| 类 | 模型(臂) | 弱 | 中 | 强 | 跨度 | EIT | ESD 跨度 |
|---|---|---|---|---|---|---|---|
| ① | Mixed-Emotions | +0.64 | +1.17 | +1.53 | +0.81 | 0.81 / 0.78 / 0.94 | +0.85 |
| ① | EmoKnob | +0.54 | +0.89 | +0.94 | +0.41 | 0.69 / 0.64 / 0.78 | +0.12 |
| ① | EmoSphere-TTS | +0.30 | +0.56 | +0.63 | +0.33‡ | 0.73 / 0.80 / 0.87 | +0.58 |
| ② | EmotiVoice(嵌入插值) | −0.55 | −0.48 | −0.42 | +0.13 | 0.66 / 0.72 / 1.00 | −0.00 |
| ③ | EmotiVoice(提示词) | −0.39 | −0.46 | −0.37 | +0.02 | 0.24 / 0.64 / 0.51 | +0.06 |
| ③ | PromptTTS | −0.10 | −0.05 | −0.09 | +0.01 | 0.62 / 0.41 / 0.51 | +0.04 |
| ③ | CosyVoice3(提示词) | −0.15 | −0.23 | −0.23 | −0.07 | 0.47 / 0.47 / 0.44 | −0.00 |
| ② | CosyVoice3(嵌入插值) | −0.46 | −0.47 | −0.43 | −0.18 | 0.39 / 0.52 / 0.45 | +0.01 |
| — | VALL-E X(单档) | — | — | +1.05 | N/A | N/A | 0.93 |
质量指标:
| 模型(臂) | CER | CER 通过率 | UTMOS | SECS |
|---|---|---|---|---|
| Mixed-Emotions | 0.002–0.014 | 99% | 1.33–1.35 | 0.659–0.668† |
| EmoKnob | 0.180–0.236 | 47% | 1.83–1.85 | 0.739–0.751 |
| EmoSphere-TTS | 0.024–0.078 | 90%(强档 78%) | 2.76–3.20 | 0.723–0.733† |
| PromptTTS | 0.000 | 100% | 4.36–4.38 | 0.616† |
| CosyVoice3(提示词) | 0.018–0.048 | 92% | 4.20–4.24 | 0.808–0.820 |
| CosyVoice3(嵌入插值) | 0.007–0.278 | 87% | 4.13–4.20 | 0.795–0.806 |
| EmotiVoice(两臂) | 0.000 | 100% | 3.65–3.73 | 0.522–0.532† |
| VALL-E X | 0.118 | 75% | 2.96 | 0.818 |
† 不支持说话人克隆(PromptTTS、EmotiVoice、EmoSphere-TTS 为 ESD 说话人 id 查表)或为单说话人模型(Mixed-Emotions 固定输出 ESD-0019 音色),SECS 无意义。 ‡ EmoSphere-TTS 的强档有 27/120 条 CER > 0.15 被剔除,剔除的多是强度最高的样本,本表的 +0.63 与跨度 +0.33 因此偏低;不过滤 CER 时三档为 +0.35 / +0.58 / +0.90、跨度 +0.55,与 ESD 的 +0.58 一致。
三条读法¶
-
分类结论跨语料稳住了:只有 ① 类(有原生强度接口)的三个成员的旋钮真的动,② ③ 类在两个语料上都不动。这是本节最重要的结果。
-
Mixed-Emotions 交叉验证一致:两个语料上最佳三档都是 (0.8, 0.4, 0.0),跨度 +0.81 / +0.85,EIT 0.81/0.78/0.94 与 0.74/0.72/0.86。五档曲线同样单调(+1.53 → +1.17 → ... → +0.64)。它的旋钮不是某个语料的偶然。
-
EmoKnob 的幅度依赖方向向量的构造源:跨度由 ESD 的 +0.12 升到 RAVDESS 的 +0.41。两轮的差异在于构造 (情感−中立) 嵌入差所用的录音——RAVDESS 为专业演员按指令表演、且区分 normal / strong 两档,得到的方向幅度更大。因此「EmoKnob 很快饱和」应表述为在给定方向向量下饱和,其饱和点可由方向的构造方式移动,不是固定的模型属性。
两处口径提醒:
- RAVDESS 的中立本身更具表现力,锚点被抬高,故 ② ③ 类的归一 RA 多为负值——含义是「合成的情感强度低于该语料的真实中立录音」,不是打分出错。
- EIT 必须与跨度合看。EmotiVoice 嵌入插值的 W<S 达 1.00,但跨度仅 +0.13 且三档归一 RA 全为负——绝对差异小到可忽略,方向恰好一致即可凑出高成对准确率。
5.5 EmoSphere-TTS:用自训 16 kHz 声码器补上的一条基线¶
EmoSphere-TTS 的权重公开,但两样东西官方没发:16 kHz BigVGAN 声码器(issue 已关闭无答复)和二进制数据集(含每条录音的 VAD 伪标签)。 两者都可以在不改模型的前提下补齐,本节记录做法与代价;EmoSphere++(零样本说话人版)还需 WavLM / emotion2vec 抽取管线,未跑。
推理需要什么、我们怎么给
| 项 | 官方管线 | 本节做法 | 影响 |
|---|---|---|---|
| 音素序列 | g2p_en,音素表由 ESD-en 全语料生成 | 用官方 esd_text_emo.txt(17 500 行)全文重建,74 维与检查点的嵌入表逐行一致(两个未训练行恰为只出现在测试句的 AO2 / ZH) |
无 |
| 时长对齐(MFA) | 训练用真实时长 | 推理 use_gt_dur=false 走时长预测器,不需要对齐;二进制集里的 mel2ph 为占位 |
无 |
| 风格角 θ / φ | 该条录音的 VAD → 减中立中心 → 球坐标 → 分桶 | 同一 VAD 模型、同一中立中心、同一转换,取该条真实情感录音 | 无 |
| 强度 r | 同上的半径 / 该情感全库最大距离 | 由推理参数 emo_inten 覆盖(官方三档配置),归一分母不参与 |
无 |
| 声码器 | 官方 16 kHz BigVGAN(未发布) | 自训(下) | 有:音质上限低于官方 |
自训 16 kHz 声码器(方案 A3):官方 BigVGAN 无 16 kHz 版本,最接近的 bigvgan_v2_22khz_80band_fmax8k_256x 采样率不符,
直接使用会错时长与音高。改为在 ESD 上自训:配置取官方那份、只把 22050 改为 16000——其余 mel 参数
(80 mel / n_fft 1024 / hop 256 / win 1024 / fmin 0 / fmax 8000)本就与 EmoSphere 的 dataset_params.yaml 一致,mel 域(自然对数、下限 1e-5)也相同。
另有两处因采样率与语料长度必须调整:cqtd_n_octaves 9→8(16 kHz 下 9 个八度超出 CQT 判别器的奈奎斯特约束),
segment_size 65536→32768(ESD 中位时长 2.9 s,用官方值会给九成片段补静音)。
训练集 ESD 23970 条 / 验证 2860 / 留出 2884,三者零重叠,约 25 小时音频;lr 5e-5、梯度裁剪 200,训到 114 k 步停止。
链路与主实验隔离:代码在 models/baselines/bigvgan16k/,依赖装在独立环境,不改主环境任何包。
声码器质量天花板(留出集 120 条真实录音抽 mel 过声码器再打分,即 EmoSphere 在这条链路上的音质上限):
| 训练步数 | 复制合成 UTMOS | 与真实原音(3.34)的差距 |
|---|---|---|
| 18 k | 2.55 | 0.79 |
| 60 k | 2.91 | 0.43 |
| 94 k | 3.05 | 0.29 |
| 114 k(采用) | 3.06 | 0.28 |
94 k → 114 k 只升 0.01,已收敛。EmoSphere 三档 UTMOS 3.32 / 3.18 / 2.85(§5.2)中,弱、中两档高于这个天花板——说明模型输出的 mel 比真实 mel 更"干净"、声码器更容易还原;强档低 0.2,是强情感 mel 本身更难还原。 EIT 不受声码器影响(三档共用同一声码器,且是同句配对),归一 RA 跨度受声码器压缩的方向是缩小而非放大,故 +0.58 是保守读数。
5.6 尚未完成¶
| 模型 | 类 | 状态 |
|---|---|---|
| EmoDiff | 按协议对齐 | 待做:在 ESD-en 上训一个情感分类器,画我们的 P(目标类) 随 α 的曲线,与其论文 Fig. 2 并列。不需要跑它的模型 |
| EmoSphere++ | ① | 未跑:零样本说话人版需 WavLM / emotion2vec 抽取管线与其自己的二进制集;同族的 EmoSphere-TTS 已跑(§5.5),① 类已有三个成员 |
| 主观 EIT / BWS | — | 可选:协议照搬 §4,把 RA 换成听众即可 |
EmoSphere-TTS 原先列为"跑不了"的唯一理由是官方未发布 16 kHz 声码器,已用自训补上(§5.5)。
5.7 Mixed-Emotions 的强度口径:与提案写反了¶
跑通之后发现,§2.1 里写的「情感属性向量中目标情感的占比,设 0.5 / 0.75 / 1.0」方向是反的。
它的强度条件来自官方随代码发布的相对属性分数 emotion_adaptation/reader/Relative/<E>/strength.txt(每个情感一份,各 1750 行)。用 ESD 的真实标签逐条核对后,取值约定是:
在 Angry/strength.txt 里 |
均值 | 零值占比 |
|---|---|---|
| Angry 的 350 条(该情感自身) | 0.000 | 100% |
| Neutral 的 350 条 | 0.609 | 0% |
| Sad 的 350 条 | 0.709 | 0% |
| Surprise 的 350 条 | 0.752 | 0% |
| Happy 的 350 条 | 0.779 | 0% |
训练时(emotion_adaptation/reader/reader.py:115–176)对一条情感 E 的语句,读的正是它自己那一维 → 恒为 0,其余四维是同一句话在其他情感下的平行录音的分数。所以这个五维向量是到各情感的距离,不是占比:
0 = 该情感完全在场,越大越不在场。
这也解释了仓库里推理默认的 [Neutral=1, Happy=0, Sad=0, Angry=1, Surprise=1]——那不是随手填的,而是论文标题所指的 happy + sad 混合情感示例。
按提案原样设 0.5 / 0.75 / 1.0 当弱 / 中 / 强,实际得到的是强 / 中 / 弱,且 1.0 落在「该情感缺席」那一端。
处理(用户 09-13 决定):不按任一候选直接拍板,而是先在正式评测集上全量扫描再定——目标维取 v ∈ {0, 0.2, 0.4, 0.6, 0.8},其余四维固定为缺席水平 1.0,每档 120 条(0019 的 held-out test 30 句 × 4 情感),共 600 条。
扫描结果(n=120/档,与其他基线同口径按 CER≤0.15 过滤):
| 目标维 v | 0.0 | 0.2 | 0.4 | 0.6 | 0.8 |
|---|---|---|---|---|---|
| 归一 RA | 1.77 | 1.73 | 1.38 | 1.10 | 0.80 |
单调下降,v=0 最强,与代码/数据读出的约定一致。十种三档组合的 EIT 全算过,最平衡的是等间距的 (弱 0.8, 中 0.4, 强 0.0),EIT 0.74 / 0.72 / 0.86;(0.8, 0.2, 0) 与 (0.8, 0.6, 0) 的均值相同但三个成对准确率不均衡。上表与 §5.2–5.3 用的就是这一组。
一个早期的小样本探针(每档 6 条)曾出现 v=0.8 处回跳、看似非单调,那是 n 太小(std≈0.2,各档差异都在一个标准差内);n=120 后趋势干净。这也是全量扫描而非直接定档的理由。
6 结论¶
6.1 三类控制方式的实测结果¶
归一跨度 = 弱档到强档的归一 RA 之差(1.0 = 真实中立到真实情感的全程)。数据见 §5.2–5.3。
| 类 | 模型 | EIT W<M / M<S / W<S | ESD 跨度 | RAVDESS 跨度 | UTMOS | 一句话 |
|---|---|---|---|---|---|---|
| — | 我们(α) | 0.94 / 0.93 / 0.96 | +0.52 | 未测 | 2.07–2.29 | 连续、单调、覆盖真实情感的动态范围 |
| ① 显式接口 | Mixed-Emotions | 0.74 / 0.72 / 0.86 | +0.85† | +0.81 | 1.33–1.36 | 旋钮最好用的基线,且跨语料一致;Griffin-Lim 使音质全场最低,跨度不可比 |
| ① 显式接口 | EmoSphere-TTS | 0.78 / 0.74 / 0.84 | +0.58 | +0.33‡ | 2.85–3.32 | 有旋钮且跨语料一致,弱档音质高;强度越高失真越重(UTMOS 3.32 → 2.85,RAVDESS 强档 CER 通过率 78%),说话人相关、评测句可能在其训练集内 |
| ① 显式接口 | EmoKnob | 0.53 / 0.56 / 0.65 | +0.12 | +0.41 | 2.90–2.99 | 有旋钮;饱和点取决于情感方向向量的构造源(见 §5.4e) |
| ② 隐式插值 | CosyVoice3 | 0.50 / 0.54 / 0.55 | +0.01 | −0.18 | 3.55–3.58 | 音质最好,但旋钮完全不动 |
| ② 隐式插值 | EmotiVoice | 0.58 / 0.55 / 0.54 | −0.00 | +0.13 | 3.05–3.06 | 同上 |
| ② 不适用 | VALL-E X | N/A(单档) | — | — | 2.52 | 能复制情感(归一 RA 0.93),无接口调强弱 |
| ③ 提示词 | CosyVoice3 | 0.51 / 0.45 / 0.60 | −0.00 | −0.07 | 3.54–3.59 | 「有点生气」与「非常生气」无区别 |
| ③ 提示词 | EmotiVoice | 0.57 / 0.66 / 0.73 | +0.06 | +0.02 | 3.02–3.04 | 方向略对,幅度可忽略 |
| ③ 提示词 | PromptTTS(en) | 0.60 / 0.48 / 0.56 | +0.04 | +0.01 | 4.27–4.30 | 音质最高;情感是类别属性,无强度轴 |
‡ RAVDESS 强档剔除 CER > 0.15 后的值,偏低;不过滤为 +0.55(见 §5.4e)。
注意音质与可控性是两个独立的轴:PromptTTS 的 UTMOS 4.3、CosyVoice3 的 3.6 都高于我们(2.07–2.29),CosyVoice3 的 CER 0.02–0.08 与 SECS 0.875 也优于我们(0.064–0.161 / 0.883–0.917),但两者的强度跨度分别是 +0.04 与 −0.01,我们是 +0.52。基线节要比的是后者。
6.2 四条可以写进论文的结论¶
-
连续强度控制需要专门的机制,不是"顺带就有"的能力。这是本节的核心论点,七个对比对象分成干净的两组:
没有为强度提供监督的模型,一律做不到。② 类在嵌入空间做线性插值(最自然的"免费"做法)换来的强度移动是 −1%(CosyVoice3 与 EmotiVoice 都是);③ 类的提示词 −1% ~ +6%,EIT 全部落在随机附近。PromptTTS 的例子最干净:它的提示词差异在风格编码器里是充分可分的(三档副词的余弦距离 0.947–0.967,比它确实响应的音高高低轴 0.983 还大),模型仍然把这一维丢掉了——因为强度从来不在它的标注体系里。
专门为强度设计的模型做得到。① 类三个成员在 ESD 与 RAVDESS 上都有真实跨度:Mixed-Emotions 跨度 +0.85 / +0.81、EIT 0.74/0.72/0.86 与 0.81/0.78/0.94;EmoSphere-TTS 跨度 +0.58 / +0.33(不过滤 +0.55)、EIT 0.78/0.74/0.84 与 0.73/0.80/0.87;EmoKnob 跨度 +0.12 / +0.41。我们的 α 是 0.94/0.93/0.96、跨度 +0.52(仅 ESD)。
这条分类在两个语料上都成立(见 §5.4e),是本节最稳的结论。
-
"能生成情感"与"能控制强度"是两件事。VALL-E X 是最干净的例子:它克隆一条情感录音后归一 RA 达 0.93(1.0 = 真实情感录音的水平)——情感表达完全没问题,但它没有任何接口让你把这个情感调弱。CosyVoice3 同理,而且更有说服力:它的音质是全场最好的(UTMOS 3.6),提示词能让它"生气",但"有点生气"和"非常生气"合成出来的强度没有区别(三档 RA 0.10 / 0.08 / 0.10)。
-
强度可控性与音质是两条独立的轴,而且现有方法往往只能占一头。PromptTTS 音质最高(UTMOS 4.3)但旋钮不动;CosyVoice3 次高(3.6)且音色最好(SECS 0.876)同样不动;Mixed-Emotions 旋钮最好用但音质最差(1.34,内置 Griffin-Lim)。EmoSphere-TTS 是唯一两头都沾的基线:跨度 +0.58 与我们相当、弱档 UTMOS 3.32 高于我们,但它的音质随强度单调下降(强档 2.85、RAVDESS 强档两成样本 CER 超标),且 EIT 0.74–0.84 低于我们的 0.93–0.96;我们在 2.07–2.29、三档音质随 α 反而上升,跨度与 EIT 都是最高的。
-
方向向量加法会饱和。EmoKnob 的机制是
emb + strength × 情感方向,其弱档(strength 0.5)的归一 RA 已经是 0.69,调到 1.0 只升到 0.81。方向固定、标量只缩放长度,而感知强度对长度的响应很快进入平台区。我们的 α 作用在速度场上、两端由数据监督,不存在这个问题——这是架构层面的差别,不是调参能弥补的。
6.3 一个方法学观察:这个方向的可复现性很差¶
十二个候选对比对象里,能在公开材料上完整复现评测的有七个(EmoKnob、EmotiVoice、VALL-E X、PromptTTS、Mixed-Emotions、EmoSphere-TTS,加上我们的骨干 CosyVoice3),其中 EmoSphere-TTS 还得自己补一个声码器。其余五个的障碍不是算力也不是环境:
| 障碍类型 | 模型 |
|---|---|
| 无代码无权重 | MsEmoTTS、Zhu 2019、EmoDiff、InstructTTS |
| 有权重但缺复现管线(16 kHz 声码器与二进制数据集官方未发布) | EmoSphere++(EmoSphere-TTS 同样缺,本节自补后跑通) |
这解释了为什么本领域的论文普遍只与自己的消融比较,横向比较稀少。这一点值得在论文里直说,既说明我们的对比范围为何有限,也是对社区的一个观察。
6.4 三处需要在论文里标注的口径¶
- EmotiVoice 的 SECS 不可与其他模型并列:它不支持说话人克隆,用的是内置音色库,合成的根本不是输入说话人,SECS 0.667(范围 0.393–0.913,取决于内置音色碰巧像不像)。它的强度结论有效,音色数字无意义。
- Mixed-Emotions 的归一跨度不可与其他模型并列,EIT 可以:它用内置 Griffin-Lim 出声,UTMOS 1.34 是全场最低(真实录音 2.74),相位伪影把 eGeMAPS 推出 RA 的标定区间——强档原始 RA 1.17 已高于真实情感录音的 0.775,于是归一跨度 +0.85 虚高。EIT 是模型内同句配对比较,声码器对三档的影响相同,因此可比。另外它是 ESD-0019 的单说话人模型,只能合成该说话人读过的句子,评测句取自 0019 自己的 held-out test(30 句 × 4 情感),与 PromptTTS 那批跨说话人抽的 en 句子不是同一批;作者的训练划分未公开,无法排除少量重叠。
- VALL-E X 的 CER 通过率只有 54%:转写显示它确实会跑偏("再多吃些鸡肉"→"知较比较"),这是 VALL-E 系列已知的克隆不稳定,非调用问题。其归一 RA 0.93 是在通过门槛的 65 条上算的。
6.5 待补¶
- EmoDiff 协议对齐:在 ESD-en 上训一个情感分类器,画我们的 P(目标类) 随 α 的曲线,与其论文 Fig. 2 并列。
- 主观 EIT / BWS:若合作者要做听测,协议照搬 §4,只需把 RA 换成听众。