一文读懂多模态情感分析基于 BERTResNet 的五种文本图像融合方法【免费下载链接】Multimodal-Sentiment-Analysis多模态情感分析——基于BERTResNet的多种融合方法项目地址: https://gitcode.com/gh_mirrors/mu/Multimodal-Sentiment-AnalysisMultimodal-Sentiment-Analysis 是一个多模态情感分析项目它把一条推文的文本和配图放在一起用 BERT 编码文字、ResNet50 编码图片再把两路特征融合最后判定情感倾向积极、中性、消极。适合想入门图文多模态情感识别、又想看完整可运行代码的开发者。一为什么文本和图片要一起看只看文字判情感容易漏掉关键信息一句呵呵配上微笑表情意思完全不同。这个项目的思路很直接——文本和图像各自过一遍预训练模型得到特征向量再用不同的融合结构把它们揉在一起分类。它和常见多模态方案的区别在于项目里同时给出了五种融合策略从最朴素的两路拼接到跨模态注意力到输出层 Transformer 编码你可以通过同一套数据横向对比看哪种融合方式更稳。作者在测试集上的结果里OutputTransformerEncoder 以 74.625% 的准确率领先仅用文本的消融实验也有 71.875%说明融合确实带来了增益。二三分钟跑通训练整个过程分四步全部在仓库根目录操作。克隆代码仓库地址https://gitcode.com/gh_mirrors/mu/Multimodal-Sentiment-Analysisgit clone https://gitcode.com/gh_mirrors/mu/Multimodal-Sentiment-Analysis安装依赖。项目锁定了一版较旧的 PyTorch 生态torch 1.8.2 transformers 4.18建议用 Python 3.8 或 3.9 建虚拟环境避免高版本不兼容pip install -r requirements.txt准备数据集。训练用的文本和图片文件每条样本一个 guid.txt 加一个 guid.jpg需要自行下载解压后放在 data/data/ 目录下下载地址写在 README.md 里以仓库最新说明为准。仓库已附带 data/train.txt、data/test_without_label.txt 等索引文件不需要你另配。开始训练。最小组合一条命令即可GPU 和 CPU 都能跑自动检测python main.py --do_train --epoch 10 --fuse_model_type OTE每轮训练结束会打印验证集准确率最优模型自动存到 output/ 目录下。训练完成后用同一条入口加 --do_test 和 --load_model_path 即可在测试集上推理结果写入 output/test.txt。三项目里有什么代码按数据、模型、工具三块组织结构相当清爽功能域位置作用数据集data/训练/测试索引.txt和格式化后的 .json图文文件放 data/data/融合模型Models/五种融合结构一个文件一个模型训练循环Trainer.pyAdamW 优化器BERT、ResNet、融合层分组设学习率、训练/验证/预测数据处理utils/DataProcess.py、utils/common.py标签词表、DataLoader 封装、数据格式化与读取全局配置Config.py超参数、路径、batch size改这里或传命令行参数入口脚本main.py解析命令行参数串起训练与测试流程Models/ 下的五个文件分别对应NaiveCat文本图像特征直接拼接、NaiveCombine两路特征相加、CMAC跨模态注意力、HSTEC隐状态 Transformer 编码、OTE输出层 Transformer 编码。命令行里用 --fuse_model_type 切换缩写或全名都认。四核心链路怎么跑以效果最好的 OTE 为例一条样本的完整旅程是这样的输入data/data/ 下一条 guid 对应一个 .txt 文本和一个 .jpg 图片标签为 positive / neutral / negative 三类。文本分支文本经 Hugging Face 分词器送入 roberta-base取 pooler 输出过一层线性变换压缩成 64 维向量。图像分支图片缩放为 224×224过 ResNet50 主干默认冻结参数同样压成 64 维。融合两个向量在序列维拼成一个长度 2 的序列进一个 TransformerEncoderLayer 做交互拿到融合表示。输出两层全连接加 Dropout 输出三分类 logits交叉熵损失带类别权重 [1.68, 9.3, 3.36] 应对样本不均衡回传更新。跨模态注意力方案CMAC的结构稍有不同它还会把 ResNet 中间层的特征图压成 64 个空间 token与文本隐状态做交叉注意力细节可以看模型结构图OTE 方案的结构更简洁输出层直接用一个 Transformer 编码器处理两路特征五关键参数怎么调影响结果的参数不多Config.py 和命令行里最值得动的有五个--fuse_model_type决定融合结构。想快速出基线用 NaiveCat追求精度用 OTE。换模型后历史 checkpoint 不通用要重训。--epoch默认 10仓库配置里写的是 20。数据集不大跑满 20 轮基本收敛验证准确率不再上升就可以停。--lr融合层学习率默认 5e-5。BERT 和 ResNet 主干在 Trainer.py 里单独用 5e-6 微调动大模型学习率前先只调这个。--text_pretrained_model文本编码器默认 roberta-base可换成 Hugging Face 上任意 AutoModel 能加载的模型。注意文本和图像特征维度要经过各自 trans 层适配换模型无需改代码。--text_only / --img_only单模态开关。加 --text_only 时图像会被替换成纯黑图可用于做消融实验复现 README 里的 Text Only 71.875% 结果。类别权重 loss_weight 建议保持不动它是按数据集正负样本比例算好的。六新手高频坑数据放错位置训练脚本会去 data/data/ 下找 guid 对应的 .txt 和 .jpg压缩包没解到这一层就会在格式化阶段报找不到文件。测试集没有标签data/test_without_label.txt 里标签全是 null这是正常的——它是无标签测试集跑 --do_test 时不需要真实标签。torch 版本装不上requirements 锁的是 torch 1.8.2Python 3.10 以上装不了。要么降级 Python要么放宽到更高版本个别 API 可能小改以仓库最新说明为准。ResNet 默认冻结config 里 fixed_image_model_params 为 True图像特征只靠后面 trans 层适配。想微调 ResNet 记得关掉这个开关并留意显存。写在最后这个项目代码量很小但五脏俱全五种多模态融合结构、完整的训练评估循环、可复现的实验数据拿来当多模态情感分析的入门教材非常合适。建议先跑通 OTE再逐个替换 --fuse_model_type 做对比你会对融合结构如何影响情感识别效果有直观体感。更多细节五种模型结构图、结果表格都在 README.md 里欢迎动手实验。【免费下载链接】Multimodal-Sentiment-Analysis多模态情感分析——基于BERTResNet的多种融合方法项目地址: https://gitcode.com/gh_mirrors/mu/Multimodal-Sentiment-Analysis创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考