Deep Memory Network在Aspect Based Sentiment方向上的应用

前面的博文Deep Memory Network 深度记忆网络已经非常详细地介绍了该种网络架构,下面我们来研究一下其在基于方面的情感分类的应用。Aspect Based Sentiment是一种细粒度的情感分析问题,一个句子中可能有多个aspect,并且这些aspect的极性可能是不一样的。该任务来自SemEval-14 task 4,要求正确预测所有aspect的极性。基于方面的情感分析,以下全部使用简称ABSA。

Aspect Level Sentiment Classification with Deep Memory Network

首先介绍的第一篇论文来自哈工大(EMNLP 2016),现在被所有的ABSA论文作为baseline模型。
在这里插入图片描述
这应该是第一篇采用Deep Memory Network来实现ABSA的工作。他们使用的模型如上图所示,是一个三跳(层)的记忆网络。该模型把sentence当作passage,aspect当作question。值得注意的是,aspect可能包含多个词,在多个词的条件下,原论文会对所有词的词向量求和取平均作为该aspect的表示。

论文中的外置记忆 m m m由Context Word的词向量表示拼接而成,其中不包括Aspect的表示。

模型主要包括两大部分,Attention layer和Linear layer。在Attention Layer中,模型将aspect向量作为输入,以此为依据在记忆m中选择重要的evidences。线性层则执行一种线性变换以提高效果。原论文在层与层之间共享了attention layer以及linear layer的参数,即之前博文Deep Memory Network 深度记忆网络提到的Layer-wise架构,线性变换能提高效果也是该架构提出者发现的。

Attetnion Layer

Attention Layer主要计算两种形式Attention:Content Attention和Location Attention。

  • Content Attention:是以记忆网络的attention形式计算sentence每一个词对于aspect的重要程度,比较直观;
  • Location Attention:用来衡量与aspect不同距离的词的重要程度。因为直观上看,离aspect越近的词越重要。

Content Attention

计算记忆中所有元素的加权之和( m i m_i mi融合距离信息的计算方式在下面):
v e c = ∑ i = 1 k α i m i vec=\sum_{i=1}^k\alpha_im_i vec=i=1kαimi

其中 α i \alpha_i αi是每个元素的权重,本质上是一种attention,计算方式如下:
g i = t a n h ( W a t t [ m i ; v a s p e c t ] + b a t t ) g_i=tanh(W_{att}[m_i;v_{aspect}]+b_{att}) gi=tanh(Watt[mi;vaspect]+batt) α i = e x p ( g i ) ∑ j = 1 k e x p ( g j ) \alpha_i=\frac{exp(g_i)}{\sum_{j=1}^k exp(g_j)} αi=j=1kexp(gj)exp(gi)
作者认为该attention有两种优势:

  1. 可以根据记忆元素 m i m_i mi和aspect的语义相关程度来适应性地分配重要性得分。
  2. 可微,因此易于以端到端的方式实现。

Location Attention

作者在论文中一共提出了四种方式来计算location Attention。

  • 方式1:
    m i = e i ⊙ v i m_i=e_i \odot v_i mi=eivi
    v i k = ( 1 − l i / n ) − ( k / d ) ( 1 − 2 × l i / n ) v_i^k=(1-l_i/n)-(k/d)(1-2\times l_i/n) vik=(1li/n)(k/d)(12×li/n)
    其中 e i e_i ei是词 w i w_i wi的embedding, n n n是句子长度, k k k是跳数, l i l_i li是词 w i w_i wi在句子中的的位置。

  • 方式2:
    v i = 1 − l 1 / n v_i = 1-l_1/n vi=1l1/n
    即方式1的简化版本。

  • 方式3:
    m i = e i + v i m_i=e_i+v_i mi=ei+vi
    把距离信息当作是参数,与embedding求和。

  • 方式4:
    m i = e i ⊙   σ ( v i ) m_i=e_i \odot\ \sigma(v_i) mi=ei σ(vi)
    在距离表示上添加一个门控单元来控制写入记忆中的单词语义的量。
    在这里插入图片描述四种方式区别见上图

Multiple Hops

至于为什么是多跳,作者解释说多层能捕捉到多个层级的抽象信息。由于模型在一层计算的是加权平均,单层不能解决复杂的如否定(negative)、加强(intensification)、对比(contraction)等复杂的语言信息。多层可以学习到不同级别的文本抽象信息,能以更高、更抽象的级别获取表示。

Aspect Level Sentiment Classification

作者使用的loss函数是cross entropy,这个就不作解释了。
l o s s = − ∑ ( s , a ) ∈ T ∑ c ∈ C P c g ( s , a ) ⋅ l o g P c g ( s , a ) loss=-\sum_{(s,a)\in T}\sum_{c\in C}P_c^g(s,a) \cdot logP_c^g(s,a) loss=(s,a)TcCPcg(s,a)logPcg(s,a)

Deep Mask Memory Network with Semantic Dependency and Context Moment for Aspect Level Sentiment Classification

下面介绍的这篇论文来自IJCAI-2019,其结果也是目前非Bert模型中已发表论文的最高水平。这个模型相较于上面那一篇要复杂很多,是一篇名副其实的IJCAI论文。

这篇论文较于上一篇的改进之处在于:

  1. 整合了语义分析信息到记忆网络中而不是位置信息
  2. 设计了辅助任务来学习整个句子的情感分布,这可以为目标aspect的情感分类提供想要的背景信息。

该论文提出模型被称作deep mask memory network with semantic dependency and context moment (DMMN-SDCM)。它基于记忆网络,引入语义分析信息来指导attention机制并有效学习其他aspect(非目标aspect)提供的信息。同时论文提出的context moment嵌入到了整个句子的情感分类,被设计用于为目标aspect提供背景信息。

模型主要包括以下三个部分:

  • the semantic-dependency mask attention
  • the inter-aspect semantic modeling
  • the context-moment sentiment learning
  • 除此之外还有基础的的embedding模块、memory building模块、实现分类的classification模块。
    在这里插入图片描述DMMN-SDCM整体架构

Embedding模块没有什么可讲的。

Memory Building模块使用一个双向的LSTM网络来获取记忆 m 1 ∗ , m 1 2 , . . . , m n ∗ {m_1^*,m_1^2,...,m_n^*} m1,m12,...,mn,其中 m i ∗ = ( h i ← , h i → ) m_i^*=(\overleftarrow{h_i},\overrightarrow{h_i}) mi=(hi ,hi )

The semantic-dependency-mask attention模块提取语义信息,并且为不同层选择不同的记忆元素来指导attention机制,该模块的输出记作 v s d v_{sd} vsd

The inter-aspect semantic modeling模块使用语义依赖信息和attention机制来获取其他aspect的有用信息,其输出记为 v i m v_{im} vim

The context-moment sentiment learning使用一个被称为context moment learning的任务来学习整个句子中所有aspect的信息,其输出记为 v c m v_{cm} vcm

以上三个模块的输出构成了sentiment representation: v = { v s d , v i m , v c m } v=\{ v_{sd}, v_{im}, v_{cm}\} v={vsd,vim,vcm}

Classification模块就是一个前馈网络,将 v v v映射到目标分类: y = s o f t m a x ( W c v + b c ) y=softmax(W_cv+b_c) y=softmax(Wcv+bc)

文中使用的loss包含三个部分,交叉熵+辅助任务loss+ L 2 L_2 L2正则:
L = ∑ s ∈ S ( − ∑ t ∈ T ∑ i = 1 C ) g i t l o g y i t + λ m l m ( s ) + λ ∥ θ ∥ 2 2 L=\sum_{s\in S}(-\sum_{t\in T}\sum_{i=1}^C)g_i^tlogy_i^t+\lambda_ml_m(s) + \lambda \left \| \theta \right \|^2_2 L=sS(tTi=1C)gitlogyit+λmlm(s)+λθ22
辅助任务的loss稍后介绍。

Semantic-Dependency-Mask Attention

该模块依据语义依存分析树(semantic dependency parsing tree),来对不同计算跳数的context memory施加mask。在每一个计算步骤,该模块在aspect的表示和记忆单元之间使用attention机制。

语义分析树使用开源工具spaCy生成。

原作者将语义分析树上词到aspect的路径长度作为距离,来提取语义分析信息。施加掩码的语义分析信息如下:
m i ∗ = { m i ∗ ,   i f   d i s t ( w i , w t ) ≤ l 0 ,   o t h e r w i s e m_i^*=\begin{cases} m_i^*, \ if \ dist(w_i,w_t) \leq l \\ 0, \ otherwise \end{cases} mi={mi, if dist(wi,wt)l0, otherwise

以上述方式得到整个层的 { m 1 l , . . . , m i l , . . . , m n l } \{m_1^l,...,m_i^l,...,m_n^l\} {m1l,...,mil,...,mnl}之后,以如下形式计算 l l l层的attention得分:
α i l = s o f t m a x ( W A L l ( m i l , v s d l − 1 , v t ) + b A L l ) \alpha_i^l = softmax(W_{AL}^l(m_i^l,v_{sd}^{l-1},v_t)+b_{AL}^l) αil=softmax(WALl(mil,vsdl1,vt)+bALl)
其中 v s d v_{sd} vsd是上一层的计算结果, v t v_t vt是aspect的表示。
attention输出 i l A L i_l^{AL} ilAL以如下方式进行计算:
i l A L = ∑ i = 1 n α i l m i l i_l^{AL}=\sum_{i=1}^n\alpha_i^lm_i^l ilAL=i=1nαilmil

在最后一层,作者采用另一个先行层来施加线性变换,作为一个门控函数来控制传递的转化特征和输入特征的比例:
v s d l = ( W o i l A L + b o ) ∗ T + v s d l − 1 ∗ ( 1 − T ) v_{sd}^l=(W_oi_l^{AL}+b_o)*T+v_{sd}^{l-1}*(1-T) vsdl=(WoilAL+bo)T+vsdl1(1T)

门控 T T T由以下方式生成:
T = σ ( W t v s d l − 1 ) + b t T=\sigma(W_tv_sd^{l-1})+b_t T=σ(Wtvsdl1)+bt

Inter-Aspect Semantic Modeling

在这里插入图片描述
该模块将上一步得到的语义依存信息整合到attention机制。上一个模块得到了所有aspect的aspect-aware representation,组成了如下所示的aspect menory:
M = { v s d 1 , v s d 2 , . . . , v s d 3 } M=\{v_{sd1},v_{sd2},...,v_{sd3}\} M={vsd1,vsd2,...,vsd3}
在此基础之上,为了得到aspect memory里面目标aspect的信息,再次使用依存分析信息进行了加权:
M ′ = { v s d 1 ′ , v s d 2 ′ , . . . , v s d 3 ′ } M'=\{v'_{sd1},v'_{sd2},...,v'_{sd3}\} M={vsd1,vsd2,...,vsd3}
其中 v s d 1 ′ = λ i ∗ ( v s d i , v s d t ) v'_{sd1}=\lambda_i*(v_{sd_i},v_{sd_t}) vsd1=λi(vsdi,vsdt) λ i \lambda_i λi由以下方式计算而来:
λ i = 1 − d i s t ( w i , w t ) d e p t h \lambda_i=1-\frac{dist(w_i,w_t)}{depth} λi=1depthdist(wi,wt)
其中 d i s t ( w i , w t ) dist(w_i,w_t) dist(wi,wt)是语义距离(笔者认为是依存分析树上的距离), d e p t h depth depth是依存分析树的高度,这些都make sense。

然后再次使用attention机制,来得到最终表示 v i m v_{im} vim
β i = s o f t m a x ( W i m v s d i ′ ) + b i m \beta_i=softmax(W_{im}v'_{sd_i})+b_{im} βi=softmax(Wimvsdi)+bim
v i m = ∑ i p β i ∗ v s d i ′ v_{im}=\sum_i^{p}\beta_i*v'_{sd_i} vim=ipβivsdi

Context-Moment Sentiment Learning

该模块实现辅助任务,目的是想借助aspect之间的关系来识别其极性。作者认为这种关系能为分类提供背景信息。moment实际上刻画的是所有aspect在句子s上的情感分布,它是概率统计学上的矩的意思。

Context Moment定义如下:
μ i = E ( ( x − μ ) i ) \mu_i=\textbf{E}((\textbf{x}-\mu)^i) μi=E((xμ)i)
其中 E \textbf{E} E是一个期望操作符, x x x是情感分布随机变量, i i i代表当前矩的阶。很明显, i i i是奇数时, μ i ∈ [ − 1 , 1 ] \mu_i\in[-1, 1] μi[1,1] i i i是偶数时, μ i ∈ [ 1 , 0 ] \mu_i\in[1, 0] μi[1,0],为了统一,作者也将所有的moment归一化到了 [ 1 , 0 ] [1, 0] [1,0]
在这里插入图片描述
论文中给出的一个示例,平均值被称为第一矩,方差被称为第二矩。平均值越高,说明整个句子的情感倾向越靠近postive。方差越接近1,说明句子里aspect之间越接近与对比关系(即一个aspect很差,另一个很好,或者反之;越接近0说明句子里的aspect直接的关系越接近于合作关系(它们极性越接近)。

作者再次使用了attention层再加上两层的前馈网络来学习表示mean的矩和表示variance的矩。附加任务使用的loss如下:
l m ( s ) = ∑ i = 1 k μ i l n ( u i ′ ) + ( 1 − μ i ) l n ( 1 − u i ′ ) l_m(s)=\sum_{i=1}^k\mu_iln(u'_i)+(1-\mu_i)ln(1-u'_i) lm(s)=i=1kμiln(ui)+(1μi)ln(1ui)
其中 k k k表示使用的moment的最高阶(读到这里笔者可以断定moment表示的不是时刻,而是矩的意思,参见矩估计)。

论文中将前述的第一矩和第二矩作为学习目标。
第一矩由以下方式得到:
v m e a n = W μ 1 v s 1 v_{mean}=W_{\mu1}v_s^1 vmean=Wμ1vs1 μ 1 ′ = s i g m o i d ( W μ 1 ( v m e a n ; v g l o b a l ) ) \mu_1'=sigmoid(W_{}\mu_1(v_{mean};v_{global})) μ1=sigmoid(Wμ1(vmean;vglobal))
其中 v g l o b a l v_{global} vglobal由前面介绍的Semantic-Dependency-Mask Attention在一个句子上的所有aspect的输出取平均得到:
v g l o b a l = 1 p ∑ i p v s d i v_{global}=\frac{1}{p}\sum_i^pv_{sd_i} vglobal=p1ipvsdi

v v a r i a n c e v_{variance} vvariance以上述同样的方式计算得来,两者堆起来构成了模块的最终输出:
v c m = ( v m e a n , v v a r i a n c e ) v_{cm}=({v_{mean}, v_{variance}}) vcm=(vmean,vvariance)
模型的最终效果以及各部分的贡献可以参见下表:
在这里插入图片描述
这篇论文实现的模型非常的复杂,是一篇名副其实的顶会论文,值得仔细去读一读。作者三次attention机制的使用,引入语法分析工具得到语义信息之后辅助任务的添加,等等思想非常值得借鉴。

posted @ 2020-03-11 17:25  从流域到海域  阅读(193)  评论(0编辑  收藏  举报