ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

多模态情感识别实战:深度神经网络与特征融合的坑与解法

多模态情感识别实战:深度神经网络与特征融合的坑与解法 简介这是一份英文期刊论文PDF主题为基于深度神经网络的多模态情感识别适合从事机器学习、深度学习、情感计算与数据建模方向的研究者、研究生及相关工程人员参考。论文系统介绍了以卷积神经网络提取音频与视频中的低级特征、以循环神经网络捕捉时序动态变化的方法并提出了卷积与循环神经网络混合的识别框架同时详细讨论了音频信号处理、视频信号处理中的特征提取与选择流程以及早期融合、晚期融合等常用多模态融合策略便于读者建立从特征工程到模型设计再到融合决策的完整脉络。资源为1个PDF文件压缩包大小714KB内容来自东南大学学报英文版包含摘要、引言、方法、实验与结论等完整章节实验部分报告了在中文自然音视频情感数据库上的平均分类精度达41.15%并给出相比基线算法提升16.62%的结果具有较强的参考与复现价值。已有233人学习下载适合需要了解主流技术路线、网络结构对比及实验细节的读者收藏使用。1. 多模态情感识别为什么值得做深度神经网络是主线但不是万能钥匙客服质检要从语音里听出情绪车载系统要看表情判断司机是否疲劳视频面试要综合说话内容和语气判断候选人状态这些场景都指向同一个技术方向多模态情感识别。它不只用深度神经网络看人脸而是把文本、语音、视觉放进同一个系统做综合判断。一个反直觉的结论是很多人以为把三个单模型的结果拼起来就完事真正落地时发现数据对齐、融合策略、标签噪声才是决定上限的地方。“基于深度神经网络的多模态情感识别英文”这个标题指向的正是这样一条技术路线适合正在搭第一版情绪识别原型、或者已经跑通单模态模型想往多模态迁移的人读。下文从数据开始一路讲到训练和踩坑。2. 数据与特征对齐多模态情感识别有一半难点在这里2.1 模态配比怎么选文本、语音、视频的取舍多模态情感识别最常见的三个模态成本差异很大。文本依赖ASR或平台自带字幕信息密度最高但实时场景里经常拿不到语音只要一个麦克风但受环境噪声和口音干扰视频人脸表情最直观可光照、遮挡、戴口罩都会让视觉特征失效。选模态之前先问自己一句当前场景里哪两个信号是稳定且成对的两个高信噪比模态配成多模态比三个弱模态硬耦合要稳得多。我一般建议从“文本语音”或“语音视频”起步。前者适合客服、呼叫中心录音和ASR转写都是现成资产不需要额外布摄像头后者适合车载、闸机、线下交互绕开ASR错误这个额外的噪声来源。视觉文本多用在弹幕、评论区这类内容平台表情符号和配图能辅助判断反讽但纯文本特征可能更强这时视觉只是补丁。多模态不是越多越好每多加一个模态就多一个数据清洗和特征匹配的体力活。公开数据集方面常用的是这几类见下表。注意它们大多是学术基准真实业务数据分布和它们差得很远拿来练手可以别把数据集上的分数当成上线的保证。数据集模态构成常见任务使用注意CMU-MOSI / MOSEI文本语音视频情感极性二分类/回归片段级对齐说话人较多按speaker切分训练IEMOCAP文本语音视频多分类情感只有少量说话人容易测试集过乐观MELD文本语音视频对话多分类情感带对话语境多轮上下文要考虑进模型RAVDESS语音视频多分类情感演员表演情感强度高和真实场景差异大这些数据集的共同点是标注都有一定主观性后面2.3会专门讲标签质量。新手最容易犯的错误是拿到数据直接拼特征训练跳过了对齐这一步最后模型指标虚高换到自己的业务数据立刻崩。2.2 特征提取三选一手工特征、预训练模型还是端到端特征提取决定了深度神经网络的上限。常见做法是三条路线手工特征、预训练模型特征、端到端学习。手工特征指的是MFCC、openSMILE的语音统计量或者FACS动作单元、LBP纹理这样的视觉手工特征。它们的优点是便宜、稳定、可解释不依赖大规模训练缺点是表达能力有限复杂场景下很难区分“愤怒”和“激动”这种相近情绪。数据量低于几千条、算力紧张的时候手工特征反而是保底方案。预训练模型特征是当前最稳的路线。文本支路用BERT或RoBERTa这类语言模型取[CLS]向量或者对词向量做平均池化语音支路用wav2vec 2.0或有监督语音情感模型输出帧级表征再池化视频支路用深度学习卷积神经网络CNN的经典结构常用ResNet在单帧上提空间特征再沿时间方向做池化或接一个小GRU。这套组合的好处是每个支路都自带大规模预训练的知识多模态训练数据即使只有几千条也能收敛得动。端到端学习则是把原始波形和视频帧直接喂给网络中间不经过任何现成特征。理论上最优雅实际代价很大需要几十万条级数据、更长的训练时间和更强的算力调试时还很难定位是哪个模态出了问题。除非团队专门做这个方向否则我不建议第一个版本就端到端。三条路线的对比用一张表收一下路线优点缺点适用条件手工特征可解释、算力开销小上限低、跨场景差数据量小、快速原型预训练模型特征泛化强、收敛快特征维度高、要管理多模型资源大多数业务首版端到端特征可学习、上限高数据/算力/调试成本高有大规模数据和研究团队无论选哪条都要在进入融合之前把每个模态的特征维度固定下来。文本可能得到768维向量语音是40或1024维视频是2048维维度差异大不是问题问题是训练时每个模态的特征必须有一致的时间对齐关系否则后面无论做拼接还是注意力都会错位。2.3 对齐与标注多模态情感识别里两个最耗体力的环节对齐是多模态任务里最枯燥但最要命的部分。三个信号天然不同步文本是一个词一个词断续出现的语音是帧级连续的视频是30fps或更高帧率的。常见做法是先做强制对齐用ASR或者现成的文本-音频对齐工具把每个词或每个音素的时间边界找出来然后以“词片段”或“固定时长切段”作为基本单元把对应时间窗内的语音帧和视频帧抽出来。对齐单位选定时长还是词边界直接决定后面跨模态注意力能看到什么信息。如果原始数据没有对应时间戳另一个常见做法是把音频和视频都切成2到5秒的固定窗口文本用ASR落在窗口内的话语碎片。这样对齐简单但代价是窗口切断了语气的完形情感强度会被切散。我一般会优先做词级对齐宁可前期多花两天写对齐脚本也不要后期被“注意力学不到语义”这种问题拖住。标注环节同样要提前防坑。情感是出了名的主观标注同一段视频十个人标注可能有三种标签。常见处理是多人标注取多数投票同时算标注者间一致性Cohen‘s kappakappa低于0.4的样本直接扔进人工复核池。另一个更省钱的方案是软标签把标签分布当作学习目标让模型输出一个分布而不是硬类别。这样把标注噪音变成了信息模型可以学到“这段情绪更接近愤怒但也有两成可能是激动”。我自己遇到过极端的案例过滤低一致性样本之后同一套模型的F1能直接涨3到4个点。这比换任何网络结构都划算。3. 融合架构选型从决策级融合到跨模态Transformer的落地对比3.1 决策级融合保住下限的稳妥路线决策级融合是最容易理解也最容易被低估的路线。每个模态各自训练一个分类模型每个模型输出情感类别的概率分布最后对概率做加权平均或投票得到最终结果。它的优点是训练快、每个单模型可独立迭代、某个模态的模型坏了可以单独拉出来修而不影响其他支路。在线推理时还可以按模态的可靠性动态调整权重比如信号差时少信语音。缺点同样明显决策级融合完全学不到模态间的交互。一个典型例子是反讽文本内容是“你真棒”语调却拖得又低又平单独看文本是正面的单独听语音是中性的只有把两者放在一起才能判断这是讽刺。决策级融合在“组合才出现”的信号上没有任何优势所以它更适合作为第一个版本和基线不建议作为最终交付方案。落地时具体怎么做每个模态先跑出一个概率输出然后在验证集上用网格搜索找每个模态的权重或者把三个模态的概率向量拼接起来喂给一个逻辑回归让逻辑回归学出权重。第二种方式更稳因为它同时学到了不同情感类别下各模态的可信度差异。还有一个实用技巧不要等三个单模态都做到完美再融合先用一个强模态搭起主流程另一个模态逐步接入观察验证集F1随接入而变化的曲线如果某一步不升反降立刻回退并排查这个模态的特征质量。最后在测试集上做归一化评估别拿训练集上的正确率自欺欺人。3.2 特征级融合拼接之外先解决尺度与归一化特征级融合是把各模态特征在进入分类器之前先合并。最朴素的形式是直接拼接把文本的768维向量、语音的特征、视频的特征首尾相连再接一层MLP和一个softmax分类头。这是几乎所有多模态论文的共同基线也是我每次实验都先跑的一版。直接拼接有一个非常隐蔽的坑量纲和尺度不一致。BERT的768维向量数值通常落在十位数量级MFCC的值域可能在个位数量级而视觉CNN的深层特征数值可能偏大。三者叠加后欧氏距离和梯度都会被数值大的模态主导造成“文本和视频在carry语音学了等于没学”。这不是玄学是训练过程中可以复现的偏置。标准解法是融合前先做逐模态归一化每个模态的特征过一个独立的全连接层或LayerNorm再拼接或者各自映射到统一维度比如全部映射到128或256维然后再拼。第二个关键点是dropout的分配。很多团队在整个模型上只加一个全局dropout结果多模态模型拟合能力太强训练集loss漂亮、验证集一塌糊涂。更好的做法是给每个模态分支单独设置dropout文本0.3、语音0.2、视频0.3这类组合而不是统一定值。训练刚开始时打印各模态分支的梯度范数确认它们在同一数量级这是排查尺度问题最简单的手段。特征级融合能处理一部分跨模态关系因为它让分类器在拼接后的空间里自由组合来自不同模态的信号。但它的交互方式是隐式的没有显式的注意力机制当模态间噪声很大时分类器可能学到的只是“哪一个模态更可信”而不是“两个模态如何互补”。到了这一步可以用下一小节的跨模态交互来补充。3.3 跨模态交互协同注意力与跨模态Transformer讲的是什么当业务场景真的需要“两个模态互相修正”时就得从特征拼接升级为显式交互。常见做法是协同注意力Co-Attention和跨模态Transformer两类。协同注意力的基本思想是把一个模态的查询向量拿去查看另一个模态的特征用注意力权重重新加权对方特征再把这个加权结果送回到自己模态。比如语音支路的查询去关注视觉特征中“嘴巴张合”对应的帧文本支路的查询去关注语音中“语气强烈”的片段特征在经过一轮交互后变得更干净。跨模态Transformer则是把所有模态的token拼成一个长序列让self-attention在序列内部自由寻找跨模态关联。这种做法的表达能力最强几乎不需要手工设计“哪两个模态要交互”但代价是参数量大、训练数据需求高。在多模态情感识别这种几千到几万条样本的任务里跨模态Transformer很容易过拟合调参成本也高。我的经验是把它放在最上层而不是替换特征提取先用预训练模型把每个模态的表示打牢再把一个小的跨模态transformer块放在分类头之前。训练时先冻结预训练层几个epoch只让融合层和分类头学习然后再解冻微调。注意力头数宁可少不能多8头换4头往往指标不降、训练更稳。如果你的训练集少于2万条跨模态Transformer的收益很难稳定超过特征级融合这时把预算花在数据清洗和单模态基线上更划算。最后给一个选择参考表融合方式核心思想优点缺点适合场景决策级概率加权简单、可解释、可容错学不到交互快速原型、服务降级特征级向量拼接实现容易、能学部分交互尺度敏感、交互隐式中规模数据、正式基线跨模态交互注意力/Transformer显式建模互补关系参数多、易过拟合数据量充足、追求上限如果看一份英文技术资源它往往会声称跨模态模块效果最佳但真正决定能不能复现的是它有没有给出对齐单位和数据划分方式。先跑通前两种基线再上Transformer用“比最强单模态高多少”来评价而不是“比随机高多少”。4. 训练参数与评估指标让深度神经网络在多模态情感识别里收敛稳一点4.1 损失函数与类别不均衡加权交叉熵和Focal Loss怎么选情感分类的标签几乎不做均衡采样这就是为什么一上来直接用交叉熵很容易翻车。中性样本数量大愤怒、厌恶、恐惧数量少模型会把一切不确定的样本往多数类推准确率看着不低confusion matrix里少数类几乎整列是零。最常见的处理方案是加权交叉熵每个类别的权重按样本数的倒数或平滑倒数来设。如果样本数差距特别悬殊比如超过了1:10权重可以做幂次平滑不要直接把倒数用到底否则少数类会被过度强调模型又开始过拟合少数类。当加权交叉熵调了两轮还不满意我一般会换成Focal Loss。它本质上是在交叉熵基础上给每个样本乘一个(1-p_t)^γ系数让已经被正确分类的高置信样本贡献降低让难分类样本主导梯度。γ取值2是比较稳的起点α保持类别权重不变。有一个常见误区需要避开Focal Loss不是用来替代一切交叉熵的万能药它的前提是难样本确实存在如果数据本身噪声比难例多focal会放大噪声。所以在多模态情感识别里我仍然把加权交叉熵作为第一选择Focal作为第二选择而不是一上来就上难度。另外如果任务不是多分类而是连续情感强度回归比如某些数据集里的-3到3分数就别硬套分类loss。常见做法是回归用MSE或分位数损失再把回归结果映射成情感标签区间。分类和回归的评估口径也不一样混着汇报会让读者完全无法判断你的模型到底好不好。4.2 训练配置学习率、warm-up、早停与dropout的推荐参数多模态模型和单纯图像分类的调参逻辑有明显区别最大的点在分组学习率上。预训练特征提取器已经自带一套稳定的表示你用太高的学习率去微调会把它破坏融合层和分类头是随机初始化的学习率太低又收敛不动。所以我习惯把模型参数按模块分成几组预训练编码器2e-5到5e-5融合模块1e-4到5e-4分类头可以再适当放宽。这个分组不是玄学是同时兼顾“保住预训练知识”和“让新模块学起来”的折中。给一份可以直接照抄的参考参数表参数建议取值说明优化器AdamW偏平缓适合预训练模型微调预训练层学习率2e-5 ~ 5e-5太高会破坏已有表示融合层学习率1e-4 ~ 5e-4随机初始化需要更大步长batch size16 ~ 32更大batch注意学习率同步放大warm-up步数训练总数10%左右防止预训练层微调初期震荡dropout0.1 ~ 0.3分模态设置不用统一值早停patience5 ~ 8 epoch按验证F1变化不看训练lossbatch size和warm-up值得单独说。batch size翻倍时学习率通常也要跟着调否则大batch规模下收敛变慢warm-up让学习率从零开始爬升在一开始的前几百步避免预训练层的权重被一次大梯度打乱。早停则要盯验证集的F1或损失而不是训练集的loss很多团队把早停设在训练loss不再下降的位置等于没早停。训练中还有一个细节每个epoch结束保存一次验证集上的最优权重作为“后悔药”。多模态实验跑一次很贵训练loss曲线经常反复别等全训练完再挑模型直接按验证集最优权重恢复是最好的做法。固定随机种子、报告多次运行的平均值和标准差会议和业务汇报里都更可信因为多模态训练对种子相当敏感。4.3 评估指标与数据划分汇报F1而不是准确率类别不均衡时准确率是没什么参考价值的。对多分类情感任务汇报macro F1比weighted F1更严格因为macro F1只取每个类别F1的算术平均少数类权重不会被多数类稀释如果上线时更关心全体样本的正确率就汇报weighted F1。无论用哪个都要同时看混淆矩阵里少数类的行靠那个数字确认模型没把“愤怒”全部推给“中性”。数据划分要比指标更提前想好。随机按样本划分是最快也最容易虚高的方式同一个说话人的多个片段可能同时出现在训练集和测试集模型记住的是说话人的语调特征而不是情感特征换一批人马上失效。正确的做法是按说话人或按会话session划分确保同一个说话人不会跨集合。如果你在复现某份英文技术资料先看它的实验设置里是random split还是speaker split前者分数再高都不能直接比。划分方式风险什么时候可用随机样本划分说话人泄漏、指标虚高快速原型、调试pipeline按说话人划分训练集内类别分布可能偏正式实验、论文对比按会话/时间划分上下文断裂、边界样本受影响带时序依赖的真实项目数据量紧张时哪怕牺牲一部分训练样本也要预留一个跨说话人小测试集它才是你的模型能不能上线的唯一证人。后面避坑章节里有一半场景来自“测试集划分不合理”和“标签不可靠”这两个根因它们在训练前设计好就能避免掉大半。5. 避坑与排查多模态情感识别最常见的5个翻车现场5.1 模态缺失导致推理崩溃现象训练结束指标不错上线第一周就碰到一个意外语音丢了、视频黑屏模型要么直接报错要么输出一个完全离谱的预测。原因训练时每个批次都是三个模态齐全模型根本没有见过“某个模态整体缺失”的输入分布推理时缺失模态的矩阵变成空或全零分类器只能按训练分布外的情况强行输出。解决训练中加入模态mask机制给每个批次随机以10%到30%概率把某个模态的特征整体置零让模型学会在缺失条件下用剩余模态兜底。推理时对缺失模态填对应维度的零向量而不是报错跳过。上线前再专门跑一轮“只有文本”“只有语音”“只有视频”“全缺失”的边界测试把每种情况下的降级表现记录在案。5.2 融合后精度不升反降现象辛辛苦苦接了多模态结果比单模态基线还低两个点。多数团队到这里就开始怀疑数据量不够盲目加数据。原因引入了一个信噪比很低的弱模态它贡献的噪声大于信息量。深层网络很容易把噪声和错误相关学进去尤其是直接做特征拼接时。解决第一步永远是先确认单模态各自的最好分数和最强单模态是谁凡是融合后没有明显超过最强单模态的方案一律不进入候选。第二步是给融合加门控或注意力加权让网络自己决定每个模态的可信度等于给弱模态一个“可以不发言”的出口。还有一种便宜办法是加权决策融合先不拼特征先用权重组合概率输出往往在业务数据上就够用。5.3 语音特征被视觉特征淹没现象训练时loss下降慢打印特征统计发现视觉特征均值和方差是语音的十几倍测试时发现语音支路的贡献约等于不存在。原因两个模态的特征量纲不一致深度神经网络默认会被数值尺度大的特征主导。拼接、attention的score计算都会受尺度影响语音这样的小数值特征自然被压在底下。解决每个模态在进入融合层前独立做LayerNorm或者各自过一个线性层映射到统一维度确保特征尺度相近。训练刚开始时打印一个epoch内各模态分支的梯度范数让它们保持在同一个数量级如果语音梯度一直偏小可以给语音分支稍大的学习率或先单独预训练语音分支。这个排查不用等到训练结束一个epoch就能发现问题。5.4 按随机样本划分导致指标虚高现象验证集F1达到0.78换一批说话人评估骤降到0.55跨场景直接不可用。原因随机样本划分把同一个说话人的不同片段同时放进了训练集和验证集模型学到了说话人的口音、节奏这些泄漏信号而不是情感本身。解决从第一版实验开始就按说话人或会话session划分宁可训练集小一点也不要让数据泄漏污染判断。对外汇报分数必须标注用的是随机划分还是跨说话人划分。如果英文技术资源里没有明确说明划分方式默认按随机划分处理实验结果要打折扣看。5.5 标签主观性让模型学不到稳定信号现象训练loss能降到0.2测试指标却很稳定地停在低处个别样本在不同epoch之间反复翻转预测结果。原因情感标签主观性强标注者之间的Cohen’s kappa往往只有0.4到0.6模型在互相打架的标注上找不到一致的语义边界。解决标注阶段做多人标注并过滤低一致性样本kappa低于0.4的样本不进训练集如果样本量太少不能丢就把硬标签换成软标签分布让模型学习标注者分歧。还可以把“标注一致率”作为一个特征喂给模型让它在不确定区域输出更保守的预测。这个小技巧在多模态情感识别里特别值钱因为多数业务数据永远无法像图像分类那样干净。6. 进阶用消融实验和模态缺失测试证明你的模型真的有用把模型从实验推到上线我不看它是否“用上了所有模态”只看它“少一个模态会掉多少分”。这份验证清单可以直接用来做最后的评估分别记录文本单模态、语音单模态、视频单模态以及两两组合和全模态的F1。如果某个模态被去掉后指标反而上升说明它在这个任务里是在拖后腿把它从管线里请出去不要为了“多模态”三个字硬凑三个支路。模态缺失测试和消融实验要搭配着看训练完成后在测试集上把每个模态分别置零记录F1下降幅度。下降最大的模态才是系统真正在依赖的信息源。如果文本被去掉后F1几乎不变那这个系统的真实判定能力基本都来自视觉和“多模态融合”名不符实。这类测试越早做越好它能直接指出哪条支路的采集和清洗值得继续投入。我自己的习惯是给所有融合方案立一条硬规矩不显著超过最强单模态的融合方法一律淘汰。有一回我做一个协同注意力模型测试集上比纯文本模型低了4个点查了一周才发现拼接前语音特征没有归一化数值被视觉特征压在底下改成各模态独立过层再拼之后指标才回到正确方向。这件事之后我再也不敢跳过“先做单模态基线再上融合”这个步骤也不敢不看每个分支的梯度范数就上线训练。多模态情感识别的上限靠网络下限靠数据和验证习惯把验证做严了模型才敢真正拿出去用。希望帮到你。本文还有配套的精品资源点击获取
返回列表