多模态COGMEN详解

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua小谢,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:人工智能话题分享

欢迎访问我的主页:Srlua小谢 获取更多信息和资源。✨✨🌙🌙

​​

​​

目录

概述

论文模型框架

演示效果

核心逻辑

使用方式

部署方式

避坑指南


本文所有资源均可在该地址处获取。

概述

情绪是人类行动的一个固有部分,因此,开发能够理解和识别人类情绪的人工智能系统势在必行。在涉及不同人的对话中,一个人的情绪会受到其他说话者的言语和他们自己在言语中的情绪状态的影响。在本文中,我们提出了基于 COntex- tualized Graph Neural Network的多模态情感识别COGMEN)系统,该系统利用了本地信息(即说话人之间的内/外依赖性)和全局信息(上下文)。建议的模型使用基于图谱神经网络 (GNN) 的架构来模拟对话中的复杂关系(本地和全局信息)。我们的模型在IEMOCAP和MOSEI数据集上给出了最先进的 (SOTA)结果,详细的消融实验显示了在两个层面上对信息进行建模的重要性

论文模型框架

图2显示了详细的体系结构。输入的话语作为语境提取器模块的输入,该模块负责捕获全局语境。语境提取器为每个话语(utterance)提取的特征形成了一个基于说话人之间交互的图(Graph Formation)。该图作为Relational - GCN的输入,然后是graph transformer,graph transformer使用形成的图来捕捉话语之间的内部和内部关系。最后,作为情感分类器的两个线性层使用所有话语获得的特征来预测相应的情感。

特征融合的方式:

简单的concat,论文运用了最简单的融合方式,有在尝试别的融合方式

transfomer层是提取一段对话中,不同语句之间的信息

经过一层transformer之后,融合了信息,就开始建图,进行图学习

图学习分别进行了图卷积以及,图transformer,图学习的意义在于,更好的捕捉对话中这种一来一回的关系,来融合来自不同短语的情感信息。

最后链接一个分类器就结束了

演示效果

核心逻辑

复制代码
##transformer层:
 def forward(self, text_len_tensor, text_tensor):
        if self.use_transformer:
            rnn_out = self.transformer_encoder(text_tensor)
            rnn_out = self.transformer_out(rnn_out)
        else:
            packed = pack_padded_sequence(
                text_tensor, text_len_tensor, batch_first=True, enforce_sorted=False
            )
            rnn_out, (_, _) = self.rnn(packed, None)
            rnn_out, _ = pad_packed_sequence(rnn_out, batch_first=True)

        return rnn_out

##图学习层

class GNN(nn.Module):
    def __init__(self, g_dim, h1_dim, h2_dim, args):
        super(GNN, self).__init__()
        self.num_relations = 2 * args.n_speakers ** 2
        self.conv1 = RGCNConv(g_dim, h1_dim, self.num_relations)
        self.conv2 = TransformerConv(h1_dim, h2_dim, heads=args.gnn_nheads, concat=True)
        self.bn = nn.BatchNorm1d(h2_dim * args.gnn_nheads)

    def forward(self, node_features, edge_index, edge_type):
        x = self.conv1(node_features, edge_index, edge_type)
        x = nn.functional.leaky_relu(self.bn(self.conv2(x, edge_index)))

        return x
##分类器:
    def forward(self, h, text_len_tensor):
        if self.args.dataset == "mosei" and self.args.emotion == "multilabel":
            if self.args.use_highway:
                h = self.highway(h)
            hidden = self.drop(F.relu(self.lin1(h)))
            scores = self.lin2(hidden)
            # y_hat = torch.sigmoid(scores) > 0.5
            y_hat = scores > 0
            return y_hat

        log_prob = self.get_prob(h, text_len_tensor)
        y_hat = torch.argmax(log_prob, dim=-1)
        return y_hat

使用方式

处理数据

python preprocess.py --dataset="iemocap_4"

训练模型

python train.py --dataset="iemocap_4" --modalities="atv" --from_begin --epochs=55

测试模型

python eval.py --dataset="iemocap_4" --modalities="atv"

部署方式

下载我训练好模型,以及数据集,附件里有data,modelcheckpoint文件夹,分别替换代码中的文件夹即可,我对每个单独的模态都有训练。

建议在pytorch官方来下载配置pytorch

建议用conda配置环境

避坑指南

如果新手cuda配置不成功,可以在代码:

parser.add_argument("--device", type=str, default="cuda", help="Computing device.")

处,把"cuda"改成"cpu"的方式

如果.pt文件无法打开,可以选择重新训练,自己生成模型文件

模型文件有硬件要求,提供的.pt文件都是用cpu训练,如果需要改成cuda版本,需要另外进行训练

​​

相关推荐
luckystar513~2 分钟前
自己动手写Agent Harness【agent tools】:给它装手和眼睛(工具注册与执行流水线)
人工智能
草莓橙子碗5 分钟前
Claude 使用指南
开发语言·python
工具分享13 分钟前
陪跑跟品爆单AI选品助手,高效跟品会赔本吗?
人工智能·python
COOLMO研究AI26 分钟前
Python 如何实现 AI API 的提示词(Prompt)版本管理与热更新
人工智能·python·prompt
官乐27 分钟前
AI面试指南(多agent开发流程)
人工智能·面试·职场和发展
学习zhao极致it30 分钟前
AI量化交易训练营(完结)
人工智能
老郑聊AI业财智造30 分钟前
Transformer 技术架构与源码分析
人工智能·python·深度学习·语言模型·架构·transformer·软件工程
程序员三藏35 分钟前
自动化测试用例编写详解
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例
Summer-Bright36 分钟前
Hot Chips 开幕、NVIDIA 财报 8/26、Rubin 首验 —— AI 芯片简报 08.20-08.22
人工智能·英伟达·财报·hot chip·rubin
RAOY的AI笔记1 小时前
ChatGPT账号安全设置教程:MFA、活跃会话、数据导出与异常登录处理
人工智能·安全·chatgpt