跳转至

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) 单档(情感参考克隆) 无

三点归纳:

  1. 只有三个基线有原生强度接口:Mixed-Emotions 的属性向量、EmoKnob 的方向向量标量、EmoSphere-TTS 的球坐标半径。其余模型的「三档」要么靠提示词文本里的程度副词(③ 类),要么由我们在其条件表示上构造(② 类)。
  2. ③ 类的三档是语言层面的,不是参数层面的:模型收到的只是不同的词,能否区分取决于它训练时有没有学过这些词对应的强度差异。
  3. α 在不同模型里不是同一个量:我们的 α 是速度场混合系数、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")

两处需要额外说明的设定

  1. EmoKnob 的情感方向向量:用 ESD-en train 划分中同说话人的 8 对(情感 − 中立)说话人嵌入之差取均值构造,不使用 test 条目,避免泄漏。强度标量 strength ∈ {0.5, 0.75, 1.0} 乘在该方向上。
  2. EmoKnob、PromptTTS 与 EmoSphere-TTS 的说话人范围:ESD-en 中 0012–0014 的音频未下载,三者的样本池限定在 {0011, 0015–0020} 七位说话人。Mixed-Emotions 为单说话人模型,样本池仅 0019。
  3. 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 六条读法

  1. 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 以上;上表为短式下的结果。

  2. VALL-E X 是"能生成不能控制"的最干净例子:克隆真实情感录音后归一 RA 达 0.93(几乎等于真实录音的 1.0),音色 SECS 0.901 也很高——情感表达完全没问题,但它只有一档,没有任何接口调强弱。

  3. EmoKnob 的旋钮在动但很快饱和:弱档归一 RA 已经 0.69,调到强档只到 0.81,跨度 +0.12。机制是 嵌入 + 标量 × 情感方向,方向固定、标量只缩放长度,感知强度对长度的响应很快进平台区。

  4. 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 的标注体系里从来不是一个可控因子。这与 ② 类嵌入插值的失败是同一个结论的两种表现:没有为强度提供监督信号的模型,不会因为接口上多给一个旋钮就获得强度控制。

  5. 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 不可跨语言直接比。

  1. 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 一致。

三条读法

  1. 分类结论跨语料稳住了:只有 ① 类(有原生强度接口)的三个成员的旋钮真的动,② ③ 类在两个语料上都不动。这是本节最重要的结果。

  2. 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)。它的旋钮不是某个语料的偶然。

  3. 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. 连续强度控制需要专门的机制,不是"顺带就有"的能力。这是本节的核心论点,七个对比对象分成干净的两组:

    没有为强度提供监督的模型,一律做不到。② 类在嵌入空间做线性插值(最自然的"免费"做法)换来的强度移动是 −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),是本节最稳的结论。

  2. "能生成情感"与"能控制强度"是两件事。VALL-E X 是最干净的例子:它克隆一条情感录音后归一 RA 达 0.93(1.0 = 真实情感录音的水平)——情感表达完全没问题,但它没有任何接口让你把这个情感调弱。CosyVoice3 同理,而且更有说服力:它的音质是全场最好的(UTMOS 3.6),提示词能让它"生气",但"有点生气"和"非常生气"合成出来的强度没有区别(三档 RA 0.10 / 0.08 / 0.10)。

  3. 强度可控性与音质是两条独立的轴,而且现有方法往往只能占一头。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 都是最高的。

  4. 方向向量加法会饱和。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 三处需要在论文里标注的口径

  1. EmotiVoice 的 SECS 不可与其他模型并列:它不支持说话人克隆,用的是内置音色库,合成的根本不是输入说话人,SECS 0.667(范围 0.393–0.913,取决于内置音色碰巧像不像)。它的强度结论有效,音色数字无意义。
  2. 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 句子不是同一批;作者的训练划分未公开,无法排除少量重叠。
  3. VALL-E X 的 CER 通过率只有 54%:转写显示它确实会跑偏("再多吃些鸡肉"→"知较比较"),这是 VALL-E 系列已知的克隆不稳定,非调用问题。其归一 RA 0.93 是在通过门槛的 65 条上算的。

6.5 待补

  • EmoDiff 协议对齐:在 ESD-en 上训一个情感分类器,画我们的 P(目标类) 随 α 的曲线,与其论文 Fig. 2 并列。
  • 主观 EIT / BWS:若合作者要做听测,协议照搬 §4,只需把 RA 换成听众。

讨论