目录
Introduction
本文探讨Emotion recognition in conversation (ERC)中使用GNN建模对话者的自我依赖和说话者之间的依赖的模型。在多轮对话中,对话人的情绪会随着对话的进行而转变,说话人的情绪状态受到上一时刻他本身的影响,也受到对话人的影响。因此,情绪状态变化的原因是两方面的。如图:
很显然,如果将对话当中的每一个utterance=
{
u
1
,
u
2
,
.
.
.
u
N
}
\{u_1,u_2,...u_N \}
{u1,u2,...uN}作为一个节点,那么两名不同说话人之间的关系只需要通过边相连就可以建模了。有向边的使用可以使图网络也可以很好地建模utterance之间的顺序关系。
以图中两个对话者
A
,
B
A,B
A,B为例,
U
U
U代表utterance,
S
S
S代表对话者状态,
I
I
I代表对话者意图,
E
E
E代表情感,
T
o
p
i
c
Topic
Topic代表对话的主题,灰色的圆圈代表隐藏变量,白色的圆圈代表观察变量。说话者的状态与意图都会对情感造成影响,而这作用到观测数据就是所说的utterance。而utterance又会去影响双方的一个隐变量,因此对这种相互影响的有效建模是有必要的。
Methodology
Context Independent Utterance-Level Feature Extraction
每一个utterance都由一个句子构成,因此本文首先使用CNN从话语文本中提取文本特征。单词的Embedding使用Glove300进行表示,卷积核为 [ 3 , 4 , 5 ] [3,4,5] [3,4,5]。
Model
总体的架构图如图:
首先是对对话进行上下文特征表示(使用RNN),之后使用一种具有Edge类别区分的有向图为不同Utterance建模,将两次图信息传递之后的结果与Utterance原本特征进行拼接做最终的情感预测。重点当然是要介绍如何构图、如何消息传递。
Graph Construction
已知Utterance表示节点,BiGRU的输出表示特征,而边则根据说话者身份的不同以及方向的不同有4×2=8中不同的类型(如图,绿色代表
p
1
p_1
p1的自环,蓝色表示
p
1
p_1
p1对
p
2
p_2
p2说的话;虚线代表指向下一time step,实线表示上一个step)。为了降低构图的时间复杂度,采用一个大小为10的窗口,只考虑为窗口内部的节点添加边。对于每个节点,通过相似度计算权重:
p
,
f
p,f
p,f分别表示past窗口大小以及feature窗口大小。本文也给出一个例子说明这8中类型的边,相信大家聪明的小脑袋瓜不用作者举例也能看懂:
Feature Transformation
构图结束,就要考虑不同的Edge类型进行异质性的消息传递了。注意本文的两层GCN采用了不同的消息传递方式,第一个GNN表示为:
其中的
α
x
,
x
\alpha_{x,x}
αx,x表示由Eq(1)计算的到的权重,
N
i
r
N_i^r
Nir表示顶点
i
i
i在关系
r
r
r下的邻居,
c
i
,
r
c_{i,r}
ci,r是标准化常数,本文应该设置成了
∣
N
i
r
∣
|N_i^r|
∣Nir∣。我们解读一下这个公式,那就是依照不同的权重参数进行不同邻居的消息传递,每一种边类型下的邻居都需要考虑标准化系数
∣
N
i
r
∣
|N_i^r|
∣Nir∣,然后也需要整合自身的特征
g
i
g_i
gi。而第二层GNN则采用了无权重的消息传递:
Emotion Classifier
分类也很简单。首先是拼接然后执行注意力:
之后是线性变换并求得预测概率分布:
损失函数是多分类的损失并加上L2正则化:
Experiment
这里的数据集有老友记的对话,看起来还是蛮亲切的。不同数据集的分类结果直接看吧:
消融实验说明了不同Encoder以及不同Edge类型的有效:
边权重的可视化可以看出上下文utterance对情绪的影响: