Files
modeling_zhaocui/deep_learning/Q2/README.md
T

3.7 KiB
Raw Blame History

Q2:缺失模态下的多模态情感识别

本目录包含 Q2 的训练代码、环境配置和后续实验约定。当前只维护两种模型:

  1. EarlyConcat + BiGRU:将文本、音频、视觉特征和观测掩码拼接后,用双向 GRU 建模有序序列,作为简洁基线。
  2. MoFE-7 + MLP Router:根据每个位置可用的模态,在七种模态子集专家之间路由,再用共享 BiGRU 建模序列。

旧的模型比较报告、指标表和图表已清理。不要从此 README 推断模型优劣;后续结果应放进独立实验目录并在新报告中解释。

数据与时序表示

训练入口读取项目根目录下 E题数据/附件2-数据集特征文件/aligned_50.pkl 的官方训练集和验证集。每个样本包含 50 个有序位置,文本、音频、视觉维度分别为 768、74、35,并带有显式观测掩码。这里的 50 个位置是附件 2 提供的词片位置,不是 50 个等长物理时间箱。

Q1 的对齐方法为 Q2 提供了有序的跨模态输入组织方式;Q2 在此基础上处理连续块缺失,不重新提取或改写 Q1 特征。根目录 math/ 和 final/Q1/ 中的内容只作只读参考。

标准化参数只从训练集拟合。当前保留的两组模型权重及共享标准化参数位于:

outputs/mofe_7experts/
├── aligned_robust_stats.npz
└── models/
    ├── baselines/concat/seed_{42,3407,2026}/model_best.pt
    └── B5_mofe_mlp/seed_{42,3407,2026}/model_best.pt

环境

本项目使用 uv 管理 Python 环境。进入本目录后同步锁定依赖:

uv sync --locked

运行

先用单个种子执行快速检查。每轮运行使用新的目录,避免覆盖保留的参照权重:

uv run python -m q2.train_mofe \
  --phase smoke --seeds 42 \
  --output-dir outputs/followups/F00_smoke

完整训练和验证示例:

uv run python -m q2.train_mofe \
  --phase full --seeds 42 3407 2026 \
  --output-dir outputs/followups/F01_local_repair

完整运行会训练两种模型,并在 clean、Text、Audio、Vision、Audio+Vision、All-modal 条件下评估 10%、20%、30% 连续块缺失;结果、检查点和诊断图写入指定目录。默认输出目录是 outputs/mofe_7experts/,日常新实验应显式设置 --output-dir,避免覆盖保留的权重和标准化参数。

文件索引

  • q2/data.py:官方特征读取、观测掩码、训练集 robust scaling 和连续块缺失。
  • q2/models.py:EarlyConcat + BiGRU。
  • q2/mofe.py:MoFE-7 专家与 MLP 路由器。
  • q2/train_mofe.py:两种保留模型的训练、验证、统计和可视化入口。
  • q2/task_preference.py:复用现有 MoFE 权重,比较七个 forced expert 的分类/回归偏好。
  • ALGORITHM.md:两个保留模型的算法说明和最新验证集重评结果。
  • EXPERIMENT_PROTOCOL.md:后续实验的固定比较条件与记录要求。
  • outputs/followups/README.md:新实验目录的命名和存放规则。

Q3 暂不在本目录中开展;待 Q2 后续选型完成后再统一规划。

当前任务偏好诊断

在训练 dual-router 前,先用现有 MoFE-7 检查了七个 forced expert 在分类 Macro-F1 与回归 MAE/Pearson 上的偏好。三个 seed、15 种缺失条件的排名大体一致,没有看到稳定的分类—回归 expert 分工;因此当前不启动 dual-router,仍以 single-router MoFE-7 为活动参照。详见诊断报告及逐条件数据。

可用以下命令复现该诊断:

uv run python -m q2.task_preference \
  --seeds 42 3407 2026 \
  --output-dir outputs/followups/D0_task_preference