27 KiB
Q2 多模态情感预测:当前两个核心方案
我们目前保留两个主要模型:
-
方案一:Mask-aware EarlyConcat + BiGRU
- 结构简单;
- 参数少;
- 是我们的强基线模型。
-
方案二:MoFE-7 + MLP Router
- 针对 EarlyConcat 在所有位置使用同一融合形式的限制,显式学习不同模态子集的组合权重;
- 已按数学方案的 Q2 口径重训;本次单种子结果中,Accuracy 略高,但 Macro-F1、回归指标和缺失情景汇总点估计低于 EarlyConcat。
二者其实是一条很自然的递进路线:
方案一:把所有可用模态直接交给一个统一模型学习。
方案二:先判断当前更适合使用哪一种模态组合,再交给统一模型学习。
一、数据在进入模型之前是什么样子?
我们使用官方提供的对齐后多模态特征。
每条样本被表示为长度为 50 的有序序列:
[ t=1,2,\dots,50. ]
注意,这里的 50 个位置是 wordpiece ordered positions(按文本词片顺序排列的位置),不是严格意义上的 50 个等长物理时间片。
在每个位置 (t),都有三种模态:
[ T_t\in\mathbb{R}^{768} ]
表示文本 BERT 特征;
[ A_t\in\mathbb{R}^{74} ]
表示音频特征;
[ V_t\in\mathbb{R}^{35} ]
表示视觉特征。
同时还有三个 observation mask:
[ M_t^T,\quad M_t^A,\quad M_t^V. ]
它们告诉模型:
当前位置的 Text / Audio / Vision 到底有没有有效观测。
因此 mask 非常重要。
例如某个 Audio 特征全为 0:
- 没有 mask 时,模型不知道这是“真实特征刚好接近 0”;
- 有 mask 时,模型知道这是“Audio 当前缺失”。
二、方案一:Mask-aware EarlyConcat + BiGRU
2.1 一句话理解
EarlyConcat 的思想非常直接:
同一个位置上的文本、音频、视觉特征全部放在一起,然后交给一个 BiGRU,让模型自己学习三种模态之间以及前后位置之间的关系。
整体流程:
[ \boxed{ T/A/V + Masks \rightarrow Early Concatenation \rightarrow BiGRU \rightarrow Sequence\ Aggregation \rightarrow Classification/Regression } ]
2.2 第一步:同位置多模态拼接
对于位置 (t),我们有:
[ T_t,\quad A_t,\quad V_t. ]
当前实现先分别把三个模态投影到 128 维,再加上位置和模态标记,并用 mask 清零缺失模态:
[ z_t^m=M_t^m\left[\operatorname{LN}(\operatorname{GELU}(W_mX_t^m+b_m))+p_t+e_m\right], \quad m\in{T,A,V}. ]
随后拼接投影后的特征和三个 mask,再经过一个融合层:
[ x_t^{\mathrm{fuse}}= \phi([z_t^T;z_t^A;z_t^V;M_t^T;M_t^A;M_t^V]). ]
其中 (\phi) 是 Linear、GELU、LayerNorm 和 Dropout。这个工程实现仍属于 EarlyConcat:模态在时序主干前合并,但各自先经过独立投影,并保留 mask。
这里的符号
[ [,;,] ]
表示向量拼接。
也就是说,本来三个模态是三份信息:
Text ── T_t
Audio ── A_t
Vision ── V_t
现在把三个投影后的模态表示和 mask 放到同一个向量:
[projected Text | projected Audio | projected Vision | masks]
这就是 Early Concatenation(早期拼接)。
之所以叫“Early”,是因为:
三个模态在进入主要时序模型之前就已经融合。
2.3 第二步:BiGRU 建模上下文
融合层处理以后,我们得到长度为 50 的序列 (x_t^{\mathrm{fuse}}):
[ x_1^{\mathrm{fuse}},x_2^{\mathrm{fuse}},\dots,x_{50}^{\mathrm{fuse}}. ]
然后送入双向 GRU:
[ H= BiGRU(x_1^{\mathrm{fuse}},x_2^{\mathrm{fuse}},\dots,x_{50}^{\mathrm{fuse}}). ]
BiGRU 包含两个方向。
前向 GRU:
[ x_1\rightarrow x_2\rightarrow\cdots\rightarrow x_{50} ]
负责利用前面的上下文;
反向 GRU:
[ x_{50}\rightarrow x_{49}\rightarrow\cdots\rightarrow x_1 ]
负责利用后面的上下文。
因此当前位置的表示可以同时参考:
[ \text{前文信息} + \text{当前位置多模态信息} + \text{后文信息}. ]
这对局部模态缺失尤其有用。
例如位置 (t) 的 Audio 缺失了:
t-2 t-1 t t+1 t+2
Audio ✓ × ✓ ✓
Text ✓ ✓ ✓ ✓
Vision ✓ ✓ ✓ ✓
模型仍然可以利用:
- 当前位置的 Text;
- 当前位置的 Vision;
- 前后位置的上下文;
- mask 告诉模型 Audio 当前缺失。
因此 EarlyConcat + BiGRU 本身就具有一定的隐式缺失补偿能力。
2.4 第三步:得到整条样本表示
BiGRU 得到:
[ H=(h_1,h_2,\dots,h_{50}). ]
随后按照现有实现对整个序列进行聚合,得到 clip-level representation:
[ h_{\mathrm{clip}}. ]
当前实现对 BiGRU 的位置输出做 masked mean:只平均至少有一个模态观测的位置;如果一条样本全部缺失,则保留一个位置用于产生序列级输出。
2.5 第四步:同时预测情感极性和情感强度
模型最终有两个任务:
任务 A:情感极性分类
当前分类头预测三类极性:
[ \text{Negative / Neutral / Positive}. ]
得到:
[ \hat y_{\mathrm{cls}}. ]
任务 B:情感强度回归
预测连续情感强度:
[ \hat y_{\mathrm{reg}}. ]
因此最终:
[ h_{\mathrm{clip}} \rightarrow \begin{cases} Head_{\mathrm{cls}} \rightarrow \hat y_{\mathrm{cls}}\ Head_{\mathrm{reg}} \rightarrow \hat y_{\mathrm{reg}} \end{cases} ]
训练时采用交叉熵分类损失与强度回归损失的加权和:
[ \mathcal L
\operatorname{CE}(y_{\mathrm{cls}},\hat y_{\mathrm{cls}}) +0.5\operatorname{SmoothL1}\left(\frac{\hat y_{\mathrm{reg}}}{3},\frac{y_{\mathrm{reg}}}{3}\right). ]
回归头通过 (3\tanh(\cdot)) 输出 ([-3,3]) 范围的强度值。
2.6 EarlyConcat 为什么效果不错?
它最大的优点其实是:
假设非常少。
它没有提前规定:
- Text 一定最重要;
- Audio 一定只是辅助;
- Vision 应该和 Text 对齐到某个共享语义空间;
- 某个模态缺失以后一定应该由另一个模态修复。
而是:
[ \boxed{ \text{保留三个模态的信息,把学习任务交给 BiGRU。} } ]
因此在我们目前只有几千条训练样本的情况下,它是一个非常稳定的强基线。
三、方案一的问题:所有情况下都采用同一种融合方式
EarlyConcat 的问题也很明显。
无论当前数据是什么情况,它始终做:
[ [T;A;V]. ]
但是实际情况可能是:
情况 1:三个模态都很好
可能:
[ T+A+V ]
一起使用最好。
情况 2:Audio 当前质量不好
可能:
[ T+V ]
更好。
情况 3:Vision 缺失
可能:
[ T+A ]
更合理。
情况 4:Text 本身已经非常有信息
可能:
[ T ]
单独使用反而比加入噪声较大的 A/V 更合适。
所以我们进一步提出:
[ \boxed{ \text{为什么所有位置都必须使用同一种融合方式?} } ]
这就产生了第二个方案。
四、方案二:MoFE-7 + MLP Router
4.1 一句话理解
MoFE 的核心思想是:
不再永远把 T/A/V 一股脑拼起来,而是准备 7 种不同的模态组合方案,再让 Router 根据当前位置的情况决定应该更相信哪些组合。
MoFE 全称:
Mixture of Fusion Experts
中文可以称为:
融合专家混合模型
我们当前还加入了 availability constraint,因此更完整地可以理解成:
Availability-aware Mixture of Fusion Experts
即:
可用性感知的融合专家混合模型。
五、为什么恰好是 7 个 Expert?
我们有三个模态:
[ T,\quad A,\quad V. ]
三个模态所有非空组合一共有:
[ 2^3-1=7 ]
种。
因此定义:
[ \boxed{ \mathcal E= { E_T,E_A,E_V, E_{TA},E_{TV},E_{AV}, E_{TAV} } } ]
具体来说:
| Expert | 可以看到的信息 |
|---|---|
| (E_T) | Text |
| (E_A) | Audio |
| (E_V) | Vision |
| (E_{TA}) | Text + Audio |
| (E_{TV}) | Text + Vision |
| (E_{AV}) | Audio + Vision |
| (E_{TAV}) | Text + Audio + Vision |
这里最关键的一点是:
Expert 的分工不是训练以后才希望它自己形成,而是从结构上就已经确定。
例如:
[ E_{TA} ]
永远不能看 Vision。
而:
[ E_{AV} ]
永远不能看 Text。
因此七个 Expert 天然具有不同的信息来源。
六、MoFE 的完整算法流程
整体流程可以概括成:
[ \boxed{ T/A/V \rightarrow Private Projection \rightarrow 7\ Fusion\ Experts \rightarrow MLP\ Router \rightarrow Weighted\ Fusion \rightarrow Shared\ BiGRU \rightarrow Emotion\ Prediction } ]
下面逐步解释。
6.1 第一步:三个模态分别进行私有投影
原始三个模态维度差异很大:
[ T_t\in\mathbb R^{768}, ]
[ A_t\in\mathbb R^{74}, ]
[ V_t\in\mathbb R^{35}. ]
因此首先分别进行投影:
[ z_t^T=P_T(T_t), ]
[ z_t^A=P_A(A_t), ]
[ z_t^V=P_V(V_t). ]
统一得到:
[ z_t^T,z_t^A,z_t^V\in\mathbb R^{64}. ]
注意:
[ P_T,\quad P_A,\quad P_V ]
是三个独立的投影网络。
这里统一到 64 维只是为了方便后面的计算,并不意味着:
[ z_T=z_A=z_V. ]
我们没有强迫三个模态进入所谓的“共享语义空间”。
我们的原则仍然是:
[ \boxed{ \text{保留模态差异,需要交互时再交互。} } ]
七、第二步:构造七个融合 Expert
例如:
[ E_T(t)=f_T(z_t^T), ]
[ E_{TA}(t)
f_{TA}([z_t^T;z_t^A]), ]
[ E_{TV}(t)
f_{TV}([z_t^T;z_t^V]), ]
[ E_{TAV}(t)
f_{TAV}([z_t^T;z_t^A;z_t^V]). ]
其余同理。
所有 Expert 最后都输出:
[ E_S(t)\in\mathbb R^{64}. ]
这里特别需要说明:
我们的 7 个 Expert 不是 7 个完整的深度网络。
每个 Expert 只是一个很轻量的 fusion module。
真正参数量较大的时序模型 BiGRU 只有:
[ \boxed{1\text{ 个}} ]
而不是 7 个。
所以结构是:
T ─┐
A ─┼─> 7 个轻量 Fusion Experts
V ─┘
│
▼
Weighted Sum
│
▼
一个 Shared BiGRU
而不是:
Expert 1 -> BiGRU 1
Expert 2 -> BiGRU 2
...
Expert 7 -> BiGRU 7
这对于我们的中小规模数据集非常重要。
八、第三步:Router 决定当前更应该相信哪些 Expert
这是 MoFE 最核心的一步。
对于每个位置 (t),我们使用一个小型 MLP Router。
Router 会根据当前位置的信息产生 7 个分数:
[ s_{t,T}, s_{t,A}, s_{t,V}, s_{t,TA}, s_{t,TV}, s_{t,AV}, s_{t,TAV}. ]
经过 Softmax 后得到:
[ \alpha_{t,T}, \alpha_{t,A}, \alpha_{t,V}, \alpha_{t,TA}, \alpha_{t,TV}, \alpha_{t,AV}, \alpha_{t,TAV}. ]
并满足:
[ \sum_{S\in\mathcal E} \alpha_{t,S}=1. ]
只要当前位置至少有一个模态可用,这些权重就在当前可用的 experts 之间归一化;如果三个模态全缺失,则七个 expert 权重都为 0,并改用 learned missing token。
可以把:
[ \alpha_{t,S} ]
理解成:
当前位置模型愿意把多少融合权重分配给 Expert (S)。
九、Router 看什么信息?
当前 Router 主要使用:
- 三个模态的 observation masks;
- 三个 private projection 的 log-RMS 幅值;
- 三个模态各自的局部 5-position observed ratio。
因此 Router 的输入为 9 个数值,MLP 结构为 (9\rightarrow16\rightarrow7),七个输出对应七种模态子集。
也就是说 Router 不只是知道:
“这个模态有没有。”
它还能获得一些局部状态信息:
“这个模态附近是不是经常缺失?”
“当前 private representation 的幅值状态是什么样?”
然后决定:
[ \boxed{ \text{当前位置更适合使用哪种模态组合。} } ]
十、第四步:Availability-aware Routing
我们还加入一个非常重要的约束:
如果某个 Expert 所需要的模态不存在,那么这个 Expert 当前不能被选择。
例如:
[ M_t^A=0. ]
说明当前位置 Audio 缺失。
那么:
[ E_A,\quad E_{TA},\quad E_{AV},\quad E_{TAV} ]
全部依赖 Audio,因此这些 Expert 当前不可用。
我们直接把对应 Router logit 屏蔽:
[ s_{t,S}=-\infty. ]
Softmax 后自然得到:
[ \alpha_{t,S}=0. ]
所以 Router 不需要自己慢慢学:
“Audio 没了以后不要用 Audio。”
这个基本事实直接由模型结构保证。
Router 真正需要学习的是:
在当前仍然可用的 Fusion Experts 中,应该怎样分配权重。
十一、如果三个模态全部缺失怎么办?
如果某个位置:
[ M_t^T=M_t^A=M_t^V=0, ]
那么 7 个 Expert 全部不可用。
此时模型使用一个学习得到的:
[ e_{\mathrm{missing}} ]
作为 all-missing token。
也就是说模型知道:
“这个位置没有可靠的模态观测。”
然后把这个信息继续交给后面的 BiGRU。
BiGRU 可以根据前后位置:
[ t-1,\quad t+1,\quad\cdots ]
继续进行上下文建模。
十二、第五步:对七个 Expert 做加权融合
Router 得到权重后:
[ u_t
\sum_{S\in\mathcal E} \alpha_{t,S}E_S(t). ]
例如某个位置可能学到:
[ \alpha_T=0.50, ]
[ \alpha_{TA}=0.25, ]
[ \alpha_{TV}=0.15, ]
[ \alpha_{TAV}=0.10. ]
那么:
[ u_t
0.50E_T + 0.25E_{TA} + 0.15E_{TV} + 0.10E_{TAV}. ]
所以它不是硬选择:
“只能选一个 Expert。”
而是:
根据当前情况,动态组合多个 Expert。
十三、第六步:统一进入 Shared BiGRU
得到:
[ u_1,u_2,\dots,u_{50} ]
以后,当前实现把每个 (u_t) 与三个 observation masks 拼接,再经过 (67\rightarrow128) 的输入投影层;投影后的序列再统一进入:
[ H= BiGRU(u_1,u_2,\dots,u_{50}). ]
因此整个模型的职责划分非常清楚:
MoFE 负责
[ \boxed{ \text{当前位置应该怎样组合不同模态?} } ]
BiGRU 负责
[ \boxed{ \text{这些位置之间存在怎样的上下文关系?} } ]
也就是:
[ \boxed{ \text{MoFE 做模态组合选择,BiGRU 做序列上下文建模。} } ]
十四、第七步:完成情感预测
BiGRU 输出经过现有序列聚合方式后,得到 clip-level representation:
[ h_{\mathrm{clip}}. ]
然后同时完成:
情感极性分类
[ h_{\mathrm{clip}} \rightarrow Head_{\mathrm{cls}} \rightarrow \hat y_{\mathrm{cls}} ]
情感强度回归
[ h_{\mathrm{clip}} \rightarrow Head_{\mathrm{reg}} \rightarrow \hat y_{\mathrm{reg}}. ]
训练目标继续与 EarlyConcat 相同:
[ \mathcal L =\operatorname{CE}(y_{\mathrm{cls}},\hat y_{\mathrm{cls}}) +0.5\operatorname{SmoothL1}\left(\frac{\hat y_{\mathrm{reg}}}{3},\frac{y_{\mathrm{reg}}}{3}\right). ]
十五、MoFE 为什么比我们之前的 MoE 更合理?
我们之前也尝试过 MoE,但是旧 Expert 类似:
Full Expert
Text-dominant Expert
AV Expert
问题在于:
Expert 到底应该擅长什么,很大程度上需要模型自己学。
在只有几千条训练数据的情况下:
[ \text{既要学 Expert specialization} + \text{又要学 Router} ]
比较困难。
而现在:
[ T,A,V,TA,TV,AV,TAV ]
七个 Expert 的分工天然存在。
例如:
E_T -> 永远只看 Text
E_AV -> 永远只看 Audio + Vision
E_TAV -> 永远看三个模态
因此模型不再需要先学习:
“每个 Expert 到底是什么。”
它只需要学习:
[ \boxed{ \text{当前应该如何组合这些已经定义清楚的 Expert。} } ]
这大幅降低了 Router 学习 specialization 的难度。
十六、MoFE 还可以得到可解释的模态 Utility
Router 得到七个权重以后,我们还可以计算每个模态的:
Task-conditioned Modality Utility
例如 Text:
[ R_T(t)
\alpha_T + \alpha_{TA} + \alpha_{TV} + \alpha_{TAV}. ]
Audio:
[ R_A(t)
\alpha_A + \alpha_{TA} + \alpha_{AV} + \alpha_{TAV}. ]
Vision:
[ R_V(t)
\alpha_V + \alpha_{TV} + \alpha_{AV} + \alpha_{TAV}. ]
它表示:
Router 当前有多少权重分配给了“包含该模态”的融合路径。
需要注意:
[ R_T,R_A,R_V ]
不是物理意义上的“信号可靠性”。
更准确地说,它们是:
[ \boxed{ \text{Task-conditioned Modality Utility} } ]
即:
这个模态对于当前情感预测任务有多大的使用价值。
十七、一个直观例子
假设三个模态都正常。
模型可能认为:
Text 重要
Text + Audio 有帮助
Text + Vision 有帮助
TAV 少量补充
于是:
[ u_t
0.45E_T + 0.25E_{TA} + 0.20E_{TV} + 0.10E_{TAV}. ]
如果当前位置 Text 缺失:
Text ×
Audio ✓
Vision ✓
那么所有包含 Text 的 Expert:
[ E_T,E_{TA},E_{TV},E_{TAV} ]
直接不可用。
Router 只能在:
[ E_A,E_V,E_{AV} ]
之间重新分配:
[ u_t
\alpha_AE_A + \alpha_VE_V + \alpha_{AV}E_{AV}. ]
所以模型可以自然地根据模态缺失状态改变融合策略。
十八、两个方案最核心的区别
| 问题 | EarlyConcat + BiGRU | MoFE-7 + MLP Router |
|---|---|---|
| 模态如何融合 | 直接全部拼接 | 动态组合 7 种模态子集 |
| 是否区分不同融合方式 | 否 | 是 |
| 是否显式利用 mask | 是 | 是 |
| 模态缺失处理 | 交给 BiGRU 隐式学习 | Availability mask + BiGRU |
| 是否有 Router | 否 | 有 |
| Expert 数量 | 无 | 7 |
| 时序主干 | 1 个 BiGRU | 1 个 Shared BiGRU |
| 可解释性 | 一般 | 可以分析 Expert 权重和 Modality Utility |
| 复杂度 | 低 | 略高 |
| 定位 | 强基线;本次重训点估计较强 | 候选;Accuracy 略高,整体优势未确认 |
十九、用一句话理解两个模型
EarlyConcat
“把三种模态的材料都摆在桌子上,让 BiGRU 自己读。”
数学上:
[ \boxed{ [T;A;V;M] \rightarrow BiGRU \rightarrow Prediction } ]
MoFE-7
“先准备 7 种不同的模态组合方案,让 Router 根据当前位置的模态状态决定更应该参考哪些组合,再交给统一的 BiGRU 建模上下文。”
数学上:
[ \boxed{ T/A/V \rightarrow 7\ Fusion\ Experts \rightarrow MLP\ Router \rightarrow Weighted\ Fusion \rightarrow Shared\ BiGRU \rightarrow Prediction } ]
二十、按数学方案 Q2 口径重训后的模型性能
本节替换旧的检查点重评结果,报告 2026-09-25 在 GPU 上从头重训两个模型后的结果。官方测试集只在检查点确定后进行一次干净评估;缺失鲁棒性在官方验证集的 42 个固定情景上评估。
20.1 训练与评估设置
- 使用官方
aligned_50.pkl划分:训练 3,395 条 / 1,528 个 source video,验证 728 条 / 239 组,测试 727 条 / 381 组;三份划分的 source video 互不重叠。 - 输入是 50 个有序 wordpiece positions,文本、音频、视觉维度为 768、74、35;不是 Q1 的 50 个物理时间 bins。
- 两模型共享只在官方训练集观测行上拟合的 median/MAD 缩放器、训练掩码、batch 顺序、seed
20260924和联合目标。 - 连续块训练缺失率为 0%、10%、30%、50%、70%,模式为 single、sync、partial、async;每个被选模态至少保留 20% 原有观测。
- AdamW:学习率
3e-4、weight decay1e-3、batch size 64、最多 12 epochs、patience 3。两模型都在第 3 轮选中检查点。 - checkpoint 选择使用官方验证集上
0.0/none、0.3/single、0.3/sync、0.5/async四情景的平均联合损失。 - 保留当前两个模型的输出头和
CE + 0.5 × SmoothL1目标。数学方案 C5 使用的概率 Beta-mixture 损失与当前确定性输出头不兼容,因此没有移植该损失。 - 测试指标为 Accuracy、Macro-F1、MAE、RMSE、Pearson。分类使用 Negative / Neutral / Positive 三类,回归预测裁剪到 ([-3,3])。
20.2 官方测试集结果
| 模型 | Accuracy ↑ | Macro-F1 ↑ | MAE ↓ | RMSE ↓ | Pearson ↑ | 参数量 |
|---|---|---|---|---|---|---|
| EarlyConcat + BiGRU | 0.6740 | 0.6157 | 0.6624 | 0.8897 | 0.6585 | 253,124 |
| MoFE-7 + MLP Router | 0.6795 | 0.6049 | 0.6761 | 0.8980 | 0.6427 | 306,523 |
差值均为 MoFE-7 减 EarlyConcat,置信区间来自 1,000 次按测试 source-video ID 成对 Bootstrap:
| 指标 | 差值 | 95% Bootstrap 区间 |
|---|---|---|
| Accuracy | +0.0055 | [−0.0259, +0.0339] |
| Macro-F1 | −0.0109 | [−0.0475, +0.0216] |
| MAE | +0.0137 | [−0.0065, +0.0353] |
| RMSE | +0.0083 | [−0.0150, +0.0327] |
| Pearson | −0.0159 | [−0.0323, +0.0013] |
五项指标的区间都包含零。MoFE 的 Accuracy 点估计略高;EarlyConcat 的 Macro-F1、MAE、RMSE 和 Pearson 点估计更好。当前是单种子结果,视频组 Bootstrap 反映样本组抽样不确定性,不反映跨随机种子波动。
20.3 验证集 42 个缺失情景
下表中的平均值是对 41 个非 clean 验证情景不加权求平均;worst 是其中 Macro-F1 最低的情景。它们是描述性汇总,不代替 AURC。
| 模型 | Clean Macro-F1 | 41 个缺失情景平均 Macro-F1 | 最差情景 Macro-F1 | 缺失情景平均 MAE |
|---|---|---|---|---|
| EarlyConcat + BiGRU | 0.5746 | 0.5655 | 0.5289(0.3/location_start_T) | 0.6371 |
| MoFE-7 + MLP Router | 0.5626 | 0.5513 | 0.5048(0.7/partial) | 0.6453 |
30% 模态缺失的 Macro-F1 / MAE:
| 条件 | EarlyConcat | MoFE-7 |
|---|---|---|
| Text | 0.5462 / 0.6386 | 0.5455 / 0.6477 |
| Audio + Vision | 0.5817 / 0.6326 | 0.5620 / 0.6350 |
| All-modal | 0.5693 / 0.6352 | 0.5617 / 0.6421 |
归一化 AURC-MAE 越低越好。差值为 MoFE-7 减 EarlyConcat,区间按验证 source-video ID 成对 Bootstrap:
| 缺失模式 | EarlyConcat | MoFE-7 | 差值及 95% 区间 |
|---|---|---|---|
| Single | 0.6379 | 0.6494 | +0.0115 [−0.0082, +0.0302] |
| Sync | 0.6387 | 0.6461 | +0.0074 [−0.0120, +0.0250] |
| Partial | 0.6420 | 0.6527 | +0.0107 [−0.0087, +0.0285] |
| Async | 0.6409 | 0.6527 | +0.0119 [−0.0062, +0.0289] |
四种模式下 EarlyConcat 的 AURC-MAE 点估计均较低,但区间均跨零。
20.4 结论与边界
这次重训的点估计整体偏向 EarlyConcat + BiGRU:测试集 Macro-F1 和回归指标更高,验证集缺失情景的平均 Macro-F1、平均 MAE 与四种 AURC-MAE 也更好;MoFE-7 仅在测试 Accuracy 上略高。由于 Bootstrap 区间均跨零,且本次只使用一个 seed,不能声称 EarlyConcat 已被统计上确认优于 MoFE。当前应将 EarlyConcat 视为本轮较强候选,MoFE-7 继续保留比较,不宣称其具有总体优势。
数学汇总文件中的 C5 测试结果为 Accuracy 0.6740、Macro-F1 0.5861、MAE 0.6980、RMSE 0.9674、Pearson 0.6300。C5 的概率输出头与损失函数不同,该结果只作背景参考,不是与本节两个模型的严格同结构消融比较。
20.5 可复现产物
运行入口:
uv run python -m q2.train_math_protocol \
--device auto \\
--output-dir outputs/followups/R04_math_protocol_retraining_replica
本次报告、检查点、scaler 和逐条件结果保存在独立目录:
- RESULTS.md:本次结果和解读;
- official_test_metrics_by_seed.csv:官方测试集指标;
- official_test_paired_bootstrap.csv:测试集配对 Bootstrap;
- controlled_metrics_by_scenario.csv:42 个验证情景的逐项结果;
- aurc_mae_by_mode_seed.csv 与 aurc_mae_paired_bootstrap.csv:AURC 与其区间;
- run_manifest.json:输入特征 hash、数据划分、训练配置、设备和评估规程。
二十一、目前我们对整个方法的最终理解
我们的模型设计经历了一个很重要的变化。
最开始的问题是:
“怎么把三个模态融合起来?”
EarlyConcat 的答案是:
[ \boxed{ \text{直接融合,然后统一学习。} } ]
进一步我们发现,更合理的问题其实是:
“在不同样本、不同位置、不同模态缺失状态下,究竟应该使用哪一种模态组合?”
于是 MoFE 的答案变成:
[ \boxed{ \text{不是寻找唯一最优的融合方式, 而是让模型根据当前条件动态选择融合方式。} } ]
因此我们最终的核心思想可以概括为:
保留不同模态自身的信息结构,不预设某个模态永远最重要;将所有可能的非空模态子集定义为轻量融合专家,再通过可用性感知的 MLP Router 在局部位置动态分配专家权重,最后由共享 BiGRU 统一建模序列上下文。
最终流程:
Text
│
▼
Private Projection
│
├──────────────┐
│ │
Audio ──> Private Projection │
│ │
├──────────┐ │
│ │ │
Vision -> Private Projection │ │
│ │ │
▼ ▼ ▼
┌─────────────────────────────┐
│ 7 Fusion Experts │
│ │
│ T A V TA TV AV │
│ TAV │
└──────────────┬──────────────┘
│
▼
MLP Router
│
Availability Mask
│
▼
Expert Weights α
│
▼
Weighted Expert Mixture
│
▼
Shared BiGRU
│
▼
Sequence Aggregation
│
┌────────┴────────┐
▼ ▼
Polarity Head Intensity Head
│ │
▼ ▼
情感极性分类 情感强度回归
一句话总结:
[ \boxed{ \text{EarlyConcat 是“全部给模型看”, MoFE 是“让模型决定当前应该怎么看”。} } ]