ATT-CNN(attention based CNN)

发布于:2021-12-04 00:24:44



ATT-CNN文本分类,论文解读(Attention-based Convolutional Neural Networks for Sentence Classification)
Attention-based CNN1. Basic CNN2. ATT-CNN




作者: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





Ain R ^ {l imes 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, ag 1


A=[x1?,x2?,x3?,...,xi?,...,xl?]T,(1)
其中





x


i







R


d




x_iin R^d


xi?∈Rd对应着句子中第




i



i


i个词的




d



d


d维词向量。接下来在一个宽度为




n



n


n(




n



n


n个词)的滑窗上进行卷积操作。具体来说,该操作采用filter




W






R



n


d


×


h





Win R^{nd imes 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(Wcdot x_{i:n} + b), ag 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_ioplus 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
eq i} alpha_{i,j} cdot x_j , ag3


gi?=j??=i∑?αi,j??xj?,(3)
其中





α



i


,


j





alpha_{i,j}


αi,j?被称为attention权重,要求




α


?


0



alphageqslant0


α?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'}))}, ag4


α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_ioplus x_j]), ag5


score(xi?,xj?)=vaT?tanh(Wa?[xi??xj?]),(5)
其中score值由上面提到的MLP来计算。简单来说,我们使用这个MLP来模拟单词对




(



x


i



,



x



j


,


j





i




)



(x_i,x_{j,j
eq i})


(xi?,xj,j??=i?)的相关性。 并且那些具有较大score值的





x



j


,


j





i





x_{j,j
eq 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机*嗟淖⒁饬性趎ot和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 )^kcdot score(x_i,x_j), ag6


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 ag7


xi′?=xi??gi?(7)


代码地址

相关推荐

最新更新

猜你喜欢