论文阅读-You Only Read Once: Constituency-Oriented Relational Graph Convolutional Network for Multi-Aspect Multi-Sentiment Classification

2025-05-05发布于论文随笔 | 最后更新于2025-05-05 16:05:00

nlp absa

AAAI原文链接 You Only Read Once: Constituency-Oriented Relational Graph Convolutional Network for Multi-Aspect Multi-Sentiment Classification

基本介绍

任务介绍

本文做的是NLP中的ABSA(Aspect-Based Sentiment Analysis)任务,即方面级情感分析。传统的情感分析任务较为粗粒度,往往以一篇文档或一整句话为单位,要求判断其情感极性(积极、消极或中性);ABSA则较为细粒度,要求对同一段文本中多个特定方面(实体、属性、动作等)做出情感极性判断。

例如,对于句子“Food was served very promptly but our wait for drinks was surprisingly long.”,可以认为其中具有serve food、wait、drink这三个方面(也可以有其他方面划分),该句子中对于这三个方面的情感极性分别为积极、消极、中性。

本文特色

之前的方法往往会分多次分别为文本中的各方面预测情感极性,这显然不利于全局信息的利用。本文提出了一到多(one-to-many)的YORO框架,一次预测文本中所有方面的情感极性,框架中用了一种改进后的图卷积网络CorrGCN来学习局部、全局等信息。

模型详解

整体框架图如下:

模型整体框架图

文本编码

由于以往的模型需要分别预测各方面的情感极性,需要将文本按下面这种格式输入文本编码器,即将一个句子中的多个方面拼接在句子后并隔开:

$$ \text{[CLS]}+\text{sentence}+\text{[SEP]}+\text{aspect}+\text{[SEP]} $$

但本文的YORO可以一次预测所有方面的情感极性,就不需要做这样的拼接了,直接将句子输入文本编码器即可:

$$ \text{[CLS]}+\text{sentence}+\text{[SEP]} $$

Constituency-oriented Graph

成分解析树示意图

以往的工作大多使用单词关系解析树来构建图,这种单词关系解析树中与目标方面直接关联的单词较为局限,使得图卷积过程中无法高效地捕捉信息。本文使用了一种成分解析树(constituency parsing tree),在这种解析树中,树的根节点表示整个句子,内节点表示短句,叶节点则表示单词,整体形成了句子->短句->单词的结构。

根据成分解析树,按四种关系类型建立图:

  1. aspect specific
  2. inter aspect
  3. globally shared
  4. opinion word

Aspect-specific

这一步主要是为了提取与当前方面相关的局部信息。本文认为这种局部信息需要从只出现了当前方面、且没有出现其他方面的短句中提取。

具体来说,通过从上往下遍历成分解析树,找到各个方面的aspect-specific phrase。

Inter-aspect

显然,除了当前单个方面的局部信息,方面间的信息也非常重要。例如,前文的例子中就有“but”这种逻辑词,可以体现方面间的情感极性对比关系。

具体来说,本文在各个方面的首个单词间建立边。

Globally-shared

经过上面两步后,还会剩些单词没有纳入图中。这些单词也会包含一些全局信息。具体来说,会将前两步中未连接的单词与每个方面的首个单词连接。

Opinion word

对于不属于任何方面的单词,若其存在于观点词字典中,则连接该词与最邻近的方面连接在一起。另外,不使用观点词字典中对于观点词的情感极性来辅助模型。

值得注意的是,当一个句子中只有一个方面时,只经过第一步就会得到一个全连接图,这是非常不利的。此时,转而按照下面的步骤对这个句子进行处理:

  1. 不使用整个句子作为aspect-specific phrase,而是往下找一层,即将成分解析树第一层(而不是第零层)中包含真实方面的phrase作为aspect-specific phrase
  2. 根据aspect-specific phrase的语法类别标签,在剩余的成分中选择具有相同标签的短句作为“伪方面”的aspect-specific phrase,并且将这个短句的首单词作为“伪方面”
  3. 对真实方面和伪方面进行aspect-specific relation与inter-aspect relation处理;再对剩余未纳入图的单词进行globally-shared和opinion word的处理

Relational Graph Convolutional Network

先使用上述步骤生成的关系定义邻接矩阵,其中的\(w_i, w_j\)分别表示句子中的第i、第j个单词:

$$ \begin{aligned} D_{ij} = \begin{cases} 1, & \text{if } (w_i, w_j) \in Rel \\ 1, & \text{if } i = j \\ 0, & \text{otherwise} \end{cases}\\\\ \text{Rel} \in \{\text{AS}, \text{IA}, \text{GS}, \text{OW}\} \end{aligned} $$

接着再考虑上constituency tree中的syntactic distance(SD),进一步更新邻接矩阵为\(A\),其中的\(p\)就是位置权重

$$ \begin{aligned} A_{ij} = \begin{cases} 1 + p_{ij}, & \text{if } (w_i, w_j) \in \text{Rel} \\ 1, & \text{if } i = j \\ 0, & \text{otherwise} \end{cases}\\\\ p_{ij} = 1 - \frac{\text{SD}(w_i, w_j)}{\max\limits_{k=0}^{n} \text{SD}(w_i, w_k) + 1} \end{aligned} $$

接着就可以定义多层的卷积网络,文本将此网络称为constituency-oriented relational graph convolutional network (CorrGCN)。其中的\(N_i^r\)表示节点i在关系r下的所有邻居节点,\(\hat{A}=\hat{D}^{-\frac{1}{2}}A\hat{D}^{-\frac{1}{2}}\)是按行标准化后的\(A\)\(W_r^{(l)}\)是用于学习关系的可训练权重,\(W_s^{(l)}\)是用于学习自环关系的可训练权重,\(\sigma\)代表ReLU:

$$ h_i^{(l+1)} = \sigma \left( \sum_{r \in R} \sum_{j \in N_i^r} \hat{A} W_r^{(l)} h_j^{(l)} + W_s^{(l)} h_i^{(l)} \right) $$

Output Layer Module

在输出结果时,本文还借鉴了多任务学习的思想,将方面词的情感极性预测和非方面词(称为上下文词context/opinion word)的情感极性预测视为两个任务。最终的预测通过下面的公式得出,其中的a和c分别表示方面词和上下文词:

$$ \begin{aligned} H_a = [h_0^a, h_1^a, h_2^a, \ldots, h_m^a]\\ H_c = [h_0^w, h_1^w, h_2^w, \ldots, h_o^w]\\ y_a = \text{softmax}(W_a H_a + b_a)\\ y_c = \text{softmax}(W_c H_c + b_c) \end{aligned} $$

下面是方面词主任务和上下文词辅助任务的损失函数:

$$ \begin{aligned} L_{\text{asp}} = -\frac{1}{N} \sum_{i=1}^{N} \frac{1}{M} \sum_{j=1}^{M} \sum_{k=1}^{C} y_{ij,k}^a \log(\hat{y}_{ij,k}^a)\\\\ L_{\text{opi}} = -\frac{1}{N} \sum_{i=1}^{N} \frac{1}{M'} \sum_{j=1}^{M'} \sum_{k=1}^{C} y_{ij,k}^c \log(\hat{y}_{ij,k}^c) \end{aligned} $$

还引入了一个监督对比损失,对于当前mini batch B中的某个方面\(i\),遍历同一mini batch中的其他方面\(c\),其中的\(C(i)\)表示与方面i具有同样情感极性的方面数量,\(z\)为对应方面的向量表示:

$$ L_{\text{sup}} = - \sum_{i \in B} \frac{1}{C(i)} \sum_{y_i = y_c, c \neq i} \frac{\exp(z_i \cdot z_c / \tau)}{\sum_{b \in B, b \neq i} \exp(z_i \cdot z_b / \tau)} $$

最终的总损失为,其中的\(\Theta\)为所有可训练参数,需要对其做L2正则化,\(\alpha,\lambda\)均为超参:

$$ L = L_{\text{asp}} + L_{\text{opi}} + \alpha L_{\text{sup}} + \lambda ||\Theta||^2 $$

实验结果

在三个数据集上进行了性能测试和消融实验,结果如下:

模型性能结果

模块消融结果