1450 lines
34 KiB
Markdown
1450 lines
34 KiB
Markdown
# Q2 多模态情感预测:当前两个核心方案
|
||
|
||
我们目前保留两个主要模型:
|
||
|
||
1. **方案一:Mask-aware EarlyConcat + BiGRU**
|
||
- 结构简单;
|
||
- 参数少;
|
||
- 是我们的强基线模型。
|
||
|
||
2. **方案二: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
|
||
Text ── T_t
|
||
Audio ── A_t
|
||
Vision ── V_t
|
||
```
|
||
|
||
现在把三个投影后的模态表示和 mask 放到同一个向量:
|
||
|
||
```text
|
||
[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 缺失了:
|
||
|
||
```text
|
||
t-2 t-1 t t+1 t+2
|
||
Audio ✓ × ✓ ✓
|
||
Text ✓ ✓ ✓ ✓
|
||
Vision ✓ ✓ ✓ ✓
|
||
```
|
||
|
||
模型仍然可以利用:
|
||
|
||
1. 当前位置的 Text;
|
||
2. 当前位置的 Vision;
|
||
3. 前后位置的上下文;
|
||
4. 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 个。
|
||
|
||
所以结构是:
|
||
|
||
```text
|
||
T ─┐
|
||
A ─┼─> 7 个轻量 Fusion Experts
|
||
V ─┘
|
||
│
|
||
▼
|
||
Weighted Sum
|
||
│
|
||
▼
|
||
一个 Shared BiGRU
|
||
```
|
||
|
||
而不是:
|
||
|
||
```text
|
||
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 主要使用:
|
||
|
||
1. 三个模态的 observation masks;
|
||
2. 三个 private projection 的 log-RMS 幅值;
|
||
3. 三个模态各自的局部 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 类似:
|
||
|
||
```text
|
||
Full Expert
|
||
Text-dominant Expert
|
||
AV Expert
|
||
```
|
||
|
||
问题在于:
|
||
|
||
> Expert 到底应该擅长什么,很大程度上需要模型自己学。
|
||
|
||
在只有几千条训练数据的情况下:
|
||
|
||
\[
|
||
\text{既要学 Expert specialization}
|
||
+
|
||
\text{又要学 Router}
|
||
\]
|
||
|
||
比较困难。
|
||
|
||
而现在:
|
||
|
||
\[
|
||
T,A,V,TA,TV,AV,TAV
|
||
\]
|
||
|
||
七个 Expert 的分工天然存在。
|
||
|
||
例如:
|
||
|
||
```text
|
||
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 重要
|
||
Text + Audio 有帮助
|
||
Text + Vision 有帮助
|
||
TAV 少量补充
|
||
```
|
||
|
||
于是:
|
||
|
||
\[
|
||
u_t
|
||
=
|
||
0.45E_T
|
||
+
|
||
0.25E_{TA}
|
||
+
|
||
0.20E_{TV}
|
||
+
|
||
0.10E_{TAV}.
|
||
\]
|
||
|
||
如果当前位置 Text 缺失:
|
||
|
||
```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 decay `1e-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 缺失模态类型、缺失率与消融分析
|
||
|
||
题目要求分析局部缺失的模态类型、位置和持续长度。本节在官方 aligned 验证集上对已选定的两个检查点做受控推理消融,不重新拟合模型,也不读取官方测试集。
|
||
|
||
### 实验设计
|
||
|
||
- 验证集为 728 条样本、239 个 source-video 组;只使用 R03 训练集拟合的同一个 median/MAD scaler。
|
||
- 50 个位置是附件提供的有序 wordpiece positions,不是 50 个等长物理时间段。因此下文的 start/middle/end 与缺失比例都指这条 50-position 序列中的位置,不换算成视频秒数。
|
||
- 构造 7 种被遮蔽模态集合:T、A、V、TA、TV、AV、TAV;每种分别设 10%、30%、50%、70% 缺失率,共 28 个条件。
|
||
- 每个被选模态遮蔽一个居中的连续块,其他模态保持原观测状态。比例按该模态原本有效的位置数计算,至少保留 20% 原有观测。实际平均遮蔽率约为请求值:10% 条件实测 10.0%,30% 为 29.8%,50% 为 49.7%,70% 为 69.5%。两个模型使用完全相同的样本级掩码。
|
||
- 下表先对同一缺失率下的 7 种模态集合不加权平均。干净验证集参考值为 EarlyConcat:Accuracy 0.6154、Macro-F1 0.5746、MAE 0.6343、Pearson 0.6095;MoFE:0.6058、0.5626、0.6368、0.6043。
|
||
|
||
### 缺失率总体趋势
|
||
|
||
| 缺失率 | Early Acc | Early Macro-F1 | Early MAE | Early Pearson | MoFE Acc | MoFE Macro-F1 | MoFE MAE | MoFE Pearson |
|
||
|---:|---:|---:|---:|---:|---:|---:|---:|---:|
|
||
| 10% | 0.6142 | **0.5736** | **0.6336** | **0.6084** | 0.6032 | 0.5641 | 0.6366 | 0.6042 |
|
||
| 30% | 0.6126 | **0.5725** | **0.6337** | **0.6024** | 0.6054 | 0.5627 | 0.6384 | 0.6009 |
|
||
| 50% | 0.6085 | **0.5665** | **0.6416** | 0.5865 | 0.6068 | 0.5390 | 0.6452 | **0.5901** |
|
||
| 70% | 0.5899 | **0.5470** | **0.6605** | 0.5442 | **0.5907** | 0.5147 | 0.6679 | 0.5558 |
|
||
|
||
随着遮蔽率从 10% 升到 70%,两模型的平均 Macro-F1 与 Pearson 都下降,MAE 上升。70% 时,EarlyConcat 的平均 Macro-F1 比 clean 低 0.0277、MAE 高 0.0257;MoFE 的 Macro-F1 低 0.0479、MAE 高 0.0310。总体退化在高缺失率更明显,且本轮点估计下 EarlyConcat 对缺失率增加更稳。
|
||
|
||
### 哪种模态缺失更有影响?
|
||
|
||
下表是相对同一模型 clean 验证结果的变化:
|
||
|
||
- \(\Delta F1=F1_{missing}-F1_{clean}\),负值表示 Macro-F1 下降;
|
||
- \(\Delta MAE=MAE_{missing}-MAE_{clean}\),正值表示回归误差上升。
|
||
|
||
| 被遮蔽模态 | Early ΔF1(30% / 70%) | Early ΔMAE(30% / 70%) | MoFE ΔF1(30% / 70%) | MoFE ΔMAE(30% / 70%) |
|
||
|---|---:|---:|---:|---:|
|
||
| T | −0.021 / −0.080 | +0.003 / +0.060 | −0.037 / −0.128 | +0.019 / +0.103 |
|
||
| A | +0.015 / +0.027 | −0.002 / −0.003 | −0.012 / −0.006 | +0.001 / +0.006 |
|
||
| V | +0.001 / +0.002 | −0.003 / −0.002 | 0.000 / +0.011 | −0.005 / −0.010 |
|
||
| TA | −0.007 / −0.062 | −0.003 / +0.053 | −0.041 / −0.120 | +0.012 / +0.040 |
|
||
| TV | −0.014 / −0.089 | +0.001 / +0.073 | −0.034 / −0.121 | +0.008 / +0.075 |
|
||
| AV | +0.009 / +0.010 | −0.003 / −0.003 | +0.009 / +0.023 | −0.006 / −0.006 |
|
||
| TAV | +0.001 / −0.002 | 0.000 / +0.001 | +0.001 / +0.006 | +0.004 / +0.009 |
|
||
|
||
文本局部缺失的影响最大,尤其对 MoFE:只遮蔽 70% 的 T 时,Macro-F1 下降 0.128、MAE 上升 0.103;EarlyConcat 分别下降 0.080、上升 0.060。遮蔽 T+A 或 T+V 后也出现明显下降,说明这一训练结果对文本位置包含的信息较敏感。单独遮蔽 A 或 V 的影响较小;EarlyConcat 在 A-only 条件中的 F1 点估计甚至上升。该现象只能说明当前验证集上的局部遮蔽结果,不能据此断言 A/V 对任务无用。TAV 的变化也不呈简单单调关系,反映不同模态组合与上下文仍会影响结果。
|
||
|
||

|
||
|
||

|
||
|
||
### 位置、连续块长度与跨模态错位
|
||
|
||
30% 单模态遮蔽的位置控制如下。这里 start/middle/end 是 wordpiece 序列位置:
|
||
|
||
| 模型 | T:start / middle / end | A:start / middle / end | V:start / middle / end |
|
||
|---|---:|---:|---:|
|
||
| EarlyConcat + BiGRU | 0.529 / 0.554 / 0.556 | 0.581 / 0.590 / 0.591 | 0.578 / 0.576 / 0.571 |
|
||
| MoFE-7 + MLP Router | 0.507 / 0.526 / 0.524 | 0.569 / 0.551 / 0.555 | 0.571 / 0.563 / 0.559 |
|
||
|
||
T 的序列开头缺失是两个模型最差的位置;T 在中间或末尾缺失时 Macro-F1 较高。A/V 的位置效应较小且模型间方向不完全一致。
|
||
|
||
将 30% 缺失做成一个长块或多个短块,没有出现跨模态一致的赢家:
|
||
|
||
| 模型与模态 | 一个长块 Macro-F1 | 多个短块 Macro-F1 |
|
||
|---|---:|---:|
|
||
| Early T / A / V | 0.542 / 0.584 / 0.571 | 0.544 / 0.578 / 0.572 |
|
||
| MoFE T / A / V | 0.518 / 0.557 / 0.573 | 0.522 / 0.564 / 0.566 |
|
||
|
||
T/A/V 同时缺失 30% 时,EarlyConcat 对 sync、partial、async 的 Macro-F1 分别为 0.570、0.568、0.567,差异较小;MoFE 分别为 0.568、0.542、0.567,partial 条件低约 0.025。当前结果提示 MoFE 对多模态缺失区间错位更敏感;单种子验证结果尚不足以确认这种差异能否稳定复现。
|
||
|
||

|
||
|
||
### 消融结论
|
||
|
||
1. **输入模态局部遮蔽消融:**固定 R03 检查点,逐一遮蔽 T/A/V 及其组合。七种集合、四档缺失率均纳入逐条件 CSV;总体上文本缺失最伤,视觉或音频单独缺失影响较弱。
|
||
2. **融合架构消融:**在相同特征、训练掩码和 28 个条件上比较 EarlyConcat 与 MoFE。28 条件 Macro-F1 平均值为 0.5648 vs 0.5384,MAE 为 0.6421 vs 0.6485;参数量分别是 253,124 和 306,523。EarlyConcat 的点估计更好且参数更少,但只有一个 seed,不能将此差异表述为稳定或显著优势。
|
||
|
||
本节全部因素分析只在官方验证集和单个 seed 上进行,没有对 28 个单项条件逐一做显著性检验。结果适合描述趋势、定位敏感模态和选择后续实验,不应用来声称每个单项差异都具有统计显著性。
|
||
|
||
## 20.5 结论与边界
|
||
|
||
这次重训的点估计整体偏向 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.6 可复现产物
|
||
|
||
运行入口:
|
||
|
||
```bash
|
||
uv run python -m q2.train_math_protocol \
|
||
--device auto \
|
||
--output-dir outputs/followups/R04_math_protocol_retraining_replica
|
||
|
||
uv run python -m q2.analyze_aligned_missingness --device auto
|
||
```
|
||
|
||
本次报告、检查点、scaler 和逐条件结果保存在独立目录:
|
||
|
||
- [RESULTS.md](outputs/followups/R03_math_protocol_retraining/RESULTS.md):本次结果和解读;
|
||
- [official_test_metrics_by_seed.csv](outputs/followups/R03_math_protocol_retraining/official_test_metrics_by_seed.csv):官方测试集指标;
|
||
- [official_test_paired_bootstrap.csv](outputs/followups/R03_math_protocol_retraining/official_test_paired_bootstrap.csv):测试集配对 Bootstrap;
|
||
- [controlled_metrics_by_scenario.csv](outputs/followups/R03_math_protocol_retraining/controlled_metrics_by_scenario.csv):42 个验证情景的逐项结果;
|
||
- [aurc_mae_by_mode_seed.csv](outputs/followups/R03_math_protocol_retraining/aurc_mae_by_mode_seed.csv) 与 [aurc_mae_paired_bootstrap.csv](outputs/followups/R03_math_protocol_retraining/aurc_mae_paired_bootstrap.csv):AURC 与其区间;
|
||
- [run_manifest.json](outputs/followups/R03_math_protocol_retraining/run_manifest.json):输入特征 hash、数据划分、训练配置、设备和评估规程。
|
||
- [aligned_missingness_analysis/modality_rate_metrics.csv](outputs/followups/R03_math_protocol_retraining/aligned_missingness_analysis/modality_rate_metrics.csv):7 种缺失模态组合 × 4 档缺失率的全部指标;
|
||
- [aligned_missingness_analysis/modality_rate_summary.csv](outputs/followups/R03_math_protocol_retraining/aligned_missingness_analysis/modality_rate_summary.csv):按缺失率跨 7 种模态集合的平均结果;
|
||
- [aligned_missingness_analysis/architecture_ablation_deltas.csv](outputs/followups/R03_math_protocol_retraining/aligned_missingness_analysis/architecture_ablation_deltas.csv):逐条件的 MoFE − EarlyConcat 差值;
|
||
- [aligned_missingness_analysis/location_span_synchrony_metrics.csv](outputs/followups/R03_math_protocol_retraining/aligned_missingness_analysis/location_span_synchrony_metrics.csv):位置、长短块和同步方式消融明细;
|
||
- [analyze_aligned_missingness.py](q2/analyze_aligned_missingness.py):固定 R03 检查点,复现验证集因素分析的入口。
|
||
|
||
---
|
||
|
||
# 二十一、目前我们对整个方法的最终理解
|
||
|
||
我们的模型设计经历了一个很重要的变化。
|
||
|
||
最开始的问题是:
|
||
|
||
> “怎么把三个模态融合起来?”
|
||
|
||
EarlyConcat 的答案是:
|
||
|
||
\[
|
||
\boxed{
|
||
\text{直接融合,然后统一学习。}
|
||
}
|
||
\]
|
||
|
||
进一步我们发现,更合理的问题其实是:
|
||
|
||
> **“在不同样本、不同位置、不同模态缺失状态下,究竟应该使用哪一种模态组合?”**
|
||
|
||
于是 MoFE 的答案变成:
|
||
|
||
\[
|
||
\boxed{
|
||
\text{不是寻找唯一最优的融合方式,
|
||
而是让模型根据当前条件动态选择融合方式。}
|
||
}
|
||
\]
|
||
|
||
因此我们最终的核心思想可以概括为:
|
||
|
||
> **保留不同模态自身的信息结构,不预设某个模态永远最重要;将所有可能的非空模态子集定义为轻量融合专家,再通过可用性感知的 MLP Router 在局部位置动态分配专家权重,最后由共享 BiGRU 统一建模序列上下文。**
|
||
|
||
最终流程:
|
||
|
||
```text
|
||
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 是“让模型决定当前应该怎么看”。}
|
||
}
|
||
\]
|