如何快速上手多模态情感分析:五种文本图像融合方案完整详解
【免费下载链接】Multimodal-Sentiment-Analysis多模态情感分析——基于BERT+ResNet的多种融合方法项目地址: https://gitcode.com/gh_mirrors/mu/Multimodal-Sentiment-Analysis
Multimodal-Sentiment-Analysis 是一个多模态情感分析开源项目:输入一句文本加一张图片,输出该样本的情感类别。它把 BERT 和 ResNet50 两个骨干模型融合起来,内置 5 种融合策略,适合用来理解多模态情感分析里不同融合方式的效果差异。
一条评论加一张图,它能判断出什么情感
想象这个场景:用户在电商页面留下一句评论和一张晒图,你想判断他到底是满意、无感还是不满。这个项目做的就是这件事——文本和图片各走一条骨干网络(默认文本模型是 roberta-base,图像侧是 ResNet50),两条特征流融合后再分成三个情感类别。
它的产出很具体:
- 训练时只在 output/ 目录下保留验证集准确率最高的那份权重,中间结果不占地方
- 在测试集上跑一遍,每个样本预测出的情感标签会写进 output/test.txt
- 五种融合策略自带准确率对照:OTE(把两条输出特征当 token 送进 Transformer)最高 74.6%,NaiveCombine(73.6%)和 HSTEC(73.1%)紧随其后
所以它既能当一条完整的情感分析流水线用,也是对比融合方法的现成素材 🎯
四步上手多模态情感分析:装依赖、放数据、训练、出结果
- 把仓库克隆到本地:
git clone https://gitcode.com/gh_mirrors/mu/Multimodal-Sentiment-Analysis - 安装依赖:
pip install -r requirements.txt。注意版本是锁死的(torch 1.8.2、transformers 4.18),如果你机器上环境较新,可能需要适当调整版本 - 数据准备:
train.txt和test_without_label.txt是入口清单,原始图文数据要先解压到 data/data/ 目录里。数据集不在仓库中,需要自行下载 - 首次训练(以效果最好的 OTE 为例):
python main.py --do_train --epoch 10 --text_pretrained_model roberta-base --fuse_model_type OTE想只训文本或只训图像,加上--text_only或--img_only即可。训练结束后,再执行python main.py --do_test --fuse_model_type OTE --text_pretrained_model roberta-base --load_model_path 你的模型路径,预测结果就落在 output/test.txt 里 🚀
模块职责地图:数据流、融合模型、训练评估三条线怎么分工
数据流(data/ + utils/):utils/DataProcess.py 是这条线的核心,Processor 类管标签编码、解码和指标计算;utils/APIs/ 下四个小文件各司其职,APIDataset 搭数据集、APIEncode 做图像预处理、APIMetric 算准确率、APIDecode 把 logits 变回标签;utils/common.py 负责读取数据、切分(默认留 20% 做验证)和保存。改动 encode 里样本的文本、图像组装方式后,所有融合模型的输入都会跟着变,务必跑一遍训练脚本验证。
融合模型(Models/):五个文件各实现一种融合思路——NaiveCatModel 直接拼接两条特征,NaiveCombineModel 做轻量组合,CMACModel 用交叉注意力让文本与图像互相"看",HSTECModel 把隐层状态送进 Transformer 融合,OTEModel 则把两条输出特征当 token 序列处理。每个文件里都自带 BERT 和 ResNet 两个分支的子模型。想加自己的融合方式,新建一个文件,再到 main.py 的 if-elif 分发里登记一下就行,三种主流结构长这样:
训练与评估(main.py + Trainer.py + Config.py):main.py 解析命令行、按--fuse_model_type导入对应融合模型,并决定走训练还是测试分支;Trainer.py 管训练、验证、预测三个循环,只在验证准确率刷新历史最好时才更新落盘权重;Config.py 是全部超参的唯一来源,命令行只覆盖其中最常用的几项。
配置参数速查:最常调的参数,改了会发生什么
参数都在Config.py里,部分可被命令行参数覆盖:
| 参数 | 默认值 | 改了会发生什么 |
|---|---|---|
learning_rate | 3e-5,可用--lr覆盖 | 调大收敛快但容易震荡,调小更稳但训练更慢 |
epoch | 20 | 训练轮数,加大会耗时更多且可能过拟合 |
fuse_model_type | NaiveCombine | 切换融合策略,训练与测试时必须一致,否则权重无法加载 |
bert_name | roberta-base | 换 Hugging Face 文本骨干,首次运行会自动下载新模型 |
loss_weight | [1.68, 9.3, 3.36] | 对三个情感类别加权、平衡样本数,改标签集合时要同步num_labels |
train_params | batch_size 16 | 调大一轮内更多样本、速度更快但吃显存,调小反之 |
bert_learning_rate/resnet_learning_rate | 5e-6 | 控制两个骨干网络被"重新调校"的力度,冻结骨干时应再调低 |
💡 上手前有两个提醒:原始数据集不在仓库里,记得先下载并解压到 data/data/,否则训练一开始就会报文件缺失;依赖版本偏旧,新环境遇到兼容性问题时,优先升级 torch 和 transformers 而不是改代码。延伸方向上,最值钱的实验是把五种融合策略各训一遍对比验证准确率,再分别跑一次--text_only和--img_only,看看多模态相对单模态到底强在哪——这正是这个仓库的精华所在。
【免费下载链接】Multimodal-Sentiment-Analysis多模态情感分析——基于BERT+ResNet的多种融合方法项目地址: https://gitcode.com/gh_mirrors/mu/Multimodal-Sentiment-Analysis
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考