Aspect Level Sentiment Classification with Deep Memory Network

Motivation

首先,在当时之前存在的传统的机器学习方法中的SVM和传统的神经网络方法有着不小的弊端。大体和我在《Effective LSTMs for Target-Dependent Sentiment Classification》这篇博文中介绍的 Motivation(中的自我总结)部分相同。

其次,作者指出了 LSTM 的弊端,即 LSTM 虽然可以考虑到很多 context 信息,但是其不容易做到有侧重点(例如 sequence 中有的词对于 target sentimental classification 帮助不大,但是 LSTM 对 seqence 中的每个 word 只能做到一视同仁。尽管不同 wrod 会被记住或忘记,但是对每个 word 控制的规则是一样的)

任务定义

给一句话 s = w 1 , w 2 , … , w i , … w n s = {w_1,w_2,…,w_i,…w_n} s=w1,w2,,wi,wn,其中包含 n words 和一个 aspect word w i w_i wi(出现在 s 中,所以其是 aspect term 而非 aspect catagory)。

之后通过预测句子 s 的情感极性来当作该 aspect 的情感极性。

方法概述

作者的总体的思路是针对 aspect 找对于其最重要的 context 。

作者用的方法是 deep memory network,这种方法不仅不需要情感词典,甚至也不需要句法分析器。

方法详述

整体流程

首先给出作者提出的这个方法的示意图(Figure 1):

下面来说明该图:

  • 图左边部分,给定一个句子 s = w 1 , w 2 , … , w i , … w n s = {w_1,w_2,…,w_i,…w_n} s=w1,w2,,wi,wn 和 aspect word w i w_i wi,并获取每个 word 的 embedding vector 分别记为 e 1 , e 2 , … , e i , … e n e_1,e_2,…,e_i,…e_n e1,e2,,ei,en(因为实际情况中 aspect 可能不止一个单词,所以为了方便能都用 w i w_i wi 表示,在 aspect 为多个 word 的情况时,得到其中每个 word 的 embedding vector 之后求和取平均。),之后将这些 words 分为两部分—— aspect 部分和 context 部分,其中 context 部分的 word vectors { e 1 , e 2 , … , e i − 1 , e i + 1 , … e n } \{e_1,e_2,…,e_{i-1},e_{i+1},…e_n\} {e1,e2,,ei1,ei+1,en} 被合在一起作为外部记忆 m ∈ R d × ( n − 1 ) m ∈ R^{d×(n-1)} mRd×(n1)
  • 图右边部分实右多个计算层组成,每个计算层都是两路的,一路是 attention layer,另一路是 linear layer(作者加入 linear layer 的原因是实验结果驱动的,即加入了效果就是要好一点儿,也没什么理论依据)。
    • 在 hop 1 中作者利用 Attention mechinsm 来实现对外部记忆的内容寻址外部记忆,其中 aspect vector 作为 Attention 中的查询向量。之后将Attention layer 的结果和 aspect vector 经过 linear transformation(线性变换)之后的结果求和作为最终结果,并作为下一个 hop 的 input。
    • 之后按 hop1 同样的方式执行多次,这样可以使更多的外部记忆中的内容(context 内容)被选择。因为当第一次 context 中有的部分被送入 Attention 中,那么第二次查询时,查询向量就包含了一部分原本是 context 的内容,那么之后找到的内容肯定更多(因为查询中有 context 内容,所以能匹配的内容也更多)。
    • 最后,最后一层的 hop 的输出将作为整个句子的 represntation,用于情绪分类部分。
    • 补充:每个计算层(hop)中的参数是共享的,所以无论构建一个计算层还是多个计算层其参数量是相同的。

Attention 部分

Attention 部分包含 Content Attention(注意内容)和 Location Attention(注意地址)两部分。在分别介绍这两部分之前,我们需要知道作者是如何将这二者结合起来的。

首先我们知道 Attention 一般过程为用打分函数计算每个元素(在目前任务中即每个 word)与查询向量的匹配程度,归一化之后得到每个元素的权重,最后累加就得到一个最终表示(这个表示包含了所有元素信息,包含的每个元素的信息量是根据之前算得的权重得到的)。

那么现在问题来了,如果我们先进行了一个 attention 部分得到了一个最终表示,那么怎么再加入另一个 attention 部分呢?

作者的做法是,先做 Location Attention 部分,但是只进行到累加的前一步,即计算各个元素(word)与对应权重相乘之后不将它们加在一块儿。这样,我们得到的结果仍然是 n 个 vector(n 为句子长度),之后将这 n 个 vector 存入外部记忆中分别代表对应 word 的 vector。

之后再进行 Content Attention,即将刚刚得到的 n 个 vector 根据与 aspect 的匹配程度做 attention,这次得到最终表示,Attention 部分也到此结束。

Content Attention

Attention 的应用比较简单,即常用的使用方法,输入 aspect vector v a s p e c t ∈ R d × 1 v_{aspect} ∈ R^{d×1} vaspectRd×1 作为查询向量,来选择与处理外部记忆 m ∈ R d × k m ∈ R^{d×k} mRd×k (k 为 memory size)中的单词,以形成最后 attention 部分的输出向量 v e c ∈ R d × 1 vec ∈ R^{d×1} vecRd×1,对应公式如下:
v e c = ∑ i = 1 k α i m i (1) vec = \sum_{i=1}^{k}α_im_i \tag1 vec=i=1kαimi(1)
其中 α i ∈ [ 0 , 1 ] α_i ∈ [0,1] αi[0,1] 是每个记忆片段 m i m_i mi 的权重,并且 ∑ i α i = 1 \sum_iα_i = 1 iαi=1 。打分函数如下:
g i = t a n h ( W a t t [ m i ; v a s p e c t ] + b a t t ) (2) g_i = tanh(W_{att}[m_i;v_{aspect}]+b_{att}) \tag2 gi=tanh(Watt[mi;vaspect]+batt)(2)
获得了 { g 1 , g 2 , … g k } \{g_1,g_2,…g_k\} {g1,g2,gk} 之后就是正常的 attention 操作,即通过 s o f t m a x softmax softmax 函数得到权重 { α 1 , α 2 , … , α k } \{α_1,α_2,…,α_k\} {α1,α2,,αk},公式如下:
α i = e x p ( g i ) ∑ j = 1 k e x p ( g j ) (3) α_i = \frac{exp(g_i)}{\sum_{j=1}^{k}exp(g_j)} \tag3 αi=j=1kexp(gj)exp(gi)(3)
作者认为自己设计的这种 attention model 有两点优势:

  1. 这个 attention model 可以自适应地得到每个记忆片段与 aspect 的关联程度。因为其打分函数是一个正反馈神经网络,即 t a n h ( W a t t [ m i ; v a s p e c t ] + b a t t ) tanh(W_{att}[m_i;v_{aspect}]+b_{att}) tanh(Watt[mi;vaspect]+batt),可以看到,其中 input 为记忆 m i m_i mi 和 aspect vector v a s p e c t v_{aspect} vaspect 的拼接,然后送入激活函数为 t a n h tanh tanh 的单个神经元。这样就可以通过该网络根据情况学得参数 W a t t W_{att} Watt b a t t b_{att} batt,达到自适应的目的。
  2. 这个 attention model 是可微的,这样其就可以随着其他部件一起训练、优化,可以实现端到端这种方式。
Location Attention

上面的 Attention 部分是基于内容的,即选出与 aspect 更相符的上下文。但是往往在实际情况中,距离 aspect term 更近的上下文对 aspect sentiment cliassification 帮助更大。

基于上面的想法,作者提出了 Location Attention,他赋予句子中每个词一个位置信息(方式是用绝对距离来表示,即其距离大小为该 word 处在句子中的第几个位置)。具体作者怎么利用这个位置信息来实现 Location Attention 的呢?作者给出了下面 4 个方法(model)。

  • Model 1:作者用下面这个公式计算 memory vector m i m_i mi
    m i = e i ⊙ v i (4) m_i = e_i⊙v_i \tag4 mi=eivi(4)
    其中 ⊙ ⊙ 代表 element-wise multiplication(即按对应元素相乘), v i ∈ R d × 1 v_i ∈ R^{d×1} viRd×1 是 word w i w_i wi 的位置向量(位置向量即指根据位置信息计算得到的向量,也可以将其近似地理解成是每个 word 对应的位置未归一化的权重向量,由下面公式(5)可以看出,这个向量是由一个标量张成的,即该向量的每个元素值都相等),其计算公式如下:
    v i k = ( 1 − l i / n ) − ( k / d ) ( 1 − 2 × l i / n ) (5) v_i^k = (1-l_i/n)-(k/d)(1-2×l_i/n) \tag5 vik=(1li/n)(k/d)(12×li/n)(5)
    其中 n n n 是句子长度, k k k 是 hop 数(即指 hop k), l i l_i li w i w_i wi 的位置值。

  • Model 2:这是 Model 1 的简化版,即简化了 v i v_i vi 部分。简化内容:首先,不同的 hop 中的 v i v_i vi 均相同;其次,本身的计算公式也简化了。总之,整个简化部分可以用下面这个公式代表。
    v i = 1 − l i / n (6) v_i = 1 - l_i/n \tag6 vi=1li/n(6)

  • Model 3:在这个 model 中,作者将 v i v_i vi 视作一个参数,并利用加法来计算 m i m_i mi,具体如下:
    m i = e i + v i (7) m_i = e_i + v_i \tag 7 mi=ei+vi(7)
    从公式中我们可以看到, v i v_i vi 就如同全连接网络中的 bais 变量一样,所以作者说将 v i v_i vi 视作一个参数。

  • Model 4: 在这个 model 中位置向量同样被视作参数,只不过不同于 Model 3,Model 4 的做法是通过一个门神经元,输入为 v i v_i vi,输出为一个控制程度(也就是我们常说的 Attention 中的权重信息)。公式如下:
    m i = e i ⊙ σ ( v i ) (8) m_i = e_i⊙σ(v_i) \tag8 mi=eiσ(vi)(8)

多层计算层的必要性

首先多层计算层在得到抽象表示方面被广泛使用。

因为单层计算层只包含一个 attention layer,不足以处理复杂计算,即模型能力不强,所以使用多层计算层来提升模型的处理能力。

分类部分

直接使用 s o f t m a x softmax softmax 来进行分类。

存在的问题

  • 对 target 的处理比较粗糙。
  • 虽然多层 Attention 增加了模型的表示能力,但是每层 Attention 得到的结果又成为了下一层的查询向量,这样可能会导致每次 Attention 得到的结果都是一句话中特定几个词的权重大。
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Drdajie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值