跳转至

M21-E2 · 情感强度指标

状态 ✅ 完成(2026-09-03 定稿)
一句话 造一把能量"情感强度"的尺子,并用真人标注证明这把尺子可信;然后用它给出 α 旋钮的刻度表
上游 ← M21 总提案 · 测量对象 = M20@420k 的 α 旋钮
下游 → E7 回答"强度在声学上是什么"

TL;DR

α=0 的中立化与真实中立录音统计上不可区分(0.091 vs 0.082),α=1 达到真实情感强度的 89%。 但 α 刻度不是等间隔的——α=0.25 只兑现名义强度的 66%。

  • ❌ 项目此前用的 emotion2vec 分类概率不能测强度:92% 的分数被压在 0 或 1(§1)
  • ✅ 改用两个文献方法:相对属性排序(主)+ arousal(副)(§2)
  • ✅ 外部验收:在 CREMA-D 的真人强度标注上,中文训练的排序器直接套用到英文库, 四档落在 −0.22 / +0.15 / +0.42 / +1.10——刻度基本原样迁移(§4.3)
  • ⚠️ 只报相关系数会掩盖刻度问题:ρ组内 0.914,但按条中心化 CCC 仅 0.537

1 为什么要换指标

项目此前用 emotion2vec 的分类概率当强度读数。把它放到一个已知强度的阶梯上一测就露馅:

旧指标饱和 vs 新指标展开

  • 左:分类概率在 α=0.25 就已经跳到中位 0.37、α=0.5 已经饱和到 0.99。 92% 的分数落在 <0.05 或 >0.95,相邻强度档的 AUC 仅 0.618(≈瞎猜)
  • 中:相对属性排序在同一批音频上平滑上升,档与档之间分得开
  • 右:分布对比——一个是两根柱子,一个是连续展开

结论:分类概率回答的是"是不是生气",不是"有多生气"。 此前各实验的 emotion2vec delta 读数只应作"情感是否翻转"用。

中图的绝对高度偏高,是说话人平移

该阶梯 120 条全部来自说话人 0001,其真实中立录音的 RA 基线本身就是 +0.62 (十位说话人从 −0.60 到 +0.78)。RA 的绝对刻度随说话人平移, 所以绝对值必须配同批锚点读——这正是 §4.1 的做法。

2 指标

2.1 主指标:相对属性排序(Relative Attributes)

项 内容
出处 Parikh & Grauman, Relative Attributes, ICCV 2011(方法);Zhou et al., Emotion Intensity and its Control for Emotional Voice Conversion, IEEE TAFFC 2022(用在语音情感强度上,arXiv:2201.03967)
思路 强度没有绝对真值,但序是可靠的:中立一定比情感弱。用这个序训一个排序器,它就能给任意单条音频打出连续强度分
特征 eGeMAPSv02 88 维(Eyben et al., IEEE TAFFC 2016),opensmile 提取
模型 RankSVM:对「情感 − 中立」的成对差做线性 SVM(LinearSVC,C=0.1,无截距)
训练数据 ESD 中文 train 划分,说话人 ≤0010,每类 150 条;四种情感各训一个排序器
刻度 用两端定标:0 = 真实中立录音的均值,1 = 真实情感录音的均值

RA 的完整流程

flowchart LR
  subgraph T["训练(离线一次)"]
    direction TB
    A["ESD-zh train · 说话人 0001–0010<br/>中立 150 句 + 4 情感各 150 句"] --> B["openSMILE eGeMAPSv02<br/>每句 → 88 维句级统计量"]
    B --> C["z 标准化<br/>μ, σ 由 750 句估计并保存"]
    C --> D["对每种情感 e:<br/>P_i − N_i 标 +1,N_i − P_i 标 −1<br/>300 个差向量"]
    D --> E["LinearSVC(C=0.1, 无截距)<br/>→ 权重 w_e (88 维)"]
    E --> F["定标:lo_e = mean(z_N·w_e)<br/>hi_e = mean(z_P·w_e)"]
  end
  subgraph S["打分(每条新音频)"]
    direction TB
    G["音频 → 16 kHz → eGeMAPSv02 (88)"] --> H["z = (x − μ) / σ"]
    H --> I["s = z · w_e"]
    I --> J["RA = (s − lo_e) / (hi_e − lo_e)"]
  end
  F -. "μ σ, {w_e, lo_e, hi_e}" .-> H

训练五步

  1. 选样本:ESD 中文 train 划分、说话人 0001–0010;中立 150 句,生气 / 高兴 / 悲伤 / 惊讶各 150 句,共 750 句。
  2. 提特征:每句 16 kHz 音频 → openSMILE eGeMAPSv02 → 88 维。全部是整句统计量:F0 的均值 / 20-50-80 分位 / 上升斜率、响度的均值 / 分位 / 峰速率、 谱斜率、alpha ratio、Hammarberg 指数、MFCC1–4 均值、jitter、shimmer、谐噪比、有声段长度与速率……一句话变成一个点。
  3. 标准化:用 750 句估每维的 μ、σ,z = (x − μ)/σ。μ、σ 存下来,打分时用同一套。
  4. 对每种情感 e 各训一个排序器:取该情感 150 句 z 向量为 P、中立 150 句为 N;打乱后按索引一一配对, P_i − N_i 标 +1、N_i − P_i 标 −1,得 300 个差向量;在其上拟合 LinearSVC(C=0.1, fit_intercept=False) → 88 维权重 w_e。 不要截距是因为排序比较的是两条音频之差,分界面须过原点;C 取小是 88 维只有 300 样本,防过拟合到个别维。
  5. 定标:把 N、P 分别投影 s = z·w_e,两组均值记 lo_e、hi_e。产物是一个 json:μ、σ、四组 {w, lo, hi}——4×88 个权重加几个标量,没有神经网络。

打分四行

x   = eGeMAPSv02(音频 @16kHz)            # 88 维
z   = (x − μ) / σ                        # 训练时存的 μ σ
s   = z · w_e                            # 选该音频所属情感的 w
RA  = (s − lo_e) / (hi_e − lo_e)         # 0 = 训练集中立均值,1 = 训练集该情感均值

例:生气排序器 lo=−1.2、hi=+2.3,一条音频投影得 s=0.55 → RA=(0.55+1.2)/3.5=0.50,即处在真人中立与真人生气正中间。 两条补充:中立音频没有对应的 w(评 CREMA-D 中立档时)→ 取三个排序器均值;|RA| 超出 [−3, 5] 判为退化并剔除(见下方警告)。

"排序"在哪——训练时学"差向量分类",推理时做"比大小",是同一件事:

\[\mathrm{RA}(a) > \mathrm{RA}(b) \;\Leftrightarrow\; z_a\!\cdot w > z_b\!\cdot w \;\Leftrightarrow\; w\cdot(z_a - z_b) > 0\]

右端正是训练时要求分类器对 (情感 − 中立) 差向量输出正号的条件。SVM 找到的 w 就是"情感一致地排在中立之上"的那个方向; 新音频往上一投影就得到它在中立→情感轴上的位置。中间值不是标签给的(标签只有 ±1),是特征连续、投影自然连续。

三个常问

问 答
为什么不直接训分类器取概率? 分类器末端过 sigmoid,远离边界的样本全被推到 0 或 1——emotion2vec 92% 饱和就是这么来的(§1)。排序器输出未压缩的投影值,刻度保留
为什么每种情感单独一把尺? 生气的轴(音高高、响度大、高频多)与悲伤的轴(谐噪比、气声)方向不同,合成一把会互相抵消;代价是打分前须知情感类别
绝对值能跨说话人比吗? 不能。十位说话人的中立录音本身在尺上从 −0.60 到 +0.78(§1 附注),所以各表都配同批真人录音锚点,跨条比看组内 ρ

与 Zhou et al. 2022 原文实现的差异(我们沿用的是方法,排序器是用自己的数据重新训的,没有复用他们的权重):

Zhou et al. 2022(原文 §4.2.2) 本页
训练语料 ESD,随机选一位男性说话人,每情感 300 句(英文侧,与其 Interspeech 2021 协议一致) ESD 中文 train,10 位说话人 0001–0010,每类 150 句(共 750)
声学特征 openSMILE Interspeech 2009 Emotion Challenge 集,384 维 openSMILE eGeMAPSv02,88 维(Eyben 2016 的标准化最小集)
排序器 RankSVM,第三方实现(chaitanya100100/Relative-Attributes-Zero-Shot-Learning),每情感一个 LinearSVC 拟合成对差,每情感一个
约束 有序对(情感 > 中立)+ 相似对(中立–中立、情感–情感) 只用有序对
刻度 训练集上 min-max 归一到 [0, 1] 0 = 真实中立均值、1 = 真实情感均值(两端定标)
用途 给 EVC 训练数据打强度标签,作条件输入 评测指标
效度验证 听测(MOS / BWS) 构造阶梯 + CREMA-D 真人三档标注(§4.3)

原文源码与样例:kunzhou9646.github.io/Emovox_demo;排序器权重是否公开,原文未说明。

为什么这个刻度重要:分数不是任意单位,0 和 1 都对应真实录音。 "α=1 打 0.997"直接读作"达到了真人情感录音的水平"。

四个排序器的中立/情感可分度 d′:

Angry Surprise Happy Sad
1.69 1.54 1.40 1.01

Sad 最弱 —— 归因见 E7 §3.4:悲伤的总声学位移只有生气/惊讶的 1/3, 且 36% 落在节奏/时长,而节奏正是本架构因 DTW 锁定时间轴而表达不了的通道。

2.2 副指标:维度情感模型的 arousal

项 内容
出处 Wagner et al., Dawn of the Transformer Era in Speech Emotion Recognition, IEEE TPAMI 2023;模型 audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim
输出 arousal / dominance / valence ∈ [0,1]
作用 零训练、完全外部(MSP-Podcast,英文)——与本项目无任何共享成分,用作跨域印证
依据 以 arousal 作强度代理是 EmoSphere-TTS 等工作的通行口径

valence 是阴性对照:强度旋钮应当只动激活度、不动效价。 若 valence 也跟着 α 走,说明测的是"泛泛的音频差异"而非"强度"。

RA 的适用前提(2026-09-05 补)

RA 建在 eGeMAPS 上,崩坏音频会产生离谱值(E4 中 |α|≥2 的输出、E5 的常向量臂读出 1.6–2.4 甚至更高)—— 这是"偏离中立分布"被读成了"强度"。约定:|RA| 超出 [−3, 5] 判为退化并剔除;RA 只在 CER ≲ 0.1 的可懂音频上可解释。本页各表均在可懂音频上。

2.3 统计口径:ρ 与 CCC 都要报

统计量 管什么 为什么不能只报一个
Spearman ρ(组内) 单调性 只要 α 升分数就升,ρ 就高——刻度歪了它也看不出来
CCC(一致性相关) 刻度一致性 同时惩罚斜率偏差与偏移

ρ 取组内(每条音频内部按 α 排序再平均):不同说话人的绝对基线差异很大(见 §1 附注), 跨条混算会被基线方差主导。CCC 同理需按条中心化后再算。

3 评测设计

指标是一把尺子。"测这把尺子准不准"和"用这把尺子去量模型"是两件事, 分别用三批音频完成:

批次 层级 回答的问题
构造阶梯(120 条) 测尺子 给一个已知的强度梯度,指标读得出来吗
CREMA-D(191 条) 测尺子 换成别人标的真人强度,还准吗
模型 α 扫描(160 条) 用尺子 ← 实验结果:旋钮拧到 0.5,实际给出多少强度

前两批是给尺子做的校准检验(§4.4 / §4.3), 第三批才是主结果(§4.1)。

3.1 测尺子:两个校准检验

构造阶梯 CREMA-D
内容 真实中立与情感音频按音高对齐混合,混合比即真值强度;α∈{0,0.25,0.5,0.75,1},120 条 英文库,16 位演员 × 3 句 × ANG/HAP/SAD × 真人标注的 LO/MD/HI 三档 + 中立;191 条
真值来自 我们自己构造 真人标注
检验什么 指标有没有分辨率——连人为造出来的梯度都读不出来,尺子就是坏的 指标会不会只在我们自己造的东西上碰巧好使
独立性 ⚠️ 自构造,见下方警告 ✅ 完全外部:不同语言、不同录音条件、不同标注者

构造阶梯有一处循环性,已声明

阶梯按对数插值 F0 构造,所以任何以 F0 为主的指标在它上面都会天然得高分。 因此阶梯只用于"指标能否读出已知强度"的自检,不用于声学归因—— 那部分已移交 E7,改用不含 α 的位移分解。 CREMA-D 的存在正是为了补上这个漏洞。

3.2 用尺子:模型 α 扫描(主结果)

项 值
模型 M20@420k(outputs/m20d/ckpts/step160000.pt),direct 臂
样本 ESD test 划分随机 160 条(四情感各 40),与 E7 同一批
α 网格 0 / 0.25 / 0.5 / 0.75 / 1.0 / 1.25 / 1.5
刻度锚点 同一批 160 条的真实中立录音与真实情感录音,另加训练目标两端

为什么必须另测真实录音:RA 的绝对分数随说话人平移—— 十位 ESD 说话人的真实中立基线从 −0.60 到 +0.78。 不配同批锚点,"α=0 打 0.091"这个数没法解读;配上锚点才能说 "它与真实中立录音的 0.082 不可区分"。

采样率统一 16 kHz:排序器训练于 16 kHz 的 ESD 录音,模型输出(24 kHz)一律重采后再打分。 实测该差异逐条可达 ±0.5,均值影响可忽略。

4 结果

4.1 主结果:α 的刻度表(n=160)

α 0 0.25 0.5 0.75 1.0 1.25 1.5
RA 强度分 0.091 0.241 0.577 0.721 0.997 1.245 1.613
±SE 0.048 0.045 0.046 0.089 0.048 0.050 0.095
arousal 0.404 0.458 0.598 0.616 0.612 0.621 0.643
valence(对照) 0.452 0.449 0.426 0.444 0.439 0.448 0.457

同批 160 条的真值锚点:

音频 RA arousal
真实中立录音 0.082 ± 0.046 0.366
训练目标·中立(DTW 变速 + HiFT) 0.135 ± 0.047 0.426
训练目标·情感(HiFT) 1.130 ± 0.068 0.608
真实情感录音 1.099 ± 0.058 0.590

per-α 强度分

四条读法

  • ✅ α=0 的中立化是干净的:0.091 vs 真实中立录音 0.082,差 0.009 —— 统计上不可区分
  • ✅ α=1 基本到位:0.997 vs 真实情感 1.099,差 0.10(约 1.4σ,不显著); 可控跨度 0.91 = GT 跨度 1.02 的 89%
  • ⚠️ α 刻度不是等间隔的:归一到 α=1 处为 1.0 后,各档兑现率 0.25 → 66%、0.5 → 107%、0.75 → 93%、1.25 → 102%、1.5 → 112%。 低档偏保守 ⇒ 用户拧到 0.25 拿到的强度只有名义的三分之二
  • 🔍 arousal 在 α≥0.5 后饱和(0.598 / 0.616 / 0.612 / 0.621 / 0.643),而 RA 一路单调到 1.5 ⇒ arousal 只能区分"有没有情感",不能区分档位;副指标定位收窄为跨域方向性印证

统计量

统计量 值
ρ组内(α∈[0,1]) 0.914
ρ组内(α∈[0,1.5]) 0.906
CCC(α∈[0,1],按条中心化) 0.537
CCC(α∈[0,1.5],按条中心化) 0.614

ρ 0.914 但 CCC 只有 0.537——差距就是上面第三条量化的刻度非线性。 单调性很好,等间隔性不好。

全量复核(M21-F,2026-09-10)

汇总页 补充 S7(提案待验收,验收后回填)。 全量 zh test 1276 条(M21-F)重算 §4.1 主表,160 条版结论不变:

α 0 0.25 0.5 0.75 1.0 1.25 1.5
RA(1276 条) 0.065 0.219 0.530 0.749 0.943 1.164 1.436
RA(160 条) 0.091 0.241 0.577 0.721 0.997 1.245 1.613

锚点(1276 条):真实中立 0.065,真实情感 1.029。α=0 与真实中立仍不可区分(0.065 vs 0.065);α=1 达 GT 跨度的 91%。 兑现率(归一到 α=1):0.25 → 70%、0.50 → 106%、0.75 → 104%、1.25 → 100%、1.50 → 104%——α=0.25 只兑现七成这一条在全量上成立。

统计量订正:ρ组内(α∈[0,1])1276 条 0.910,160 条 0.914。中心化 CCC:1276 条 0.848;160 条按同口径(剔除退化 RA)重算为 0.860,本页此前写的 0.537 是未剔除退化值时算的,已作废。 ρ 与 CCC 的差距因此只有 0.06——刻度问题主要就是 α=0.25 那一档偏保守,其余档接近等间隔。

4.2 按情感

情感 α=0 0.25 0.5 0.75 1.0 1.25 1.5
Angry −0.116 0.107 0.416 0.637 0.858 1.214 1.669
Happy 0.067 0.210 0.570 0.805 1.054 1.343 1.802
Surprise 0.048 0.191 0.646 0.606 1.145 1.418 2.098
Sad 0.365 0.458 0.677 0.838 0.933 1.006 0.883

悲伤是例外:α=0 起点 0.365(其他 −0.12 ~ 0.07)⇒ 中立化最不彻底; α=1.5 反而回落(1.006 → 0.883)⇒ 可控区间比其他情感更窄。 与 §2.1 的 d′ 最低、E7 §3.4 的节奏归因,三处独立证据指向同一个架构限制。

4.3 外部验收:CREMA-D 的真人强度标注

项 内容
数据 CREMA-D(Cao et al., IEEE TAFFC 2014),16 位演员 × 3 句 × ANG/HAP/SAD × LO/MD/HI + NEU
规模 191 条(本地子集)
独立性 英文、不同录音条件、真人强度标注,与本项目的构造方式无任何关系
应用方式 排序器在中文 ESD 上训练,不做任何微调直接打分

CREMA-D 外部验收

指标 中立 低 中 高 三档成对排序准确率 ρ(四档)
相对属性排序 −0.22 +0.15 +0.42 +1.10 76% (109/144) +0.52
arousal 0.30 0.36 0.41 0.56 72% +0.38
dominance 0.38 0.41 0.44 0.57 71% +0.33
valence(阴性对照) 0.40 0.42 0.41 0.42 54%(≈随机) +0.07

三条读法

  • 🔑 刻度跨语言迁移:排序器的 0 和 1 是在中文 ESD 上定标的, 直接套到英文 CREMA-D,中立档落在 −0.22、最高档落在 +1.10 —— 基本原样迁移。这比单看"76% 排序准确率"强得多
  • ✅ 两个指标都显著超过随机(76% / 72%,随机 50%)⇒ 不是自我循环的产物
  • ✅ valence 恰好落在随机线(54%) ⇒ 阴性对照成立:测的是"强度"这一维度, 而非泛泛的音频差异

诚实的限度:76% 不算高。CREMA-D 的 LO/MD/HI 区分对人本身就难, 这个数字应读作"方向正确、可用于相对比较",而非"精确测强度"。本地只有 191 条,样本量偏小。

4.4 构造阶梯上的方法自检

指标 ρ全局 ρ组内 CCC
相对属性排序 0.590 0.787 0.302
arousal 0.485 0.771 0.257
dominance 0.387 0.604 0.153
valence(对照) −0.013 0.004 0.006

两个指标都能读出构造的已知强度,valence 归零。⚠️ 全局 ρ 低于组内, 正是 §2.3 说的说话人基线问题(此阶梯为单说话人,故全局/组内差异主要来自条间差异)。

5 结论

项 结论
旧指标 ❌ emotion2vec 分类概率不能测强度(92% 饱和、AUC 0.618);delta 读数只作"是否翻转"用
指标方案 ✅ 相对属性排序(主)+ arousal(副),均有文献出处
外部效度 ✅ CREMA-D 真人标注上四档 −0.22/+0.15/+0.42/+1.10,成对排序 76%;valence 54% 阴性对照
α=0 ✅ 与真实中立录音不可区分(0.091 vs 0.082)
α=1 ✅ 达真实情感强度的 89%
刻度线性度 ⚠️ α=0.25 只兑现 66–70%,其余档接近等间隔;ρ组内 0.91、中心化 CCC 0.85–0.86(160 条与 1276 条一致;此前的 0.537 未剔除退化值,已订正)
arousal 的限度 ⚠️ α≥0.5 后饱和 ⇒ 不用于档位分辨
悲伤 ⚠️ 三处一致例外(d′ 最低、α=0 起点最高、α=1.5 回落)⇒ 架构天花板,见 E7

6 复现

source scripts/env.sh
# 排序器(RankSVM on eGeMAPS)
$PY emo/exp/M17_editor/m21_e2b_ranker.py
# α 网格生成与打分(复用 E7 的 160 条 ESD test)
CUDA_VISIBLE_DEVICES=0 $PY emo/exp/M17_editor/m21_e2e_alphagrid.py
CUDA_VISIBLE_DEVICES=0 $PY emo/exp/M17_editor/m21_e2e_score.py
# CREMA-D 外部验收
CUDA_VISIBLE_DEVICES=0 $PY emo/exp/M17_editor/m21_e2f_crema_perclip.py
# 配图
$PY emo/exp/M17_editor/m21_e2e_plot.py && $PY emo/exp/M17_editor/m21_e2_figs.py

产物:outputs/m21/e2b/{ranker,crema_perclip}.json、outputs/m21/e7/alphagrid_scores.json。

订正记录(2026-09-03)
  • 旧「模型 α 扫描」列已废:原建在 E4 的 P6 11 条上,而那 11 条当初是为 试听挑的、非随机抽样。α=0 在其上打 0.446,在 160 条随机样本上是 0.091; 自助检验显示从 160 条抽 11 条能抽到 ≥0.446 的概率仅 2.6%。 受影响的旧数字:ρ组内 0.927、CCC 0.451。
  • 采样率不一致:E4 输出 24 kHz,排序器训练于 16 kHz。逐条影响达 ±0.5, 但均值几乎不变(0.446 → 0.441),故非上条的主因。现已统一 16 kHz。
  • 自建指标降级:初版曾用"emotion2vec 嵌入投影到中立→情感方向"(ρ 0.905)。 该方法为自创、需配对中立版、端点被构造钉死,降级为内部诊断,不作为对外口径。
  • 声学载体结论已移交 E7:本页初版基于构造阶梯得出"F0 主导", 系阶梯按 F0 插值构造的循环产物,已被 E7 的非循环测量推翻 (实际排序为 响度 > 谱斜率 > MFCC > F0)。

讨论