自用深度记忆网络在方面级情感分析上的应用

Posted 王六六的IT日常

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了自用深度记忆网络在方面级情感分析上的应用相关的知识,希望对你有一定的参考价值。

参考: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_i m_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有两种优势:

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

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

  • 方式一:
    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 i / n v_i=1-l_i/n vi=1li/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 log P_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)

这篇论文来自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整体架构
    DMMN-SDCM整体架构
    Embedding模块没有什么可讲的。
    参考:苏剑林. (Dec. 03, 2016). 《词向量与Embedding究竟是怎么回事? 》

词向量,英文名叫Word Embedding,按照字面意思,应该是词嵌入。
词嵌入是一种语义空间到向量空间的映射,简单说就是把每个词语都转换为固定维数的向量,并且保证语义接近的两个词转化为向量后,这两个向量的相似度也高。

Embedding层就是以one hot为输入、中间层节点为字向量维数的全连接层!而这个全连接层的参数,就是一个“字向量表”!从这个层面来看,字向量没有做任何事情!它就是one hot,别再嘲笑one hot的问题了,字向量就是one hot的全连接层的参数!

Embedding 嵌入,我们可以将其理解为一种降维行为。可以将高维数据映射到低维空间来解决稀疏输入数据的问题
embedding层做了什么呢?
它把我们的稀疏矩阵,通过一些线性变换(在CNN中用全连接层进行转换,也称为查表操作),变成了一个密集矩阵,这个密集矩阵用了N个特征来表征所有的文字,在这个密集矩阵中,表象上代表着密集矩阵跟单个字的一一对应关系,实际上还蕴含了大量的字与字之间,词与词之间甚至句子与句子之间的内在关系他们之间的关系,用的是嵌入层学习来的参数进行表征。
从稀疏矩阵到密集矩阵的过程,叫做embedding,很多人也把它叫做查表,因为他们之间也是一个一一映射的关系。
更重要的是,这种关系在反向传播的过程中,是一直在更新的,因此能在多次epoch后,使得这个关系变成相对成熟,即:正确的表达整个语义以及各个语句之间的关系。这个成熟的关系,就是embedding层的所有权重参数。

Embedding是NPL领域最重要的发明之一,他把独立的向量一下子就关联起来了。
这就相当于你是你爸的儿子,你爸是A的同事,B是A的儿子,似乎跟你是八竿子才打得着的关系。结果你一看B,是你的同桌。Embedding层就是用来发现这个秘密的武器。