2020Arxiv: End-to-end Emotion-Cause Pair Extraction via Learning to Link

论文源码:https://github.com/shl5133/E2EECPE

1. 介绍

本篇论文提出了多任务学习模型,能够用端到端的方式同时抽取情感、原因和情感-原因对。作者的模型把对抽取视作一个链路预测任务(如下图所示),学习情感子句到原因子句的链路,并把模型命名为E2EECPE

2. 相关工作

3. 方法

3.1 问题定义

设有一个文档DD,按句子表示为D={ci}i=1DD=\{c_i\}_{i=1}^{|D|},则D|D|是文档的句子数;每一个句子cic_i又可以表示为ci={wj}j=1cic_i=\{w_j\}_{j=1}^{|c_{i}|},则ci|c_i|是第i个子句的单词数。

ECPE任务就是抽取集合P={(cke,ckc)}k=1PP=\{(c_k^e, c_k^c)\}_{k=1}^{|P|}P|P|为文档中的情感-原因对对数。

3.2 整体结构

3.3Embedding和子句编码

这部分用了TextCNN来给子句编码

先将每个单词表示为低维向量,比如使用word2vector。

然后使用textCNN得到子句向量表示,比如对第t个子句:

Ct=σ(convt(w1,...,wc))C_t = \sigma(conv_t(w_1,...,w_{|c|}))

convtconv_t表示第t个卷积操作,σ()=max(0,)\sigma(·)=max(0, ·)CtRc×dcC_t \in R^{|c| \times d_c}

再使用最大池化来提取特征,最终得到具有上下文感知的子句向量表示:

c~t=maxpool(Ct)c=[tc~t]\tilde{c}_t=maxpool(C_t) \\ c = [\oplus_t \tilde{c}_t]

经典论文TextCNN:《Convolutional Neural Networks for Sentence Classification》

3.4 文档建模

此时得到的子句向量表示,并没有其他子句的信息,再通过双向LSTM来建模子句,使每一个子句的向量表示都含有其他子句的信息,这也就是文档级别的建模。

LSTMf,LSTMbLSTM_f, LSTM_b分别表示前向LSTM和后向LSTM,隐藏层表示hih_i就是第i个子句的向量表示。

3.5 双仿射注意力机制

受到以下论文的启发,作者这里把文档看成一张图,子句是节点,直接计算了子句(顶点)之间的相似性得分,来判断两个子句之间是否构成情感-原因对。然而,顶点p,q的得分为σ(zpTzq)=σ(zqTzp)\sigma(z_p^Tz_q)=\sigma(z_q^Tz_p),是无向的,这显然不符合ECPE任务的特点。

Michael Schlichtkrull, Thomas N Kipf, Peter Bloem, Rianne Van Den Berg, Ivan Titov, and Max Welling. Modeling relational data with graph convolutional networks. In European Semantic Web Conference, pages 593–607. Springer, 2018.

作者为了解决有向性这个问题,使用了以下论文的方法,即使用了双仿射注意力机制来完成邻接矩阵(adjacent matrices)的填充,在ECPE中叫做pair matrices。

双仿射转换下文有介绍。

Timothy Dozat and Christopher D Manning. Deep biaffine attention for neural dependency parsing. arXiv preprint arXiv:1611.01734, 2016.

情感和原因表示

即整体架构图中最左和最右的两部分

ziez_i^e是子句的情感向量表示,zicz_i^c是子句的原因向量表示。

双仿射转换

我们通过以下公式把子句p和子句q映射到对矩阵中:

再用sigmoid激活函数做处理:

M~p,q=g(Mi,j)\tilde{M}_{p,q} = g(M_{i, j})

3.6 非对称位置权重矩阵

通过观察可知,情感子句和它对应的原因子句通常相隔不远,所以引入位置嵌入是有必要的。作者注意到,在实际生活中,人们通常会先说原因,再表达情感,也就是说,在位置权重矩阵中,下三角的元素通常更具有意义。

ϵ\epsilon是平滑因子

通过上式我们可以看出,p在q前且p靠q越近,A就越接近于1。

最后,就得到了对链路的特征表示:

\odot表示element-wise乘积。

3.7 多任务设置

两个辅助任务+一个主任务

两个辅助任务:情感子句预测,原因子句预测

利用以上公式得到子句i的情感表示和原因表示

再用softmax来进行情感预测和原因预测。

3.8 训练目标函数

直接看公式,都是交叉熵

最终使用L2正则化

下面这张表挺有用,是数据集的统计信息。

3.9 推理阶段的阈值

即5.4节中介绍的阈值,经过实验作者认为0.3最为合适。

这个地方最好去看论文代码

1
2
output_pairs = torch.nonzero(output_pair > 0.3).cpu().numpy().tolist()
target_pairs = torch.nonzero(target_pair > 0.3).cpu().numpy().tolist()

4/5 实验、结果分析

6.总结和未来展望

作者提出了端到端的框架,比原来的方法都好得多。

然而还有一些问题需要解决。

  1. 图神经网络可以引入,来学习位置关系;
  2. 作者在5.5节提出的标签不平衡问题,也需要寻找方法来解决。

这篇论文,模型大体上的结构就是:

  • TextCNN+BiLSTM+MLP得到子句的情感表示和原因表示;

  • 双仿射变换(就是那个公式)+位置因素得到子句对表示;

  • 多任务设置进行训练。