ATT-CNN文本分类,论文解读(Attention-based Convolutional Neural Networks for Sentence Classification)
作者:sigma_Tian
来源:CSDN
原文:https://blog.csdn.net/tcx1992/article/details/80118443
版权声明:本文为博主原创文章,转载请附上博文链接!
NLP问题中,现有的关于attention机制的研究大多是对不同句子之间的相关性进行建模,如机器翻译中源语言与目标语言之间的词对齐以及问答中question与answer之间的词语相似性。 对句子中单词之间相关性的研究很少。在此文中,作者提出了一种attention based CNN(ATT-CNN),其中attention机制的作用是,在没有任何外部语法信息的情况下自动捕获非连续词的上下文信息和关系。
Attention-based CNN
首先介绍一下通用的CNN,在文本分类中也叫TextCNN。在此基础上介绍ATT-CNN
1. Basic CNN
BasicCNN模型通常先用向量表示(word embedding,如word2vec)替换句子中的每个单词,并创建句子矩阵
A
∈
R
l
×
d
A\in R ^ {l \times d}
A∈Rl×d ,其中
l
l
l是句子长度(zero-padded),
d
d
d是embedding的维度。
(1)
A
=
[
x
1
,
x
2
,
x
3
,
.
.
.
,
x
i
,
.
.
.
,
x
l
]
T
,
A=[x_1,x_2,x_3,...,x_i,...,x_l]^T, \tag 1
A=[x1,x2,x3,...,xi,...,xl]T,(1)
其中
x
i
∈
R
d
x_i\in R^d
xi∈Rd对应着句子中第
i
i
i个词的
d
d
d维词向量。接下来在一个宽度为
n
n
n(
n
n
n个词)的滑窗上进行卷积操作。具体来说,该操作采用filter
W
∈
R
n
d
×
h
W\in R^{nd\times h}
W∈Rnd×h与句子中的每个n-gram之间的点积来获得另一序列
c
c
c,
c
c
c由一系列从以下公式计算的
h
h
h维向量
c
i
c_i
ci组成:
(2)
c
i
=
f
(
W
⋅
x
i
:
n
+
b
)
,
c_i=f(W\cdot x_{i:n} + b),\tag 2
ci=f(W⋅xi:n+b),(2)
其中
f
f
f为非线性激活函数,如ReLU(rectified linear unit)、sigmoid等,
x
i
:
n
x_{i:n}
xi:n由
n
n
n个词向量拼接而成:
x
i
:
n
=
x
i
⊕
x
i
+
1
⊕
.
.
.
⊕
x
i
+
n
−
1
x_{i:n}=x_i\oplus x_{i+1} \oplus ...\oplus x_{i+n-1}
xi:n=xi⊕xi+1⊕...⊕xi+n−1。最后对
c
c
c进行max pooling操作,后接一个全连接softmax层,其输出即为各标签的概率分布。
BasicCNN难以捕获长期的上下文信息和非连续词之间的相关性。这种弱点在dependency-based CNN中得以部分克服,但在实际使用中它总是需要额外的资源来获得良好的依赖树,例如口语处理。 一种新的基于注意力机制的CNN可以用来缓解这个问题。
2. ATT-CNN
图1展示了ATT-CNN模型的架构。 如图1所示,在输入层和卷积层之间引入了attention层。 具体地,attention层是为每个单词创建上下文向量。 上下文向量与单词向量拼接,作为单词新的表示,将其输入到卷积层。 直观来看,一对彼此远离的词往往联系较少。 因此,可以考虑将距离衰减添加到注意机制中。
attention机制的思想是在导出
x
i
x_i
xi的上下文向量
g
i
g_i
gi时学习将注意力集中在特定的重要单词上。 图1中的红色矩形表示
g
i
g_i
gi。注意机制是另外的MLP,与ATT-CNN的所有其他组件共同训练。 当预测句子类别时,该机制确定哪些单词应该比句子上的其他单词更受关注。 打分后的单词以加权和组合:
(3)
g
i
=
∑
j
≠
i
α
i
,
j
⋅
x
j
,
g_i=\sum_{j\neq i} \alpha_{i,j} \cdot x_j ,\tag3
gi=j̸=i∑αi,j⋅xj,(3)
其中
α
i
,
j
\alpha_{i,j}
αi,j被称为attention权重,要求
α
⩾
0
\alpha\geqslant0
α⩾0且
∑
j
α
i
,
j
⋅
x
j
=
1
\sum_j \alpha_{i,j} \cdot x_j=1
∑jαi,j⋅xj=1,这里可通过softmax 规范化来实现。描述attention机制的公式如下:
(4)
α
i
,
j
=
e
x
p
(
s
c
o
r
e
(
x
i
,
x
j
)
)
∑
j
′
e
x
p
(
s
c
o
r
e
(
x
i
,
x
j
′
)
)
,
\alpha_{i,j}=\frac{exp(score(x_i,x_j))}{\sum_{j'}exp(score(x_i,x_{j'}))},\tag4
αi,j=∑j′exp(score(xi,xj′))exp(score(xi,xj)),(4)
(5)
s
c
o
r
e
(
x
i
,
x
j
)
=
v
a
T
t
a
n
h
(
W
a
[
x
i
⊕
x
j
]
)
,
score(x_i,x_j)=v_a^Ttanh(W_a[x_i\oplus x_j]),\tag5
score(xi,xj)=vaTtanh(Wa[xi⊕xj]),(5)
其中score值由上面提到的MLP来计算。简单来说,我们使用这个MLP来模拟单词对
(
x
i
,
x
j
,
j
≠
i
)
(x_i,x_{j,j\neq i})
(xi,xj,j̸=i)的相关性。 并且那些具有较大score值的
x
j
,
j
≠
i
x_{j,j\neq i}
xj,j̸=i在上下文向量
g
i
g_i
gi中占有更多权重。
图1: ATT-CNN网络结构;在attention层,虚线对应着公式(4)-(5), 实线对应着公式(3),点划线为复制操作
以情绪分类中的以下句子为例:
There’s not one decent performance from the cast and not one clever line of dialogue.
当我们在这个句子中学习单词performance的上下文向量时,attention机制将更多的注意力集中在not和decent的单词上。 特别是,score(performance, not)和score(performance, decent)预计会比其他单词对更大。
此外,我们引入衰减因子
λ
∈
[
0
,
1
]
λ∈[0,1]
λ∈[0,1]作为score函数输出的惩罚,以减少随着句子长度增长而产生的噪声信息的影响。
(6)
s
c
o
r
e
(
x
i
,
x
j
)
=
(
1
−
λ
)
k
⋅
s
c
o
r
e
(
x
i
,
x
j
)
,
score(x_i,x_j)=(1-\lambda )^k\cdot score(x_i,x_j),\tag6
score(xi,xj)=(1−λ)k⋅score(xi,xj),(6)
其中
k
=
∣
j
−
i
∣
−
1
k=|j-i|-1
k=∣j−i∣−1。当我们设定
λ
→
0
λ→0
λ→0时,将考虑更广范围的上下文; 而如果我们增加λ使其接近1,则只考虑局部范围内的上下文。
最后,我们将
x
i
x_i
xi的扩展词向量
x
i
′
x_i'
xi′定义为
x
i
x_i
xi及其上下文向量的串联,然后使用
x
i
′
x_i'
xi′更新句子矩阵A,它将被送入上文提到的BasicCNN中。
(7)
x
i
′
=
x
i
⊕
g
i
x_i'=x_i \oplus g_i\tag7
xi′=xi⊕gi(7)