携程网站的会计工作怎么做,wordpress pc客户端,现在还有企业做网站的吗,安徽网站设计定制代码以及视频讲解
本文所涉及所有资源均在传知代码平台可获取
概述
情感识别是人类对话理解的关键任务。随着多模态数据的概念#xff0c;如语言、声音和面部表情#xff0c;任务变得更加具有挑战性。作为典型解决方案#xff0c;利用全局和局部上下文信息来预测对话中每…代码以及视频讲解
本文所涉及所有资源均在传知代码平台可获取
概述
情感识别是人类对话理解的关键任务。随着多模态数据的概念如语言、声音和面部表情任务变得更加具有挑战性。作为典型解决方案利用全局和局部上下文信息来预测对话中每个单个句子即话语的情感标签。具体来说全局表示可以通过对话级别的跨模态交互建模来捕获。局部表示通常是通过发言者的时间信息或情感转变来推断的这忽略了话语级别的重要因素。此外大多数现有方法在统一输入中使用多模态的融合特征而不利用模态特定的表示。针对这些问题我们提出了一种名为“关系时序图神经网络与辅助跨模态交互CORECT”的新型神经网络框架它以模态特定的方式有效捕获了对话级别的跨模态交互和话语级别的时序依赖用于对话理解。大量实验证明了CORECT的有效性通过在IEMOCAP和CMUMOSEI数据集上取得了多模态ERC任务的最新成果。
模型整体架构 特征提取
文本采用transformerde方式进行编码
音频视频都采用全连接的方式进行编码
通过添加相应的讲话者嵌入来增强技术增强
关系时序图卷积网络RT-GCN
解读RT-GCN旨在通过利用话语之间以及话语与其模态之间的多模态图来捕获对话中每个话语的局部上下文信息关系时序图在一个模块中同时实现了上下文信息与模态之间的信息的传递。对话中情感识别需要跨模态学习到信息同时也需要学习上下文的信息整合成一个模块的作用将两部分并行处理降低模型的复杂程度降低训练成本降低训练难度。
建图方式模态与模态之间有边相连对话之间有边相连 建图之后用图transformer融合不同模态以及不同语句的信息得到处理之后特征向量 两两交叉模态特征交互
跨模态的异质性经常提高了分析人类语言的难度。利用跨模态交互可能有助于揭示跨模态之间的“不对齐”特性和长期依赖关系。受到这一思想的启发Tsai等人2019我们将配对的跨模态特征交互P-CM方法设计到我们提出的用于对话理解的框架中。 线性分类器
最后就是根据提取出来的特征进行情感分类了 代码修改
这是对话中多模态情感识别视觉音频文本在数据集IEMOCAP目前为止的SOTA。在离线系统已经取得了相当不错的表现。离线系统的意思是是一段已经录制好的视频而不是事实录制如线上开会
但是却存在一个问题输入的数据是已经给定的一个视频分析某一句话的情感状态的时候论文的方法使用了过去的信息也使用了未来的信息这样会在工业界实时应用场景存在一定的问题。
比如在开线上会议需要检测开会双方的情绪不可能用未来将要说的话预测现在的情绪。因为未来的话都还没被说话者说出来此时就不能参考到未来的语句来预测现在语句的情感信息。但是原文的方法在数据结构图的构建的时候连接上了未来语句和现在语句的边用图神经网络学习了之间的关联。
因此修改建图方式不考虑未来的情感信息重新训练网络得到了还可以接受的效果精度大概在82%左右原文的精度在84%左右2%精度的牺牲解决了是否能实时的问题其实是值得的。
演示效果 核心逻辑
在这里可以粘贴您的核心代码逻辑
# start#模型核心部分import torch
import torch.nn as nn
import torch.nn.functional as Ffrom .Classifier import Classifier
from .UnimodalEncoder import UnimodalEncoder
from .CrossmodalNet import CrossmodalNet
from .GraphModel import GraphModel
from .functions import multi_concat, feature_packing
import corectlog corect.utils.get_logger()class CORECT(nn.Module):def __init__(self, args):super(CORECT, self).__init__()self.args argsself.wp args.wpself.wf args.wfself.modalities args.modalitiesself.n_modals len(self.modalities)self.use_speaker args.use_speakerg_dim args.hidden_sizeh_dim args.hidden_sizeic_dim 0if not args.no_gnn:ic_dim h_dim * self.n_modalsif not args.use_graph_transformer and (args.gcn_conv gat_gcn or args.gcn_conv gcn_gat):ic_dim ic_dim * 2if args.use_graph_transformer:ic_dim * args.graph_transformer_nheadsif args.use_crossmodal and self.n_modals 1:ic_dim h_dim * self.n_modals * (self.n_modals - 1)if self.args.no_gnn and (not self.args.use_crossmodal or self.n_modals 1):ic_dim h_dim * self.n_modalsa_dim args.dataset_embedding_dims[args.dataset][a]t_dim args.dataset_embedding_dims[args.dataset][t]v_dim args.dataset_embedding_dims[args.dataset][v]dataset_label_dict {iemocap: {hap: 0, sad: 1, neu: 2, ang: 3, exc: 4, fru: 5},iemocap_4: {hap: 0, sad: 1, neu: 2, ang: 3},mosei: {Negative: 0, Positive: 1},}dataset_speaker_dict {iemocap: 2,iemocap_4: 2,mosei:1,}tag_size len(dataset_label_dict[args.dataset])self.n_speakers dataset_speaker_dict[args.dataset]self.wp args.wpself.wf args.wfself.device args.deviceself.encoder UnimodalEncoder(a_dim, t_dim, v_dim, g_dim, args)self.speaker_embedding nn.Embedding(self.n_speakers, g_dim)print(f{args.dataset} speakers: {self.n_speakers})if not args.no_gnn:self.graph_model GraphModel(g_dim, h_dim, h_dim, self.device, args)print(CORECT -- Use GNN)if args.use_crossmodal and self.n_modals 1:self.crossmodal CrossmodalNet(g_dim, args)print(CORECT -- Use Crossmodal)elif self.n_modals 1:print(CORECT -- Crossmodal not available when number of modalitiy is 1)self.clf Classifier(ic_dim, h_dim, tag_size, args)self.rlog {}def represent(self, data):# Encoding multimodal featurea data[audio_tensor] if a in self.modalities else Nonet data[text_tensor] if t in self.modalities else Nonev data[visual_tensor] if v in self.modalities else Nonea, t, v self.encoder(a, t, v, data[text_len_tensor])# Speaker embeddingif self.use_speaker:emb self.speaker_embedding(data[speaker_tensor])a a emb if a ! None else Nonet t emb if t ! None else Nonev v emb if v ! None else None# Graph constructmultimodal_features []if a ! None:multimodal_features.append(a)if t ! None:multimodal_features.append(t)if v ! None:multimodal_features.append(v)out_encode feature_packing(multimodal_features, data[text_len_tensor])out_encode multi_concat(out_encode, data[text_len_tensor], self.n_modals)out []if not self.args.no_gnn:out_graph self.graph_model(multimodal_features, data[text_len_tensor])out.append(out_graph)if self.args.use_crossmodal and self.n_modals 1:out_cr self.crossmodal(multimodal_features)out_cr out_cr.permute(1, 0, 2)lengths data[text_len_tensor]batch_size lengths.size(0)cr_feat []for j in range(batch_size):cur_len lengths[j].item()cr_feat.append(out_cr[j,:cur_len])cr_feat torch.cat(cr_feat, dim0).to(self.device)out.append(cr_feat)if self.args.no_gnn and (not self.args.use_crossmodal or self.n_modals 1):out out_encodeelse:out torch.cat(out, dim-1)return outdef forward(self, data):graph_out self.represent(data)out self.clf(graph_out, data[text_len_tensor])return outdef get_loss(self, data):graph_out self.represent(data)loss self.clf.get_loss(graph_out, data[label_tensor], data[text_len_tensor])return lossdef get_log(self):return self.rlog#图神经网络
import torch
import torch.nn as nn
from torch_geometric.nn import RGCNConv, TransformerConvimport corectclass GNN(nn.Module):def __init__(self, g_dim, h1_dim, h2_dim, num_relations, num_modals, args):super(GNN, self).__init__()self.args argsself.num_modals num_modalsif args.gcn_conv rgcn:print(GNN -- Use RGCN)self.conv1 RGCNConv(g_dim, h1_dim, num_relations)if args.use_graph_transformer:print(GNN -- Use Graph Transformer)in_dim h1_dimself.conv2 TransformerConv(in_dim, h2_dim, headsargs.graph_transformer_nheads, concatTrue)self.bn nn.BatchNorm1d(h2_dim * args.graph_transformer_nheads)def forward(self, node_features, node_type, edge_index, edge_type):if self.args.gcn_conv rgcn:x self.conv1(node_features, edge_index, edge_type)if self.args.use_graph_transformer:x nn.functional.leaky_relu(self.bn(self.conv2(x, edge_index)))return x使用方式部署方式
首先建议安装conda因为想要复现深度学习的代码github上不同项目的环境差别太大同时处理多个项目的时候很麻烦在这里就不做conda安装的教程了请自行学习。
安装pytorch 请到pytorch官网找安装命令尽量不要直接pip install https://pytorch.org/get-started/previous-versions/
给大家直接对着我安装版本来下载因为图神经网络的包版本要求很苛刻版本对应不上很容易报错
只要环境配置好了找到这个文件里面的代码粘贴到终端运行即可
温馨提示
1.数据集和已训练好的模型都在.md文件中有百度网盘链接直接下载放到指定文件夹即可 2.注意训练出来的模型是有硬件要求的我是用cpu进行训练的模型只能在cpu跑如果想在gpu上跑请进行重新训练 3.如果有朋友希望用苹果的gpu进行训练虽然现在pytorch框架已经支持mpsmac版本的cuda可以这么理解训练但是很遗憾图神经网络的包还不支持不过不用担心这个模型的训练量很小我全程都是苹果笔记本完成训练的。
源码下载