本文主要是介绍当GNN遇见NLP(十一):Directed Acyclic Graph Network for Conversational Emotion Recognition,ACL2021,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
同上一篇一样,是使用图建模对话情绪识别的论文。本文提出了用有向无环图(DAG)对对话进行编码的方法(DAG-ERC),主要借鉴了ICLR2021发表的工作DAGNN(Directed acyclic graph neural networks.)中的GNN改进策略。DAG-ERC在DAGNN的基础上进行了两个改进:(1)基于说话人身份的关系感知特征转换,以收集信息;(2)上下文信息单元,以增强历史上下文信息。下面就看具体的内容。
Method
Building a DAG from a Conversation
最开始的部分依旧是构图。utterances构成了节点, r i , j ∈ R r_{i,j}\in R ri,j∈R表示边的类型。这里边的定义比较简单,1表示这两个相连的话语是由同一说话者说的,0表示其他。这样一来同一个speaker的历史utterance就可以由此建模。但是,本文在构建边的时候考虑了remote以及local信息的不同,因为与当前utterance相邻的则具有更高的影响力。因此,边需要由以下三点特殊性:
- Direction。这个在类似的论文里都有应用,有向边表示在传递过程中,未来的utterance不能被当前所见。
- Remote information。针对一个特定的speaker,除了他说的第一句话外,必定会有一个 u τ u_\tau uτ,这个utterance之前的对话都包含了remote信息。
- Local information。 u τ u_\tau uτ之内的utterance包含的是local信息。在本文中,使用一个窗口参数 w w w确定 u τ u_\tau uτ的位置,在截断点和当前说话节点之间的任意节点 u l u_l ul,都是local的节点。
总体的构图思路如图(还是蛮好理解的):
为了更方便理解,本文也给出了一个 w = 1 w=1 w=1的特殊例子:
Directed Acyclic Graph Neural Network
对于之前的工作,许多都是使用Glove300这种静态向量,而本文则在每个ERC数据集上对预训练的语言模型(本文用的是RoBerta)进行微调,然后在训练DAG-ERC时冻结其参数。那么任意一个utterance u i u_i ui就可以用 [ C L S ] [CLS] [CLS]来表示了。
DAGNN
接下来看本文的GNN结构。
有向无环图模型(DAGNN)的工作方式类似GNN和RNN的组合。它们按时间顺序聚合每个节点的信息,并允许所有节点从邻居收集信息,并在同一层更新它们的状态:
这里的 f f f实际上是GRU或是LSTM的门更新机制,在源码里就是直接使用的GRUCell。而本文的更新方法由于需要引入特异性的边,因此与上述方法有些不同:
DAG-ERC Layers
首先,以注意力的方式对节点特征进行聚合。注意力计算方式如下:
而由于边不同,因此提出了基于不同类型边的转换:
这里 W r i , j l ∈ { W 0 l , W 1 l } W^l_{r_{i,j}}\in \{W^l_0, W^l_1\} Wri,jl∈{W0l,W1l},代表了不同的边使用不同特征变换。最终节点的特征使用GRU进行更新:
但是,ERC仅使用节点信息单元是不够的,尤其是当情感需要从其上下文中提取时。因此,作为聚合了上下文信息的 M i l M_i^l Mil,可以用于如下的计算进一步提取上下文:
之后,节点的历史信息和上下文信息的共同决定了utterance节点所表达出的情感:
最终,预测的结果可以由以下方法计算:
损失函数:
Experiment
数据集:
对比一些基线:
进一步定义了三种DAG结构:(1)顺序结构,即话语之间依次连接;(2)本地信息单一的DAG,每句话只从最近的邻居处接收本地信息,而远程信息与我们的DAG保持一致;(3)每个utterance都和前 k k k个进行连接,不区分边的类型。不同变种的结果:
消融实验:
层数的影响:
这篇关于当GNN遇见NLP(十一):Directed Acyclic Graph Network for Conversational Emotion Recognition,ACL2021的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!