zoukankan      html  css  js  c++  java
  • 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}^kalpha_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 imes 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_{cin 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_{sin S}(-sum_{tin T}sum_{i=1}^C)g_i^tlogy_i^t+lambda_ml_m(s) + lambda left | heta ight |^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^*=egin{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}^nalpha_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 eta_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}eta_i*v'_{sd_i} vim=ipβivsdi

    Context-Moment Sentiment Learning

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

    Context Moment定义如下:
    μ i = E ( ( x − μ ) i ) mu_i= extbf{E}(( extbf{x}-mu)^i) μi=E((xμ)i)
    其中 E extbf{E} E是一个期望操作符, x x x是情感分布随机变量, i i i代表当前矩的阶。很明显, i i i是奇数时, μ i ∈ [ − 1 , 1 ] mu_iin[-1, 1] μi[1,1] i i i是偶数时, μ i ∈ [ 1 , 0 ] mu_iin[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}^kmu_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机制的使用,引入语法分析工具得到语义信息之后辅助任务的添加,等等思想非常值得借鉴。

  • 相关阅读:
    linux ——process
    linux ipc—msgqueue
    JDEclipse源码查看
    用 AXIOM 促进 XML 处理
    使jets3t支持https
    正版太贵了……
    Axis2学习笔记 (Axiom 篇 )
    基于Hadoop的海量文本处理系统介绍
    详解ASP.NET MVC的请求生命周期
    .Net相关的资源连接
  • 原文地址:https://www.cnblogs.com/wanghongze95/p/13842431.html
Copyright © 2011-2022 走看看