# 多模态情感模型优化研究执行方案 > 文档作用:本文是本课题唯一主工作文档,记录“当前有效方案”。它应当能直接指导后续实验执行、代码开发、基线选择、结果验收与论文写作。历史判断、废弃方案和变更原因只写入变更日志,不在本文反复展开。 > > 当前版本:v3.1 > 更新日期:2026-04-24 > 当前主线:D2 RL 对话图结构优化为主要贡献;D1 RL 自适应模态融合作为辅助实验、鲁棒性分析和负结果讨论保留。 > 当前限制:本轮只修文档和代码口径,不启动 GPU 训练。 ## 1. 研究目标 本课题研究多模态情感识别中的动态决策问题。核心问题不是简单把文本、音频、视觉拼接起来,而是在不同样本、不同噪声、不同对话上下文下,让模型学会“当前应该信任哪种模态、应该参考哪些历史发言”。 最终论文建议围绕一个统一叙事组织: > Reinforcement Learning for Adaptive Multimodal Emotion Recognition: From Modality Fusion to Conversation Graph Topology 中文表述: > 面向多模态情感识别的强化学习动态决策框架:从模态融合权重到对话图拓扑优化。 两个技术层次: 1. D1 话语级动态融合:RL agent 根据每路模态的可靠性动态分配 text/audio/vision 权重。 2. D2 对话级动态图结构:RL agent 根据当前发言状态动态选择上下文窗口、历史发言边权重和说话人关系。 当前优先级: | 方向 | 定位 | 当前状态 | 优先级 | |---|---|---|---| | D1 RL 自适应模态融合 | 辅助实验、鲁棒性分析、负结果讨论 | bug 已修,待 GPU 空闲后重跑 | 中 | | D2 RL 对话图结构优化 | 主贡献、主实验、论文核心 | 等待 COGMEN 依赖与公平基线 | 高 | ## 2. 当前资源与目录 服务器: | 项目 | 内容 | |---|---| | SSH | `ssh -p 20083 root@10.82.3.180` | | `$ZSY` | `/root/siton-data-2849d4ce327c4ccfb233ce33868fe7fe/zsy` | | 项目目录 | `$ZSY/multimodal_affect` | | 环境 | `$ZSY/envs/multimodal_affect` | | 数据盘 | 1TB,当前约 788GB 可用 | | GPU | 4 x RTX 5090,当前暂不占用 | 本地目录: | 项目 | 路径 | |---|---| | 本地研究目录 | `D:\Myresearch\多模态情感模型优化` | | 主方案 | `2026-04-22-研究执行方案.md` | | 变更日志 | `2026-04-24-变更日志.md` | 服务器数据状态: | 数据 | 当前状态 | 用途 | 注意事项 | |---|---|---|---| | IEMOCAP 预提取特征 | `data/iemocap`,GloVe 300 + COVAREP 74 + FACET 35 | D1 修复后重跑 | 扁平特征,不适合 D2 图结构 | | IEMOCAP 原始数据 | `data/raw/IEMOCAP_full_release`,已解压 Session1-5 | D2 重建对话级样本、必要时提取新特征 | 不覆盖现有 `data/iemocap` | | COGMEN IEMOCAP 4 类数据 | `baselines/COGMEN/data/iemocap_4` | D2 公平基线首选入口 | 需要 PyG 等依赖 | | MELD CSV | `data/meld`,当前主要是文本/标签 | 后续 D2 泛化实验 | 已解压 MELD.Raw,可补音频/视频 | | MELD.Raw | `data/raw/MELD/MELD.Raw`,已解压 | 后续多模态特征 | 暂不运行耗时提取 | | MOSI | `data/mosi` | D1 或补充实验 | audio 中有少量 `-inf`,使用前必须清洗 | | IEMOCAP noisy | `data/iemocap_noisy` | D1 鲁棒性实验 | 已重新生成三模态噪声文件 | ## 3. 当前代码状态 已修复内容: | 模块 | 文件 | 修复内容 | 状态 | |---|---|---|---| | 噪声生成 | `scripts/preprocess/generate_noise.py` | 统一输出 `*_vision.npy`,兼容 `visual` 配置别名 | 已同步本地与服务器 | | 数据加载 | `src/data/dataset.py` | noisy variant 加载 text/audio/vision,缺失文件回退 clean 同索引模态 | 已同步服务器 | | D1 训练 | `scripts/train_d1_fixed.py`、服务器 `scripts/train/train_d1.py` | 噪声 batch 使用同一索引加载 text/audio/vision/labels | 已同步 | | D1 评测 | `scripts/run_eval_ablation.py`、服务器 `scripts/eval/eval_d1.py` | 噪声评测替换三模态,修复最后 batch 索引 | 已同步 | | 噪声数据 | 服务器 `data/iemocap_noisy` | 8 个变体均含 train/val/test 的 text/audio/vision/labels | 已验证 | 已完成检查: - 本地相关 Python 文件 `py_compile` 通过。 - 服务器相关 Python 文件 `py_compile` 通过。 - 服务器噪声数据形状检查通过。 - 未启动任何训练。 旧结果使用规则: | 结果 | 是否可用于论文正式表格 | 用途 | |---|---|---| | 修复前 D1 Stage A/B 数值 | 否 | 仅用于说明 bug 发现前的诊断过程 | | 修复前 D1 噪声鲁棒性数值 | 否 | 视觉噪声相关结果无效 | | 修复后重新训练结果 | 待产生 | 可作为正式 D1 结果 | | COGMEN 论文引用数值 | 不能作为主表唯一基线 | 可放 Related Work 或参考表 | | 本地复现 COGMEN-Ours | 待产生 | D2 主基线 | ## 4. 总体技术路线 整体路线分为两个层次: ```text 输入:text / audio / vision 多模态情感数据 D1:话语级动态融合 预提取特征 -> 模态 projector -> 置信度/不确定性状态 -> RL fusion agent -> 分类 目标:验证 RL 是否能在噪声/缺失模态下优于固定融合 D2:对话级动态图结构 对话序列 -> COGMEN 基线图 -> RL window/topology agent -> 动态 GNN -> ERC 分类 目标:学习“该看哪些历史发言”和“边权重应该多强” ``` 研究策略: 1. 先保证 D1 训练和评测口径正确,重跑后决定其论文位置。 2. D2 必须先跑通 COGMEN-Ours,建立公平基线。 3. D2 先做小动作空间的 `RL-Window`,再做完整 `RL-Topo-Soft`。 4. 最终论文以 D2 主结果为核心,D1 作为辅助实验或 analysis 章节。 ## 5. D1 方案:RL 自适应模态融合 ### 5.1 任务定义 输入为单条 utterance 的三模态特征: | 模态 | 当前特征 | 维度 | |---|---|---| | Text | GloVe 平均/预提取文本特征 | 300 | | Audio | COVAREP | 74 | | Vision | FACET | 35 | 输出为 4 类 IEMOCAP 情感分类。 当前 D1 不声称使用 BERT/Wav2Vec2/ResNet。若未来要写“大模型特征提取”,必须另做特征提取与重跑。 ### 5.2 当前模型结构 ```text text/audio/vision feature -> modality projector: low-dim feature -> 1024-d shared space -> confidence estimator: 每个模态输出一个置信度 -> RL fusion agent: 输出三路融合权重 -> weighted fusion -> MLP classifier ``` Stage A:监督预训练。 - 使用均匀融合训练 projector、confidence estimator、classifier。 - 训练时注入噪声。 - 置信度目标按实际噪声模态设置:被污染模态为 0.1,干净模态为 0.9。 Stage B:PPO 融合权重学习。 - encoder 冻结。 - agent 根据状态输出三路权重。 - classifier 可轻量刷新。 - 该版本作为 `RL-Decoupled`,用于验证两阶段 RL 的局限。 ### 5.3 D1 状态、动作、奖励 当前状态: ```text s = [conf_text, conf_audio, conf_vision, noise_est] ``` 动作: ```text a = [w_text, w_audio, w_vision], sum(a)=1 ``` 当前奖励: ```text R = alpha * (-CE) + beta * consistency(weights, confidence) - gamma * instability ``` 后续增强状态候选: | 状态项 | 说明 | |---|---| | 三路 confidence | 现有 | | 三路单模态预测熵 | 衡量每个模态自身不确定性 | | 三对跨模态 cosine similarity | 衡量模态一致性 | | 三路 feature norm / variance | 检测异常特征 | | 分模态 noise estimate | 替代单一 `audio.std` | 目标是从 4 维状态扩展到 12-16 维状态,前提是 `RL-Decoupled` 重跑后仍有继续价值。 ### 5.4 D1 噪声实验 当前 IEMOCAP 噪声变体: | 变体 | 噪声设计 | 应影响模态 | |---|---|---| | `gaussian_light` | 轻度高斯噪声 | text/audio/vision | | `gaussian_heavy` | 重度高斯噪声 | text/audio/vision | | `missing_audio` | 音频全置零 | audio | | `missing_visual` | 视觉全置零 | vision | | `text_word_drop_30` | 文本 30% dropout 或特征置零 | text | | `audio_masking_50` | 音频 50% 维度遮蔽 | audio | | `realistic_mixed` | 文本轻度损坏 + 音频噪声 + 视觉遮挡 | text/audio/vision | | `audio_time_mask` | 音频样本级时间遮蔽 | audio | 验收要求: - 每个变体必须有 `train/val/test` 的 `text/audio/vision/labels`。 - 评测时 noisy 文件存在就替换对应模态;不存在才回退 clean 同索引模态。 - 不允许 batch 内跨样本替换模态。 ### 5.5 D1 对比基线 D1 不以 COGMEN 为主基线。建议基线: | 类别 | 方法 | |---|---| | 基础融合 | concat + MLP、Fixed-Equal、Fixed-Learned-Weight | | 动态融合 | Attention Fusion、Gated Fusion | | 多模态情感经典方法 | TFN、LMF、MFN、MulT、MISA、Self-MM | | 鲁棒/缺失模态 | GCNet、MMIN、M2R2、GSDNet 或同类方法 | | 本方法 | RL-Decoupled、RL-Joint、RL-Joint-16dim | 最小可执行矩阵: | 变体 | 必做 | 说明 | |---|---|---| | Stage-A-Only | 是 | 修复后监督基线 | | Fixed-Equal | 是 | 固定融合 | | Gated-Fusion | 是 | 非 RL 动态融合 | | RL-Decoupled | 是 | 当前两阶段 RL | | RL-Joint | 视结果 | 如果 decoupled 仍弱,做联合训练 | | RL-Joint-16dim | 视结果 | 状态增强版本 | ### 5.6 D1 后续执行顺序 触发条件:GPU 空闲。 1. 确认 `data/iemocap_noisy` 三模态文件完整。 2. 重跑 Stage A。 3. 重跑 Stage B `RL-Decoupled`。 4. 重新运行修复后的 `eval_d1.py`。 5. 汇总 clean 与 8 种噪声下的 WF1/Acc。 6. 判断是否进入 `RL-Joint`。 D1 成功标准: - clean test 不显著低于 Stage-A-Only。 - 至少在多数噪声场景中优于 Fixed-Equal 或 Gated-Fusion。 - 若无法达成,D1 写为负结果与设计反思,不作为主贡献。 ## 6. D2 方案:RL 对话图结构优化 ### 6.1 任务定义 D2 是论文主线。目标是在多模态对话情感识别中,让 RL agent 动态决定当前发言应参考哪些历史发言。 输入为一个 dialogue: ```text u1, u2, ..., ut 每个 ui 有 text/audio/vision feature、speaker id、label ``` 输出为每个 utterance 的情感类别。 核心问题: ```text 固定图结构:每个当前发言使用固定窗口或固定全局连接 改进目标:根据当前语义、说话人、历史情绪变化,动态选择上下文边 ``` ### 6.2 D2 与 COGMEN 的关系 COGMEN 是 D2 的直接前身,不跳过。 当前策略: 1. 先跑官方 COGMEN `iemocap_4`,得到 `COGMEN-Ours`。 2. 在同一数据、同一 split、同一指标下实现固定窗口变体。 3. 再加入 RL window selector。 4. 最后实现 soft topology agent。 不能只引用 COGMEN 论文表格,因为: - 论文数值和当前本地环境、特征、依赖版本可能不同。 - D2 的改进必须建立在可复现同口径基线上。 - 后续固定窗口和 RL 图结构需要直接改 COGMEN 图构建逻辑。 ### 6.3 D2 环境依赖 当前阻塞: | 依赖 | 状态 | |---|---| | `torch_geometric` | 未安装 | | `torch_scatter` | 未安装 | | `torch_sparse` | 未安装 | | `sentence_transformers` | 未安装 | | `comet_ml` | 未安装 | 解决方案: 1. 优先离线安装与 `torch 2.7.1+cu128` 兼容的 PyG wheels。 2. 如果 PyG wheel 不好配,先用 COGMEN 官方预处理数据做评测脚本适配,减少训练依赖。 3. `comet_ml` 只作为日志依赖,必要时 stub 或禁用。 4. `sentence_transformers` 若只评测官方 pkl,可避免重新提取 SBERT 特征;若训练流程强依赖则离线安装。 ### 6.4 D2 阶段一:COGMEN-Ours 目标:跑通本地 COGMEN 4 类 IEMOCAP。 任务: 1. 阅读并定位 COGMEN 图构建逻辑: - `cogmen/model/COGMEN.py` - `cogmen/model/GNN.py` - `cogmen/Dataset.py` - `preprocess.py` 2. 确认官方 `data_iemocap_4.pkl` 与 `IEMOCAP_features_4.pkl` 的结构。 3. 安装或绕过缺失依赖。 4. 跑原始评测,记录 WF1/Acc。 5. 保存基线结果到 `outputs/results/d2_cogmen_ours.json`。 验收: - 可以在服务器上复现实验。 - 有固定 random seed。 - 有完整命令、日志和结果文件。 ### 6.5 D2 阶段二:固定窗口基线 目的:确认 COGMEN 固定图结构中上下文窗口的影响。 实验: | 变体 | 描述 | |---|---| | `COGMEN-Ours` | 原始 COGMEN | | `FixedWin-3` | 只连接历史 3 句 | | `FixedWin-5` | 只连接历史 5 句 | | `FixedWin-7` | 只连接历史 7 句 | | `FixedWin-All` | 全历史连接 | 输出: - 每个窗口的 WF1/Acc。 - 不同对话长度下的性能分组。 - 后续 RL action space 的依据。 ### 6.6 D2 阶段三:RL-Window 这是最小可行创新版本。 状态设计: ```text s_t = concat( h_t, 当前发言表示 mean(h_1...h_{t-1}), 历史均值 speaker_embedding, 说话人嵌入 delta(h_t, h_{t-1}) 情绪变化估计 ) ``` 动作空间: ```text a_t in {3, 5, 7, all} ``` 奖励: ```text R = task_reward + lambda_sparse * sparsity_bonus + lambda_stable * stability_bonus ``` 可实现版本: | 奖励项 | 实现 | |---|---| | task_reward | batch-level `-CE` 或 validation WF1 改善 | | sparsity_bonus | 窗口越短越稀疏,但不能牺牲任务性能 | | stability_bonus | 相邻 utterance 的窗口选择不要剧烈抖动 | 验收: - `RL-Window` 超过 `COGMEN-Ours` 或超过最优固定窗口。 - 至少有 3 个对话案例显示 RL 选择了不同窗口。 - 若没有提升,分析是否状态信息不足或奖励过稀疏。 ### 6.7 D2 阶段四:RL-Topo-Soft 完整版动态图结构。 动作: ```text 对当前 utterance u_t,输出每条历史边 e_{i,t} 的连续权重 w_{i,t} in [0,1] ``` 为什么用 soft topology: - 硬 0/1 边不可导,PPO 信号稀疏。 - soft edge 可以让分类 loss 通过消息传递影响边权。 - 可解释性仍保留:边权可视化即可。 模型候选: ```text history/current sequence -> transformer/state encoder -> edge scorer -> weighted graph message passing -> classifier ``` 奖励: ```text R = alpha * task_reward + beta * sparsity + gamma * emotion_coherence - eta * graph_instability ``` 解释性输出: - 每个 utterance 选择的 top-k 历史边。 - 同说话人/不同说话人边权统计。 - 情绪转折点前后的图结构变化。 - 噪声 utterance 是否被降低边权。 ### 6.8 D2 主基线矩阵 论文主表建议至少覆盖: | 类别 | 方法 | 必要性 | |---|---|---| | 经典 ERC | DialogueRNN | 基础对话上下文基线 | | 图 ERC | DialogueGCN | 图结构基础基线 | | 多模态图 | MMGCN | 多模态 ERC 图基线 | | 直接前身 | COGMEN | 必做 | | 近年图方法 | M3Net | 建议 | | 近年图方法 | AdaGIN | 建议 | | 近年图方法 | DER-GCN | 建议 | | 直接竞争 | DGODE | 必做 | | 补充竞争 | GASMER | 可做 | | 本文 | FixedWin / RL-Window / RL-Topo-Soft | 主结果 | R1-Omni、AffectGPT-R1、EMO-RL、AffectAgent 放 Related Work,不强行放主表,除非任务设置、数据集、指标完全对齐。 ## 7. 数据集与指标 ### 7.1 数据集 | 数据集 | 用途 | 当前策略 | |---|---|---| | IEMOCAP 4-class | 主数据集 | D1 用扁平特征;D2 用 COGMEN 对话级数据 | | MELD | 泛化验证 | 先补齐音频/视频或使用已有对话结构 | | CMU-MOSI | D1 可选补充 | 使用前清洗 audio 的 `-inf` | ### 7.2 指标 主指标: - Weighted F1 - Accuracy 辅助指标: - Macro F1 - per-class precision/recall/F1 - 噪声场景下相对下降率 - 多 seed 均值与标准差 - paired t-test 或 bootstrap confidence interval 实验规范: - 主结果至少 3 个 seed。 - IEMOCAP 必须明确 4-class 或 6-class。 - 所有表格必须标明特征来源和 split。 - COGMEN 论文引用数值和本地复现数值分开写。 ## 8. 当前时间线 ### 已完成 | 阶段 | 内容 | 状态 | |---|---|---| | P0 | 环境搭建、数据上传、初步特征整理 | 完成 | | P0-data | IEMOCAP/MELD 原始数据解压 | 完成 | | P1-fix | D1 噪声生成、训练采样、评测 bug 修复 | 完成 | | P1-check | 本地/服务器语法检查、噪声数据形状检查 | 完成 | ### 下一阶段 | 阶段 | 内容 | 触发条件 | 预计耗时 | |---|---|---|---| | P1-rerun | D1 修复后 Stage A/B 重跑 | GPU 空闲 | 0.5-1 天 | | P2-env | 安装/适配 COGMEN 依赖 | CPU/环境窗口 | 0.5-1 天 | | P2-base | 跑 COGMEN-Ours | 依赖就绪 | 0.5 天 | | P2-win | 固定窗口与 RL-Window | COGMEN-Ours 完成 | 2-4 天 | | P2-topo | RL-Topo-Soft | RL-Window 有效 | 1-3 周 | | P3 | 多 seed、消融、可视化、写作 | 主结果稳定 | 3-4 周 | ## 9. 后续命令草案 仅在 GPU 空闲后执行。 D1 重跑: ```bash cd $ZSY/multimodal_affect export ZSY=/root/siton-data-2849d4ce327c4ccfb233ce33868fe7fe/zsy export PYTHONPATH=$ZSY/multimodal_affect export WANDB_MODE=offline $ZSY/envs/multimodal_affect/bin/python scripts/preprocess/generate_noise.py \ --config configs/noise_configs.yaml \ --data_dir data/iemocap \ --out_dir data/iemocap_noisy $ZSY/envs/multimodal_affect/bin/python scripts/train/train_d1.py \ --stage supervised \ --dataset IEMOCAP \ --config configs/d1/stage_a.yaml \ --output outputs/checkpoints/d1_stageA_fixed \ --gpus 0 $ZSY/envs/multimodal_affect/bin/python scripts/train/train_d1.py \ --stage rl \ --dataset IEMOCAP \ --checkpoint outputs/checkpoints/d1_stageA_fixed/best.ckpt \ --config configs/d1/stage_b.yaml \ --output outputs/checkpoints/d1_stageB_fixed \ --gpus 0 ``` D2 COGMEN-Ours: ```bash cd $ZSY/multimodal_affect/baselines/COGMEN # 依赖就绪后: $ZSY/envs/multimodal_affect/bin/python eval.py \ --dataset iemocap_4 \ --modalities atv ``` 注意:以上命令是草案,执行前先检查 GPU 占用和依赖状态。 ## 10. 风险与应对 | 风险 | 概率 | 影响 | 应对 | |---|---|---|---| | D1 修复后仍无收益 | 中 | D1 不能作为贡献 | 写作中定位为负结果和设计反思 | | COGMEN 依赖安装困难 | 中 | D2 延迟 | 离线 wheels、禁用 comet、优先评测路径 | | RL-Window 不超过固定窗口 | 中 | 创新不足 | 调整状态与奖励;分析对话长度分组 | | RL-Topo-Soft 训练不稳定 | 中 | 主结果风险 | 从 RL-Window 热启动,先做 soft edge supervised pretrain | | MELD 多模态特征提取耗时 | 中 | 泛化实验延迟 | 先 IEMOCAP 完整,MELD 作为补充 | | 基线过多导致时间失控 | 高 | 写作延期 | 先确保 COGMEN、DGODE、DialogueGCN、MMGCN | ## 11. 论文结构草案 ```text 1. Introduction - 多模态情感识别中的动态选择问题 - 模态噪声与对话上下文冗余 - RL 作为动态决策机制 2. Related Work - Multimodal sentiment/emotion recognition - Emotion recognition in conversation - Graph-based ERC - RL for affective computing 3. Method - Overview - D1: RL adaptive fusion - D2: RL graph topology optimization - Training objective and reward design 4. Experiments - Datasets and metrics - Baselines - Main results on IEMOCAP - Generalization on MELD - Ablation study - Robustness under noise/missing modality - Visualization and case study 5. Analysis - Why two-stage D1 is limited - How RL graph policy changes with dialogue context - Error analysis by emotion class and speaker dynamics 6. Conclusion ``` ## 12. 当前执行原则 必须遵守: - 主方案只维护本文;变更原因只进日志。 - 旧 D1 结果不进入论文正式结果表。 - 不覆盖 `data/iemocap` 预提取特征。 - 不用扁平 `data/iemocap` 训练 D2 图模型。 - 不只拿 COGMEN 论文数值做主对比。 - GPU 忙时只做文档、代码、CPU 检查、依赖准备。 下一步最优先事项: 1. 等 GPU 空闲后重跑 D1 修复版,确认辅助实验结论。 2. 准备 COGMEN 依赖,跑通 `COGMEN-Ours`。 3. 实现 `FixedWin` 与 `RL-Window`,尽快拿到 D2 第一组可写结果。