这是篇期刊,发表在Neurocomputing,真的比会议文章长多了…

论文题目:Joint Multi-level Attentional Model for Emotion Detection and Emotion-cause Pair Extraction

论文下载:https://www.sci-hub.ren/10.1016/j.neucom.2020.03.105

论文DOI:https://doi.org/10.1016/j.neucom.2020.03.105

论文代码:https://github.com/tomsonsgs/LVE-joint-MANN-master

1. 摘要和介绍

作者将情感检测(Emotion detection, ED)和情感-原因对抽取(Emotion-cause pair extraction, ECPE)结合了起来,提出了一套模型,来同时求解这两个任务。

ECE任务旨在推断出文本中的情感表示,这个任务首先被当做词级别的序列标注问题;后来Gui et al.(2016)又重新设计了用于原因子句检测的ECE任务,并且将该任务建模为子句级别的分类问题。再后来,Xia et al.(2019)认为在文档级的表示中,情感子句和它对应的原因子句之间存在隐式联系,而且ECE任务需要先标注情感子句,这不够实用,所以又提出了新任务emotion-cause pair extraction(ECPE),旨在预测出文档中的情感子句-原因子句对,即子句级别的对分类问题。

情感检测(Emotion detection, ED)旨在预测出子句级别的情感类别。

图1

从图中我们可以看到,ED和ECPE任务在两方面很类似:

  1. ECPE中所有的情感子句肯定都有自己的情感类别(比如开心、悲伤等),这意味着ECPE中的情感子句在ED中也是情感子句;
  2. 原因子句也与给定的情感有关,不同的语义片段会导致不同的情感。比如说图中原因子句中的became better也有助于检测情感子句的情感类别——Happiness。

所以作者提出一个联合任务(ED+ECPE)来同时提高ED和ECPE任务的效果。

如图1所示,我们可以看到,情感子句和原因子句以一种细粒度的方式隐含地联系在一起,它们都有助于特定情感的形成。例如,“cried excitedly”反映了“happiness”的情绪,而“became better”实际上诱发了“cried excitedly”的行为。为了获得更好的情感-原因对表示并且充分利用情感的形成过程,需要在情感信息的引导下,采用连贯的方法对情感子句和原因子句之间的内在关系进行建模。
为此,作者采用self attention来描述特定情感与情感子句之间的联系,用mutual inner attention来描述情绪子句与原因子句之间的联系。此外,这两种注意力形式可以通过一个多层次注意力模块连贯地整合在一起。

2. 前人工作

3. 准备工作

3.1 ECE的基本分层模型

ECE的基本分层模型包含三个组件:子句编码器,上下文编码器,CRF。

  • 子句编码器用来编码并且表示子句信息;

  • 上下文编码器在子句编码器的输出上,计算子句级的嵌入;

  • CRF层的目的是作为一种后处理方法来优化标签预测。

这里面的类RNN结构都可以用Transformer替代。

3.2 问题定义

给定文档XX,包含子句c1,c2,....c_1, c_2, ....,每个子句都有适当的标签(包括非情感标签)。任务就是对所有的情感-原因对(比如(c1,c2)(c_1,c_2)),看它是否是一个正确的情感-原因对。

最后,模型在ED和ECPE任务上进行评估。

4. 模型

上图就是整体结构图,也是判断(c1,c4)(c_1, c_4)是否是一个情感-原因对的过程,下面会逐步讲解。

4.1 BERT子句编码器

使用BERT的PieceTokenizer将单词切开,得到embedding后再相加,得到单词的embedding。

使用wj,kw_{j,k}表示第j个子句的第k个词;使用hj,kh_{j,k}表示第j个子句的第k个词的BERT embedding。

使用BiLSTM

hj={hj,0,hj,1,....}h_j = \{h_{j,0}, h_{j,1},....\}是第j个子句的embedding,h^j={h^j,0,....}\hat{h}_j=\{\hat{h}_{j,0},.... \}是BiLSTM的输出,hˉj\bar{h}_j是BiLSTM的最后隐藏状态,j是子句的下标。

4.2 Self Attention

情感一般由特殊的情感词来触发,比如悲伤、开心。self attention作用在子句上,对子句上的每个单词赋予权重,权重反映的就是这个单词在这个子句中的重要性,也反映了在最后情感中词级别的分布。

h^j,k\hat{h}_{j,k}是第j个子句第k个词的隐藏态表示,hˉj\bar{h}_j是第j个子句的隐藏态表示。即前者是词表示,后者是句表示。MLP2MLP_2是两层的多层感知机,且带有激活函数tanh。

(2)式得到了cj,0,cj,1,cj,2,....c_{j,0},c_{j,1},c_{j,2},....之后,传入(3)式,得到第j个子句中第i个词的注意力权重a^j,i\hat{a}_{j, i}

hjatth_j^{att}是带权和,也就是过了self attention之后的第j个子句的新向量表示,随后作者又过了一个两层的感知机,得到第j个子句的最终向量表示hjch_j^c

4.1, 4.2节就对应该图部分,红色框就表示hˉj\bar{h}_j

4.3 上下文编码器和潜在变量

这一节是在文档中编码子句级别的信息。

个人不是很理解这一节的目的是什么,编码子句级别的信息是啥意思呢?感觉这一节应该和4.4节合成一节才好。

潜在变量,是作者的trick。

hch^c是4.2节得到的子句的向量表示,将所有子句的向量表示送入BiLSTMcontextBiLSTM_{context},得到两个输出。

hˉ={hˉ0,hˉ1,...}\bar{h}=\{\bar{h}_0,\bar{h}_1,... \}是每个子句的隐藏状态向量表示的集合,hmh^m是BiLSTM的最后隐藏状态。softplussoftplus是非线性函数,确保输出值大于0。

潜变量z=μ+σzz'=\mu + \sigma * z,其中zz是满足(7)式的随机值,且这些值都是向量,不是标量。

posjpos_j是下标为j的位置嵌入。最后得到的hˉj\bar{h}_j就是第j个子句的新向量表示。

对应下图:

至此,我们得到了每个子句的最终向量表示。

4.4 Mutual Attention

对某个子句,文章中的其他子句对它产生的作用不一样大,即权重不一样大,所以还要进行子句之间的注意力计算,进一步更新子句的向量表示。

hˉj\bar{h}_j就是第j个子句的向量表示,hˉn\bar{h}_n就是第n个子句的向量表示。hjch_j^c是经过mutual attention后第j个子句的嵌入表示,SS是文档中的子句数。

经过(15)式又更新了子句的表示,hjfh_j^f是第j个子句的最最最终向量表示。最后送入softmax进行预测,得到第j个子句的情感类型predjEDpred_j^{ED},也就完成了ED任务。

predjEDpred_j^{ED}后面还会用于ECPE任务。

4.4节对应上图,Emotion就是predjEDpred_j^{ED}

4.5 多层次注意力模块

如图所示,文档中的所有子句两两组合成对,便组成了一个二维矩阵。

作者使用多层注意力模块来描述对中的内在关系并且输出对的向量表示。

j,nj,n是情感和原因子句的下标,k1,k2k1, k2是情感和原因子句中单词的下标。所以hj,k1h_{j,k1}就表示第j个子句中的第k1个词的向量表示,hn,k2h_{n,k2}就表示第n个文档中的第k2个词的向量表示。L1,L2L1,L2分别表示第j,nj, n个子句的长度。

如下面的图所示,aj,n,k1,k2a_{j,n,k_1,k_2}表示两个单词之间的隐含连接权重。比如"was killed"是和"upset"是有关系的,它可以看做是一个原因词组,hj,n,k1h'_{j,n,k_1}可以被看做是从第n个子句到第j个情感子句的第k1个单词的映射对齐向量。

a^j,k1\hat{a}_{j, k_1}是由(3)式self attention得到的,反映了形成最终情感子句的第k1个单词的贡献价值。

hj,nh''_{j,n}是一个对齐向量,可以看做是原因子句到情感子句的映射。

最后将四部分进行concat,过两层感知机,进行ECPE预测。

这一节对应总体框架图中最上面的那一部分。

4.6 损失函数

这里作者用到了KL散度,因为KL散度能够描述两个分布的相似程度。作者假设了子句里的情感分布是标准正态分布,所以用N(0,1)N(0,1)分布和预测分布之间的KL值来作为优化目标。

KL散度公式如下:

DKL(pq)=i=1np(x)logp(x)q(x)D_{KL}(p||q) = \sum_{i=1}^np(x)log\frac{p(x)}{q(x)}

损失函数如下:

NN是文档的总子句数,μ,σ\mu, \sigma都是向量,KLKL值是标量。

yjEDy_j^{ED}是ED任务的第j个子句的情感标签,yj,nECPEy_{j,n}^{ECPE}是对pair(j,n)pair(j,n)的golden标签,j,nj,n是对中两个子句的下标,若对是情感-原因对,yECPE=1y^{ECPE}=1,否则为0。

golden应该就是ground-truth的意思吧…

考虑到正样例和负样例的不平衡(一个文档可以组成很多对,但是只有很少的几对是情感-原因对),所以将α\alpha设置为0.1。

看着loss公式(24)很复杂,其实就是ED任务的交叉熵+ECPE任务的交叉熵+KL散度值。

4.7 只用于ECE任务的Mutual Inner Attention

在ECE任务中算Mutual Inner Attention时,直接将hj,n,hˉn,hˉjh''_{j,n}, \bar{h}_n, \bar{h}_j拼接起来。

4.4节中(12)-(14)三个等式用以下等式替换:

ECE任务的标签只有两个类型:cause or non-cause。

5. 实验

5.1 数据集

ECE数据集和ECPE数据集

5.2 实验设置

对于ECE任务来说,作者把模型和以前的CNN,MEMNet,CANN,PAE-DGL,HCS,RTHN模型相比较;

对于ED+ECPE任务来说,作者把模型和以前的HN-IND,HN-CE和HN-EC相比较。

作者移除了数据集中超过30个子句的文档,且子句长度控制在50以内。

作者的模型叫做LAE-MANN。

5.3 参数设置

5.4 评估标准

使用precision、recall、F1值。并且引入了Exact Match(EM)

5.5 主要结果

5.5.1 ECE任务

可以看出分层的神经网络模型(HCS, RTHN, LAE-MANN)比没有分层的模型要好;作者的模型达到了最优。

5.5.2 ED和ECPE任务

上面带有HN的三个模型是(Xia et al. 2019)提出的两步走的方法。

5.6 消融实验

SA表示self attention;MA表示mutual attention;LV表示latent variable;MIA表示mutual inner attention;Joint表示模型是否被联合训练;EL表示模型是否使用ED任务的预测结果。

ECE任务中是没有Joint和EL的。

通过一图一表,我们可以看出,BERT与MIA对模型的影响最大,也就是最重要。

5.7 定性分析

从图中我们可以看出self attention和mutual inner attention的作用。

该图我们也可以看出self attention和mutual inner attention的作用。

5.8 错误分析

作者主要举了一些自己模型错误分类的例子。

并且作者发现所有的错误分类的样本中,有9.1%是ED任务出错,29.1%是ECPE任务错误,14.6%是ED+ECPE任务错误,所以可以推断出,ECPE任务比ED任务更难更复杂。

6. 总结

作者使用了一个多任务学习的联合结构来完成ED+ECPE任务,引入了多层次注意力模块,他需要self attention和mutual inner attention的信息来捕捉情感子句和原因子句之间的关系。为了利用分层结构信息,作者引入了潜在变量来建模文档中子句的情感分布。最终结果证明了作者模型的有效性。