AffectGPT:数据过滤与预融合怎样训练情绪大模型
逐项拆解 MER-Caption、注意力融合、LoRA 与情绪轮评价
一句话总结
AffectGPT 同时改进训练描述、音视频预融合与统一评价;质量过滤的收益需要与模型结构收益分开解释。
三项贡献要拆开:数据、模型和评价
AffectGPT: A New Dataset, Model, and Benchmark for Emotion Understanding with Multimodal Large Language Models 发表于 ICML 2025。它不是只给语言模型换一个提示,而是同时构建情绪描述训练数据、设计进入语言模型前的音视频融合模块,并建立涵盖多种情绪任务的评价。理解这三个部分各自解决的问题,才能判断实验提升来自哪里。
沿着 EMER 与 OV-MER 的学习线,前两篇首先问怎样描述和评价复合情绪;本篇进一步问能否用自动生成的大规模情绪描述训练模型。高质量人工线索昂贵,直接扩大标注量很困难,因此作者先让已有音视频模型提供线索,再用语言模型整合,最后过滤明显不可靠的样本。这是把质量与规模同时纳入训练设计。
输入包含视频帧、音频和字幕,输出可以是情绪解释及情绪标签。标签不必局限于固定六类。模型内部需要把不同长度和维度的音视频表示转成语言模型可接受的连续向量,再让语言模型逐词生成答案。字幕仍以文字形式输入;所谓预融合主要描述音视频特征在进入语言模型之前相互作用。
原文 Figure 2 对应数据构建,Figure 3 对应模型,Figure 9 对应评价情绪轮。建议先分别画三张图,再把训练数据接到模型、预测接到评价器。不要把“数据更干净”“融合更有效”“评分更宽松”混成一个解释,因为只有控制另外两项,才能检验某一个设计是否有用。
MER-Caption 与过滤:为什么更多不一定更好
MER-Caption 包含十一万五千五百九十五个样本及二千九百三十二种情绪标签;筛选后的 MER-Caption+ 为三万一千三百二十七个样本及一千九百七十二种标签。这里的加号表示质量筛选后的版本,不是更大的数量。数据来自获准使用的 MER2024 无标注材料,不应把公开视频可观看理解为可以任意重新发布原始视频。
作者使用 SALMONN 获取声音线索、Chat-UniVi 获取画面线索,再通过 GPT-3.5 结合字幕整合。选择单模态模型时参考其线索质量,但单个模态表现好并不保证组合最优。整合模型仍可能把模糊观察变成确定情绪,或者依据字幕补出视频中不存在的细节;自动标注不能被写成全量人工真值。
低层过滤检查说话者、语音与人脸匹配及描述长度异常等问题。高层过滤利用在人工标签数据上训练的情绪和情感倾向模型,对自动描述抽出的判断进行一致性检查。直观上,这是用另一个系统检查答案是否离谱;它提高数据可用性,但也可能把真正罕见、模态冲突或表达含蓄的样本当作噪声移除。
因而过滤不是越强越好。若分类器只熟悉几种典型情绪,它倾向保留容易归入这些类的样本,而细粒度研究恰恰关心边界情形。一个合适的学生扩展是分析被删除样本,而不是只看保留比例:分别统计情绪词频、模态冲突、长短片段和少数情绪的变化,再判断质量提升是否伴随覆盖损失。
flowchart TD A[音频] --> AE[冻结声学编码器] V[视频帧] --> VE[冻结视觉编码器] AE --> P[投影和模态内部汇聚] VE --> P P --> F[音视频预融合] F --> L[带LoRA的语言模型] T[字幕与提示] --> L L --> D[情绪描述与标签] D --> E[情绪轮 F1 HIT 情感WAF]
公式:从特征到逐词生成
三个关键词“pre-fusion”“Q-Former”“LoRA”分别对应融合发生的位置、可学习查询汇聚机制和低秩参数更新。冻结编码器表示其参数不更新,并非该模块不执行计算;训练投影层和 LoRA 仍需要显存保存中间激活。初学者不应把参数高效微调误解成普通笔记本可以无条件完成原始训练规模。
原文 Eq.1–2 的生成分解。A、V、T 分别为音频、视频和字幕,y 是答案序列。每一步根据此前词与多模态证据预测下一个词,训练目标让参考描述具有更高概率。它不同于一次输出六维类别概率。
原文 Eq.3–4 的机制重写。Q 是可学习查询,P 是位置表示。查询像若干可训练的信息收集器,在长音视频序列中读取相关内容,得到固定数量的融合向量;它们不是人手编写的情绪关键词,也不保证每个查询对应一种情绪。
原文 Eq.5 对均值汇聚的展开。先把每个模态的时间维平均,得到一个音频向量和一个视频向量。这样节省计算,但弱化短暂变化的具体时间。视频中的瞬时微笑如果被长时间平静表情稀释,就可能成为该设计的失败条件。
原文 Eq.6–7 的简化符号。维度投影后,两个模态向量按学习到的系数组合。原文和核验源码都没有在这个分支显式施加 softmax,因此不能把权重解释为必定非负且总和为一的概率;图示的“重要性”并不自动具有概率意义。
原文 Eq.9–12 的指标组合。每种情绪轮先对样本精确率和召回率做论文规定的汇总,再得到 F1,最后平均五套轮。先平均 F1 与先平均 P、R 再算 F1 一般不同,复现必须按原协议实现。
原文 Eq.13 的命中指标。基本情绪任务只检查参考单标签是否落在预测集合中。若把所有类别都输出,命中率可能很高,因此 HIT 不是普通单标签准确率。解释结果时需要同时关注预测标签数和多报问题。
注意力版与查询版的取舍不只是参数多少。查询版保留从序列选择信息的能力,但优化更复杂;均值后融合结构简单,却先丢掉一部分时间信息。Table 5 显示总体平均注意力版较好,细粒度分数却是查询版略高。研究者应根据目标指标选择结构,不能把平均领先解释为所有任务、所有情绪都领先。
实验:质量过滤贡献很大,指标不能混称准确率
| 过滤 | 细粒度 | 基本情绪 | 情感倾向 | 平均 |
|---|---|---|---|---|
| 无 | 58.42 | 64.36 | 76.09 | 68.91 |
| 低层 | 58.61 | 62.78 | 79.04 | 69.54 |
| 低层+情绪 | 61.72 | 67.83 | 82.74 | 73.78 |
| 低层+情感 | 61.00 | 66.33 | 85.04 | 74.05 |
| 两类高层都用 | 62.52 | 68.38 | 84.22 | 74.77 |
低层过滤提高总体平均,但基本情绪分数下降;两种高层过滤同时使用也不是每一列都最大。这个表支持“质量筛选总体有帮助”,不支持“每项过滤对每个任务都单调有益”。如果研究目标是跨场景可靠性,应继续检查过滤器在目标场景的偏差,而不是直接套用同一阈值。
| 预融合 | 细粒度 | 基本情绪 | 情感倾向 | 平均 |
|---|---|---|---|---|
| 无 | 61.21 | 66.28 | 82.57 | 72.95 |
| Q-Former | 62.65 | 66.89 | 84.30 | 74.16 |
| Attention | 62.52 | 68.38 | 84.22 | 74.77 |
Table 2 中 AffectGPT 的三模态平均为七十四点七七,Emotion-LLaMA 为六十四点一七,但这里平均跨越不同数据集及指标,不等于统一的七十四点七七百分比分类准确率。仅视频与字幕的版本平均也达到七十四点三一,在 MELD 上甚至高于三模态版本;更多模态可能增加噪声,需要具体分析。
Table 3 固定模型比较数据,MER-Caption 为六十八点九一、筛选后的加号版本为七十四点七七,说明数据质量是主要因素之一。Table 8 的 LoRA 秩从零到十六提高平均成绩,同时增加约四千零三十七万可训练参数。继续加到三十二仅小幅提升,不能由此声称秩越大越值得投入。
原文使用 A100 八十 GB 级硬件,八帧输入、学习率一万分之一的十分之一、每个 epoch 五千步、最多六十个 epoch,单卡 batch 为三。实际可用显存、分布式卡数和序列长度都会改变可行性。本篇没有运行完整训练,不给 RTX 4070 Laptop 的虚假耗时承诺;应先做一个样本的推理显存测量。
源码对应:这个注意力分支没有 softmax
源码:AffectGPT/my_affectgpt/models/affectgpt.py,L622–638(固定提交 95b9257758df)
video_hidden_state = torch.mean(video_hidden_state, axis=1) # [b, featdim1]
audio_hidden_state = torch.mean(audio_hidden_state, axis=1) # [b, featdim2]
video_hidden_state = self.multi_video_embs(video_hidden_state) # [b, maxdim]
audio_hidden_state = self.multi_audio_embs(audio_hidden_state) # [b, maxdim]
multi_hidden_state = torch.concat([video_hidden_state, audio_hidden_state], axis=1) # [b, maxdim * 2]
attention = self.attention_mlp(multi_hidden_state) # [b, maxdim]
attention = self.fc_att(attention) # [b, 2]
attention = torch.unsqueeze(attention, 2) # [b, 2, 1]
multi_hidden2 = torch.stack([video_hidden_state, audio_hidden_state], dim=2) # [b, maxdim, 2]
fused_feat = torch.matmul(multi_hidden2, attention) # [b, maxdim, 1]
multi_hidden = fused_feat.squeeze(axis=2) # [b, maxdim]
# + multi_llama_proj
inputs_llama = self.multi_llama_proj(multi_hidden) # [b, llmdim]
inputs_llama = torch.unsqueeze(inputs_llama, 1).expand(-1, self.num_multi_query_token, -1) # [b, 16, llmdim]源码先沿时间维取均值,再分别投影,拼接后经过两个线性层产生两个系数。之后直接矩阵乘法加权,没有归一化步骤。最终一个融合向量被扩展为配置指定数量的语言模型 token。扩展复制不等于生成了相同数量的独立信息,不能把 token 数直接解释为独立情绪证据条数。
源码:AffectGPT/train_configs/mercaptionplus_outputhybird_bestsetup_bestfusion_frame_lz.yaml,L25–41(固定提交 95b9257758df)
# Other pre-trained models
llama_model: "Qwen25" # Vicuna
acoustic_encoder: "HUBERT_LARGE" # IMAGEBIND
visual_encoder: "CLIP_VIT_LARGE" # EVA_CLIP_G
num_audio_query_token: 1
num_video_query_token: 1
num_multi_query_token: 1
num_image_query_token: 1
max_length: 1024
vis_processor:
train:
name: "alpro_video_train"
n_frms: 8
image_size: 224配置明确使用 Qwen2.5、HuBERT Large、CLIP ViT Large,并给出八帧与每类一个查询 token。仓库现已加入后续强化学习内容,本篇只核对 AffectGPT 目录,未把 AffectGPT-RL 当作 ICML 2025 方法。代码中的冻结开关也应结合 LoRA 包装逻辑理解,不能只看 frozen_llm 的字面值推断全参数训练。
从笔记本开始的可执行学习任务
第一阶段先用随机张量实现两模态均值融合:输入形状设为批量二、音频五步、视频八步、共同维度四,输出应为二乘四。检查模态交换、时间步复制和全零输入时的结果,并打印权重是否为负。验收是你能说清矩阵乘法的每一维,不需要下载大模型就能理解主要预融合机制。
第二阶段建立五十条描述的过滤练习集,保留未经筛选的原文、过滤理由和最终决定。人工抽查说话者不匹配、长度异常、情绪不一致各若干条。验收重点是误删率而不仅是删除比例:至少找到三条分类器不同意但人类认为仍有合理证据的样本,讨论它们是否属于细粒度或冲突情绪。
第三阶段先固定已生成描述与标签,运行情绪轮指标和 HIT 的教学版本。增加一个输出全部基本类别的作弊基线,观察 HIT 为何失真;再增加预测标签数限制,比较精确率损失。验收产物应包括逐样本结果、五套轮分数和平均方式,而不是只有一个仪表盘大数字。
第四阶段再尝试有授权权重的单样本推理,记录硬件、峰值显存、帧数、字幕长度、输出长度与用时。若资源不足,使用离线特征做小融合头实验,明确它是机制验证而非原模型复现。先验证数据管线和评分,再决定是否租用更大设备;完整微调不能由一个随机张量实验替代。
适合细粒度方向的研究问题是:均值汇聚是否遗漏短暂但关键的表情或声学片段?可以在固定编码器和训练数据上替换时间汇聚,按短促线索与持续线索分组评估。适合跨场景方向的问题是:自动质量过滤是否把目标场景中的非典型表达删掉?这需要检查保留率与分组误差,而不是直接改一个融合层名字。
作者限制与独立判断
作者指出自动标注仍可能出错,当前主要处理单个说话者,音画不匹配样本往往被排除;对于基本情绪评价,HIT 的多报问题尚未完全解决。这些限制意味着系统更适合有清晰主体与对应声音的片段,不能直接推出对多人交流、画外音或真实社会互动同样有效。
本文独立判断是:过滤器与评价器都依赖既有模型,会产生循环偏好的风险;测试平均提升可能来自更贴近既有分类体系。要证明细粒度能力,应增加独立标注的难样本与证据正确性指标;要证明跨场景能力,应固定源场景过滤策略并在目标场景单独报告,而不是只汇总所有数据集的均值。
把机制变成可以复查的实验记录
为了真正理解预融合,可以给两个模态各设计一组小向量:音频持续显示低落,视频多数帧平静但有一帧明显皱眉。均值池化会把那一帧与其他帧平均;查询机制则可能集中读取它,但是否做到取决于训练。将这组人工张量作为机制测试,只能验证结构的信息保留能力,不能代替真实情绪识别实验。
LoRA 的基本想法是把大权重的增量表示成两个较小矩阵的乘积,从而减少需要更新的参数。它没有删除原始语言模型权重,也没有免除前向计算。报告资源时应区分基础权重占用、优化器状态、训练激活与缓存;只报告可训练参数少,会让初学者误判显存需求,尤其在长答案和多帧输入时。
自动过滤的因果解释需要控制样本量。筛选前后同时改变数量与质量时,总体提升无法完全区分二者。可以从未筛选数据中随机抽取与筛选后相同数量的样本作为对照,再比较词频和难度分布。这个实验比简单比较全部原始数据与过滤子集,更能说明筛选规则究竟提供了什么。
对少数情绪应另做保留率统计。例如某个标签原来出现二十次,筛选后仅剩两次,整体正确率可能改善,但该情绪的学习机会大幅减少。若你的方向是细粒度识别,这种损失可能比总体平均提升更重要。保留率表应按标签、片段长度与模态冲突分别拆分,并保留多标签样本可能同时计入多组的说明。
评价九个数据集时,不同数据集的类别、样本数和指标尺度并不相同。直接等权平均体现的是基准设计者对任务的权重选择,而不是自然形成的唯一成绩。复现实验应先完整展示各数据集,再给总体平均;如果只改善最容易的几个任务,总分可能掩盖目标场景退化,需要明确指出。
一次合格的单样本推理验收应保存采样到的八帧时间点、音频长度、字幕和输出,而不是仅截取最终答案。若生成了不存在的动作,先判断该动作是否可能出现在未采样片段;如果根本没有输入证据,再归为观察幻觉。这样才能分清抽帧不足、编码损失和语言模型补写三种不同故障。
阅读完成后的口头自测是:为什么筛选后三万余样本可以胜过十一万余样本?为什么注意力权重不一定是概率?为什么基本情绪的 HIT 不能直接叫准确率?答案应分别涉及噪声与分布、源码缺少归一化,以及集合包含关系。能回答这三题,比记住论文主表的平均分更能证明你掌握了核心机制。
原文与核验边界
论文原文及出版信息。本篇依据全文、附录和表格编写;文中的教学计算与研究建议均不冒充作者实验证据。核验日期:2026-10-23。
自己的解释与验收记录
写出一条输入到输出的链路、一个关键公式的含义,以及你完成的最小检查。笔记仅保存在当前浏览器,可从主站「我的学习笔记」导出。