GCN For ABSA论文内容整理
BERT4GCN
标题:BERT4GCN: Using BERT Intermediate Layers to Augment GCN for Aspect-based Sentiment Classification
摘要: 基于图的基于方面的情感分类(ABSC)方法已经取得了最先进的结果,特别是当使用了从训练前语言模型(PLMs)得到的上下文词嵌入时。然而,它们忽略了上下文的顺序特性,并没有充分利用PLMs。在本文中,我们提出了一个新的模型,它集成了来自BERT的PLM的语法顺序特性和来自依赖图的语法知识。BERT4GCN利用BERT中间层的输出和单词之间的位置信息来增强GCN,以更好地编码依赖图进行下游分类。实验结果表明,本文提出的BERT4GCN优于所有最先进的baselines,证明了用BERT的中间层语法特征增强GCN可以显著增强ABSC模型。
目录
ASGCN
1. GCN层
在介绍BERT4GCN的设计之前,让我们看看以前的一些其他GCN是怎么做的。
ASGCN1(EMNLP2019)这是本文使用的一个Baseline——ASGCN,这篇论文对图卷积层作了很好的定义:
h
i
l
=
σ
(
∑
j
=
1
k
A
i
j
W
l
h
j
l
−
1
+
b
l
)
h_i^l = \sigma(\sum^{k}_{j=1}{A_{ij}W^lh_j^{l-1}} +b^l)
hil=σ(j=1∑kAijWlhjl−1+bl)
其中h代表多个连续GCN层的隐状态,对于一个L-层的GCN,
h
i
L
h_i^L
hiL就是节点 i 的最终输出,A是图的邻接矩阵,W表示一个可训练的线性变换权重,b表示一个可训练的偏置项,网络如下图所示
看到这里我们可以理解文本GCN和CNN的主要区别在于对节点(token)特征的组合方式更加灵活,也就是说CNN只是按照固定的窗口大小组合位置相近的词,而GCN利用语法树(图的信息)组合在语义上关系近的词。
2. 模型设计
(1)输入层
输入层将每个单词token在低维实值向量空间中进行嵌入表示(源代码中使用了glove300维词向量,BERT4GCN一文中也用BERT词向量作为输入进行了对比)。作者对输入进行了如下的设计:
首先是将给定n词句子表示为
c
=
{
w
1
c
,
w
2
c
,
.
.
.
,
w
τ
+
1
c
,
.
.
.
,
w
τ
+
m
c
,
.
.
.
,
w
n
−
1
c
,
w
n
c
}
c = \{ w_1^c, w_2^c,...,w_{\tau+1}^c,...,w_{\tau+m}^c,...,w_{n-1}^c, w_n^c \}
c={w1c,w2c,...,wτ+1c,...,wτ+mc,...,wn−1c,wnc},其中
τ
+
1
\tau +1
τ+1 到
τ
+
m
\tau +m
τ+m 是长度为m的方面对象,其他则视为上下文;利用句子词嵌入,构造双向LSTM来产生隐藏状态向量 。
(2)针对aspect-base进行改造
给定句子的依赖树是一个有向图,虽然GCN通常不考虑方向,但也可以调整为适应方向图的版本,因此在构造邻接矩阵时有两个方案:有向(ASGCN-DT)或无向(ASGCN-DG),相比之下有向方案的邻接矩阵更加稀疏;
以前的工作广泛采用一个分配位置权重的函数用于增强上下文中接近aspect的词的重要性,通过这样做,来减少依赖解析过程中可能自然产生的噪声和偏差,具体表示为
q
i
=
{
1
−
τ
+
1
−
i
n
1
≤
i
<
τ
+
1
0
τ
+
1
≤
i
≤
τ
+
m
1
−
i
−
τ
−
m
n
τ
+
m
<
i
≤
n
q_i = \begin{cases} 1-\frac {\tau+1-i}{n} & 1\le i<\tau+1 \\ 0 & \tau+1 \le i \le \tau+m \\ 1-\frac {i-\tau-m}{n} & \tau+m < i \le n \\ \end{cases}
qi=⎩⎪⎨⎪⎧1−nτ+1−i01−ni−τ−m1≤i<τ+1τ+1≤i≤τ+mτ+m<i≤n
通过多层GCN,以一种既考虑句法依赖又考虑长期多词关系的方式来感知方面周围的上下文。此外,遵循Kipf和Welling(2017)中的自循环思想,每个单词与自身的邻接值手动设置为1,即A的对角线值均为1,然后通过带归一化因子(*保证特征分布的稳定)的图卷积运算更新每个节点的表示,具体更新过程如下
h
~
i
l
=
∑
j
=
1
n
A
i
j
W
l
g
j
l
−
1
h
i
l
=
R
e
L
U
(
h
~
i
l
/
(
d
i
+
1
)
+
b
l
)
g
i
l
=
F
(
h
i
l
)
\tilde{h} _i^l = \sum^{n}_{j=1}{A_{ij}W^l g_j^{l-1}} \\ h_i^l = ReLU( \tilde{h}_i^l /(d_i + 1) + b^l) \\ g_i^l = F(h_i^l)
h~il=j=1∑nAijWlgjl−1hil=ReLU(h~il/(di+1)+bl)gil=F(hil)
其中,
d
i
=
∑
j
=
1
n
A
i
j
d_i = \sum_{j=1}^n A_{ij}
di=∑j=1nAij是节点 i 的度,
F
(
h
i
l
)
=
q
i
h
i
l
F(h_i^l) = q_ih_i^l
F(hil)=qihil
(3)聚焦方面词——Aspect-specific Masking
这一层定义为
h
t
L
=
0
1
≤
t
<
τ
+
1
,
τ
+
m
<
t
≤
n
h_t^L = 0 \quad 1\le t<\tau+1, \tau+m < t \le n
htL=01≤t<τ+1,τ+m<t≤n,通过这一层屏蔽掉 non-aspect 单词的隐藏状态向量,并使aspect单词的状态保持不变。
(4)Aspect-aware Attention
注意力分数的计算方式为
β
t
=
∑
i
=
1
n
h
t
c
⊤
h
i
L
=
∑
i
=
τ
+
1
τ
+
m
h
t
c
⊤
h
i
L
α
t
=
e
x
p
(
β
t
)
∑
i
=
1
n
e
x
p
(
β
i
)
\beta_t = \sum_{i=1}^n {h_t^{c\top}h_i^L} = \sum_{i=\tau+1}^{\tau+m} {h_t^{c\top}h_i^L} \\ \alpha_t = \frac {exp(\beta_t)}{\sum_{i=1}^n exp(\beta_i)}
βt=i=1∑nhtc⊤hiL=i=τ+1∑τ+mhtc⊤hiLαt=∑i=1nexp(βi)exp(βt)
也就是用GCN得到的方面词表示和BiLSTM得到的完整句子表示计算注意力权重,最终的预测表示为
r
=
∑
t
=
1
n
α
t
h
t
c
r=\sum_{t=1}^n \alpha_th_t^c
r=∑t=1nαthtc,后接全连接层和softmax计算标签。
BERT+GCN
BERT4GCN的原文还提到,其中一个baseline BERT+GCN的图构建参考了下面这篇文章:SAGAT2 (COLING 2020),这一模型虽然没有直接采用GCN而是使用图Attention,但在消融实验中给出了GCN模型对比。这里,我们主要想学习一下SAGAT图的构建方法。
首先作者注意到,之前提出的几乎所有基于bert的模型都是在编码后通过平均池化合并子词,因为模型的后续层不能处理子词的结构,但不同子词的重要程度不同是一个显然的事实,因此作者希望把所有子词加入图中,后续用图Attention处理。构建的方法也很容易理解,首先输入的形式是: [CLS] 完整句子 [SEP] 方面词 [SEP],按照语法依赖构建边,将句子和方面词切割为子词后,用边将第一个子词和其他子词连接,如下图所示
BERT中间层 + GCN
最后我们步入正题介绍BERT4GCN的具体处理方法。
1、输入
BERT捕获了丰富的语言信息层次结构,不同的隐藏层其信息的“精度”与“侧重”有所不同,因此作者选取多个隐藏层丰富句子的表示。对于输入的句子,首先将每个单词映射到一个低维词向量,然后接BiLSTM获取隐藏状态。之后再处理为 [CLS] 完整句子 [SEP] 方面词 [SEP] 的形式输入BERT,取模型的1、5、9、12层作为增强特征,如果一个单词被分为若干子词,则只取第一个子词,得到得到GCN的增强特征G为
G
=
[
H
1
B
,
H
5
B
,
H
9
B
,
H
12
B
]
G = [H_1^B, H_5^B, H_9^B, H_{12}^B]
G=[H1B,H5B,H9B,H12B]
自注意机制能够捕捉单词之间的远距离依赖关系,Ganesh Jawahar等人的论文3也发现尽管BERT只使用了注意力机制,但是它的高层网络依然可以学习到文本中的组合结构。因此作者希望利用BERT中间层的注意力权重去修正、补充普通解析器得到的语法树。首先获取对应层的Attention权重
A
a
t
t
=
[
W
1
a
t
t
,
W
5
a
t
t
,
W
9
a
t
t
,
W
12
a
t
t
]
A^{att} = [W_1^{att} , W_5^{att} , W_9^{att} , W_{12}^{att} ]
Aatt=[W1att,W5att,W9att,W12att],其中每个W的维度是h×n×n,h为head的数量,接下来作者对head维度求平均得到该层的注意力表示
A
ˉ
l
a
t
t
\bar{A}^{att}_l
Aˉlatt,最后,如果注意权值大于或小于某个阈值(超参数),会在单词之间修剪或添加有向边。
A
l
,
i
,
j
s
u
p
=
{
1
α
≤
A
ˉ
l
,
i
,
j
a
t
t
A
i
,
j
β
<
A
ˉ
l
,
i
,
j
a
t
t
<
α
0
A
ˉ
l
,
i
,
j
a
t
t
≤
β
A^{sup}_{l,i,j} = \begin{cases} 1 & \alpha\le \bar{A}^{att}_{l,i,j} \\ A_{i,j} & \beta < \bar{A}^{att}_{l,i,j} < \alpha \\ 0 & \bar{A}^{att}_{l,i,j} \le \beta \\ \end{cases}
Al,i,jsup=⎩⎪⎨⎪⎧1Ai,j0α≤Aˉl,i,jattβ<Aˉl,i,jatt<αAˉl,i,jatt≤β
我们知道GCN需要两个输入:邻接矩阵和节点特征,而这里对每个token提取的若干层特征就是节点特征,利用Attention构建的补充依赖图就是邻接矩阵。
2、GCN over Supplemented Dependency Graph
在每一层的补充依赖图上应用GCN,输入R1融合了BERT隐藏状态与BiLSTM隐藏状态,Rk融合了BERT隐藏状态与前一GCN层输出的节点表示。如下所示:
R
1
=
R
e
L
U
(
G
1
W
1
)
+
H
R
k
=
R
e
L
U
(
G
k
W
k
)
+
O
k
−
1
O
l
,
i
=
R
e
L
U
(
1
d
i
∑
j
=
1
n
A
l
,
i
,
j
s
u
p
W
l
R
l
,
j
+
b
l
)
k
∈
{
2
,
3
,
4
}
,
l
∈
{
1
,
2
,
3
,
4
}
R_1 = ReLU(G_1W_1) + H \\ R_k = ReLU(G_kW_k) + O_{k-1} \\ O_{l,i} = ReLU(\frac{1}{d_i} \sum_{j=1}^n A^{sup}_{l,i,j} W^lR_{l,j} +b^l) \\ k \in \{2,3,4\},l \in \{1,2,3,4\}
R1=ReLU(G1W1)+HRk=ReLU(GkWk)+Ok−1Ol,i=ReLU(di1j=1∑nAl,i,jsupWlRl,j+bl)k∈{2,3,4},l∈{1,2,3,4}
GCN以平均的方式聚合相邻节点表示,忽略了原始上下文中的相对线性位置。为了解决这个问题,作者训练了一组相对位置嵌入P(大小为(2w+1)* d,w为窗口大小,超参)进行位置信息编码,相应卷积层的计算公式变为
O
l
,
i
=
R
e
L
U
(
1
d
i
∑
j
=
1
n
A
l
,
i
,
j
s
u
p
W
l
R
l
,
j
p
+
b
l
)
R
l
,
j
p
=
R
l
,
j
+
P
m
a
x
(
−
w
,
m
i
n
(
w
,
j
−
i
)
)
O_{l,i} = ReLU(\frac{1}{d_i} \sum_{j=1}^n A^{sup}_{l,i,j} W^lR_{l,j}^p +b^l) \\ R_{l,j}^p = R_{l,j} + P_{max(-w,min(w,j-i))}
Ol,i=ReLU(di1j=1∑nAl,i,jsupWlRl,jp+bl)Rl,jp=Rl,j+Pmax(−w,min(w,j−i))
这个式子表示,对于当前的中心词 i,如果词 j 落在左右w大小内,则使用
P
j
−
i
P_{j-i}
Pj−i位置嵌入,否则使用窗口边界的位置嵌入。
3、训练和实验结果
在获得了最后一层GCN后的单词表示后,作者将当前aspect term的表示进行平均,作为最终的隐藏特征表示,后接一个全连接层和一个softmax层得到概率表示,使用带L2正则项的交叉熵损失进行分类。实验结果如下:
BERT4GCN在所有三个数据集上优于所有其他基于BERT的模型,证明了用BERT中间层的语法特征增强GCN可以增强ABSC模型。作者对结果进行了如下分析:
(1)BERT vs. RoBERTa。RoBERTaMLP在Laptop和Restaurant数据集上的性能显著优于BERT-SPC,而在Twitter数据集上的结果与BERT-SPC相似,BERT4GCN和RoBERTa4GCN的比较中也观察到相同的模式。造成这种现象的一个可能原因是,两个PLM预先训练的语料库与Twitter数据集大不相同。因此,RoBERTa的优势并不能体现在Twitter这样的领域外数据集上;
(2)BERT-SPC vs. BERT-based models。我们可以看到BERT-SPC和
基于BERT的模型效果相差不多,说明模型体系结构工程在使用BERT时只起到边际作用;
(3)BERT-SPC vs. BERT4GCN。从实验结果观察,在Twitter数据集中,BERT4GCN相对于BERT-SPC的改进高于其他数据集。而RoBERTa系列中,RoBERTaMLP和RoBERTa4GCN的效果差不多,在Restaurant数据集上甚至前者还要更好。基于这种现象,作者提出两点猜想:一是BERT4GCN框架更灵活地处理领域外数据集,二是猜测当PLM足够强大时,在现有的模型框架下,无需在领域内数据集上进行繁重的模型架构工程。这两个猜想需要在今后的工作中进一步探索。
此外,作者消融实验得到一些其他结论,例如单独添加相对位置模块会产生负面影响,相对位置模块的效果只有在与补充依赖图模块结合时才能显示出来;通过统计Laptop和Restaurant数据集的方面和意见term之间的相对距离,发现虽然分布非常相似,但这两个数据集的最佳窗口大小并不相同,这意味着可能需要根据数据集谨慎地选取超参数。
4、结论
本文中,作者提出了一个BERT4GCN模型,该模型集成了来自BERT的语法序列特征和来自依赖图的语法知识。该模型利用包含丰富和有用的语言知识的BERT中间层来增强GCN,并结合词的相对位置信息进行位置感知。最后,实验结果表明,该模型取得了新的SOTA表现。
几个小问题
1、相对位置嵌入具体是如何训练的?因为文中是让中间层特征直接加上相对位置嵌入,再输入GCN,直觉来说权重应该是使用乘法得到;
2、本文模型有很多超参(Attention阈值、窗口大小等),应该怎么进行调试和选取?