Transformation Networks for Target-Oriented Sentiment Classification

本文介绍了一种针对ABSC任务的改进方法,提出Context-Preserving Transformation (CPT)和Target-Specific Transformation (TST),结合Bi-directional LSTM和CNN,有效关注关键短语并区分目标观点词。CPT通过多层结构保留上下文信息,TST动态赋予词target相关性,解决RNN注意力机制的噪声问题和CNN局部采样导致的信息损失。

前提

  • 下面的思考部分主要是思考作者是如何想到这个方法的。
  • CPT:Context-Preserving Transformation
  • TST:Target-Specifific Transformation

Motivation

  • 在当时之前 ABSC 任务的主要做法是 RNN + attention mechanism ,有不少工作、方法都引入了这种做法。

    这些工作是将 word-level features 用 attention weight 来组合,以实现最后的情感分类,但可能会引入噪声,并降低预测精度。例如,在“This dish is my favorite and I always get it and never get tired of it.”, 从中我们可以看出这句话中最重要的是 “favorite” ,但前面提及的方法会在重点考虑 “favorite” 时,包含不相关的词,如 “never" 和 “tired”。在某种程度上,该缺陷根源于注意机制。

  • 从上面的例子中我们也可以看出一种很常见的情况:目标的情感通常是由关键短语决定的。

    所以,我们希望找出一种方法可以重点考虑一句话中的部分内容 -> 由此作者想到了用 CNN 来解决,因为 CNN 本身就是对 features 一部分一部分地考虑。

  • 但 CNN 处理 ABSC 仍会遇到问题:

    1. 一个原因是 CNN 不能像 RNN-based 方法一样完全探索目标信息。因为 CNN 可以看作对 input 的每个窗口进行提取特征,如这张示意图所示(大致展示 CNN 的过程)

      虽然我们可以构建多层 CNN 以达到能得到考虑了 input 中所有 word 的目的,但是由于 CNN 是局部采样的性质,其还是会丧失掉一部分信息。例如图中所示,卷积层以大小为 3 的窗口获取各部分特征,但是在获取其中一个部分时,这部分其实是夹杂着影响其他 word 和被其他 word 影响的信息的。所以通过 CNN 得到的 input 的表示不能像 RNN 那样考虑的全面。

    2. CNN很难区分多个目标的观点词。(例如,“great food” 和 “service was dreadful” 中 “great” 和 “dreadful” 分别是两个 target 的观点词,但是因为 CNN 没有时序的概念,其只是单纯的抽取特征,那么最后得到 “great” 和 "dreadful"的特征后其只能认定其为可帮助情感分析的观点词,而无法判断哪个)

方法概述

首先给出整体框架图:

整个模型如上图所示,步骤为:

  1. 首先将 word embedding 送入 BLSTM 中得到隐状态。
  2. 利用 Target-Specifific Transformation (TST) 组件来将 target 信息融入到每个词的表示中。
  3. 最后将得到的每个词的表示送入到 Conv2d 层(二维卷积)得到句子的表示,并以此进行预测。

那么这个方法是怎么解决前面讲的 Motivation 里的问题的呢?

  1. 首先,Motivation 中作者想关注短语信息,所以想用 CNN,但是 CNN 的首要问题是虽然可以很好的关注局部信息,但是会丢失局部和局部之间底层信息的联系。所以作者先用 BiLSTM 对 sequence 建模获得所有 word 的底层信息(包含 word 与 word 之间的关系等),之后部分再做 CNN 处理,这样第一个问题就解决了。
  2. 对于 CNN 会考虑无关观点词的问题,作者的策略是基于一个观察,即修饰 target 的观点词一般都离 target 比较近。所以作者的策略是将位置信息加入到 CNN 中。

方法详述

首先规定一下符号,用 w = { w 1 , w 2 , . . . , w n } w = \{w_1,w_2,...,w_n\} w={w1,w2,...,wn} w τ = { w 1 τ , w 2 τ , . . . , w m τ } w^τ = \{w_1^τ,w_2^τ,...,w_m^τ\} wτ={w1τ,w2τ,...,wmτ} 分别代表 sequence 和 target,相应的用 x = { x 1 , x 2 , . . . , x n } x = \{x_1,x_2,...,x_n\} x={x1,x2,...,xn} x τ = { x 1 τ , x 2 τ , . . . , x m τ } x^τ = \{x_1^τ,x_2^τ,...,x_m^τ\} xτ={x1τ,x2τ,...,xmτ} 表示 sequence 和 target 的中每个 word 的 embedding vector。分类任务为三分类情感分类任务,情感极性定为 y ∈ P , N , O y ∈ {P,N,O} yP,N,O,其中 P , N , O P,N,O P,N,O 分别代表 “positive”、“negtive”、“neutral” 。

之后将 x x x 送入 BLSTM 中,得到每个词的隐状态 h ( 0 ) = { h 1 0 , h 2 0 , . . . , h n 0 } h^{(0)} = \{h_1^{0},h_2^{0},...,h_n^{0}\} h(0)={h10,h20,...,hn0}

接下来的中间部分就是作者提出的 TNet 模型核心的部分,这部分由 L 层 Context-Preserving Transformation (CPT) 组成。

Bi-directional LSTM Layer

这部分无需多说,就是将 word embedding 送如双向的 LSTM 层,将得到的基于正向和反向的隐状态拼接作为 word 在这一层获得的表示。

Context-Preserving Transformation

众所周知,上面通过 BLSTM 得到的 word 并没有单独考虑 target 信息。而之前的做法大多都是基于 Attention 的方法,这种方法虽然可行,但是还不够好。为什么呢?主要是因为 Attention 处理 word 关于 target 的表示时不够细致,其只是单纯的算出每个 word 关于 target 的权重,相当于融入了 target 信息的 word 的表示只是原来的表示乘上了权重(做了一个放缩)。

通过上面这段话,我们从直觉上也很容易理解仅仅用数乘的方式对 word 的表示的处理是比较简陋的。(关于这一点,自己基础知识很薄弱时接触 ABSC 时看到对 target 信息的融合处理都是直接将 target 表示拼接到 word 的表示后面。当时虽然自己水平不高,但也觉得那样的做法还很低级。如今随着自己的一点成长,再通过这篇论文理解 Attention 时发现,其实单纯用 Attention 来处理 target 信息的融合也是比较低级的。)

所以基于之前方法的不足,作者提出了 CPT 层,其可以分为两个方面来介绍:

  1. CPT 层是有多个 CPT 单元构成的一层。而每个 CPT 单元对应一个 word,作者在其中设计了 TST 部分,其目的就是为每个 word 单独打造融入 target 信息的表示。
  2. 作者还在 CPT 层里设计了 context-preserving(上下文留存)机制,为的是可以构造多层 CPT 层,来增加模型的表示能力。(如果没有这个机制,只能实现单层 CPT)

下图是 CPT 的示意图:

Target-Specifific Transformation

首先考虑如何处理 target 信息(因为可能 target term 中包含多个词),之前方法的处理方式要么是直接取平均(显然不好);要么就是对 target 也做 Attention 处理(IAN 中 -> 同对 context 的处理方式)(但是这种方法想用 Attention 处理 target,那么就要用 context 作为查询向量,但是如果一句话中还有其他的 target,即有的 context 是修饰其他 target 的而不是用来修饰当下要进行情感分类的 target)。

可以从上面的分析中看出,IAN 的主要问题是将整个 sequence 中的 context 当作了处理 target 的查询向量。基于此,作者提出的 TST 是基于 sequence 中的各个 word 来对 target 进行处理。换句话说,TST 是动态地为 sequence 中每个 word 计算 target words 的重要性。

具体做法步骤为:

  1. 先用一个 BiLSTM 获得 target term 中每个 word 的表示,即 target 中每个 word x j τ x_j^τ xjτ 对应得到其表示 h j τ h_j^τ hjτ,式子如下:
    h j τ = [ L S T M → ( x j τ ) ; L S T M ← ( x j τ ) ] , j ∈ [ 1 , m ] (2) h_j^τ = [\overset{→}{LSTM}(x_j^τ);\overset{←}{LSTM}(x_j^τ)],j∈[1,m] \tag2 hjτ=[LSTM(xjτ);LSTM(xjτ)],j[1,m](2)
    这些表示拼成一个 target 表示矩阵 h τ ∈ R m × 2 d i m h \pmb{h}^τ∈R^{m×2dim_h} hhhτRm×2dimh

  2. 将得到的 target 表示与当前考虑的 word(sequence 中的)进行处理,使其产生联系,得到一个关于该 word 的特定的 target 表示 r i τ r_i^τ riτ,具体为:
    r i τ = ∑ j = 1 m h j τ ∗ F ( h i ( l ) , h j τ ) , (3) r_i^τ = \sum\limits_{j=1}^m {h_j^τ*F(h_i^{(l)},h_j^τ)}, \tag3 riτ=j=1mhjτF(hi(l),hjτ)(3)
    其中函数 F F F 表示测量第 l l l 层第 i i i 个 word 的表示 h i ( l ) h_i^{(l)} hi(l) 与第 j j j 个 target word 的表示 h j τ h_j^τ hjτ 之间的相关性,具体计算方式如下:
    F ( h i ( l ) , h j τ ) = e x p ( h i ( l ) T h j τ ) ∑ k = 1 m e x p ( h i ( l ) T h k τ ) (4) F(h_i^{(l)},h_j^τ) = \frac {exp(h_i^{(l)T}h_j^τ)} {\sum_{k=1}^m exp(h_i^{(l)T}h_k^τ)} \tag4 F(hi(l),hjτ)=k=1mexp(hi(l)Thkτ)exp(hi(l)Thjτ)(4)

  3. 最后将刚刚计算得到的 r i τ r_i^τ riτ 和第 i i i 个 word 的表示 h i ( l ) h_i^{(l)} hi(l) 拼在一起放入一个全连接层做一次转换(transform)得到该词融入 target 信息的表示 h ~ i ( l ) \widetilde{h}_i^{(l)} h i(l),此过程可以表示为下面式子:
    h ~ i ( l ) = g ( W τ [ h i ( l ) : r i τ ] + b τ ) (5) \widetilde{h}_i^{(l)} = g(W^τ[h_i^{(l)}:r_i^τ] + b^τ) \tag5 h i(l)=g(Wτ[hi(l):riτ]+bτ)(5)

Context-Preserving Mechanism

经过非线性 TST 后(即上面式 5 之后), h i ( l ) h_i^{(l)} hi(l) 中包含的 context 信息将被改变,因为特征向量内特征的均值和方差将会改变。(注意:这里为什么经过一个非线性层之后均值和方差就会变呢?我举个例子,在《概率论》的知识中,我们想标准化一个非标准的正太分布 x ∼ N ( μ , σ 2 ) x \sim N(μ,σ^2) xN(μ,σ2)需要怎么处理呢?答:只要令 x − μ σ ∼ N ( 0 , 1 ) \frac{x-μ}{σ} \sim N(0,1) σxμN(0,1) 即可,所以只做加减乘除运算(即线性运算)虽然也改变了均值和方差,但只是平移和放缩,这个分布本身的性质是没有变得。所以如果用非线性的方法处理,不仅会改变均值和方差,还会改变其本身的性质。)

为了利用上下文信息,作者提出了两种策略,分别为 Lossless Forwarding (LF) 和 Adaptive Scaling (AS):

  • Lossless Forwarding

    名字含义:由下面的式子可以看到,context 信息(即 h i ( l ) h_i^{(l)} hi(l))和 transformed representations(转换表示,即 T S T ( h i ( l ) ) TST(h_i^{(l)}) TST(hi(l)))是直接加在一起的,没有被改变(没有被做其他的处理),所以叫 Lossless。
    h i ( l + 1 ) = h i ( l ) + h ~ i l , i ∈ [ 1 , n ] , l ∈ [ 0 , L ] (6) h_i^{(l+1)} = h_i^{(l)} + \tilde{h}_i^l,i∈[1,n],l∈[0,L] \tag6 hi(l+1)=hi(l)+h~il,i[1,n],l[0,L](6)
    将上面式子的嵌套展开得到下式:
    h i ( l + 1 ) = h i ( 0 ) + T S T ( h i ( 0 ) ) + ⋯ + T S T ( h i ( l ) ) (7) h_i^{(l+1)} = h_i^{(0)} + TST(h_i^{(0)}) + \dots + TST(h_i^{(l)}) \tag7 hi(l+1)=hi(0)+TST(hi(0))++TST(hi(l))(7)

  • Adaptive Scaling

    LF 会带来一个问题,就是其做法是直接将 input(即 context 信息)和 transformed features 相加,这种相加其实包含了二者是同等重要的含义。究竟这二者的重要性是否相同呢?我们不好判断,但既然现在模型都是为了让机器自己学习,那么应该让机器自己学得二者谁更重要。

    基于这样的想法,作者提出了 AS 方法,这种方法很像 RNN 中的门控机制,公式如下:
    t i ( l ) = σ ( W t r a n s h i ( l ) + b t r a n s ) (8) t_i^{(l)} = σ(W_{trans}h_i^{(l)} + b_{trans}) \tag8 ti(l)=σ(Wtranshi(l)+btrans)(8)

    h i ( l + 1 ) = t i ( l ) ⊙ h ~ i ( l ) + ( 1 − t i ( l ) ) ⊙ h i ( l ) (9) h_i^{(l+1)} = t_i^{(l)}⊙\widetilde{h}_i^{(l)} + (1-t_i^{(l)})⊙h_i^{(l)} \tag9 hi(l+1)=ti(l)h i(l)+(1ti(l))hi(l)(9)

    其中 t i ( l ) t_i^{(l)} ti(l) 是第 i i i 个 word 在第 l l l 层对应的门, t ( l ) \mathbf{t}^{(l)} t(l) 是所有 l l l 层门的集合。 ⊙ ⊙ 代表 element-wise multiplication(元素乘法)。将上面式子的嵌套展开得到下式:
    h ( l + 1 ) = [ ∏ k = 0 l ( 1 − t ( k ) ) ] ⊙ h ( 0 ) + [ t ( 0 ) ∏ k = 1 l ( 1 − t ( k ) ) ] ⊙ T S T ( h ( 0 ) ) + ⋯ + t ( l − 1 ) ( 1 − t ( l ) ) ⊙ T S T ( h ( l − 1 ) ) + t ( l ) ⊙ T S T ( h ( l ) ) h^{(l+1)} =[\prod\limits_{k=0}^l(1-t^{(k)})]⊙h^{(0)} + [t^{(0)}\prod\limits_{k=1}^l(1-t^{(k)})]⊙TST(h^{(0)}) + \cdots \\+ t^{(l-1)}(1-t^{(l)})⊙TST(h^{(l-1)}) + t^{(l)}⊙TST(h^{(l)}) h(l+1)=[k=0l(1t(k))]h(0)+[t(0)k=1l(1t(k))]TST(h(0))++t(l1)(1t(l))TST(h(l1))+t(l)TST(h(l))

Convolutional Feature Extractor

在 Motivation 中作者说明了直接用 CNN 处理 ABSC 任务时的两个问题,其中其第二个问题概括来说就是因为 CNN 对特征的抽取是一视同仁的,所以可能会将与当前做情感分类的 target 无关的观点词也加入考虑。作者基于此提出了自己的策略(即此部分),下面给出说明:

首先计算第 i i i 个 word 和 target 之间的位置相关性:
v i = { 1 − ( k + m − i ) C i < k + m 1 − i − k C k + m ≤ i ≤ n 0 i > n (10) v_i = \begin{cases} 1-\frac{(k+m-i)}{C} \quad i < k+m \\ 1-\frac{i-k}{C} \quad k+m ≤ i ≤ n \\ 0 \quad i > n \end{cases} \tag{10} vi=1C(k+mi)i<k+m1Cikk+min0i>n(10)
从公式中也八九不离十的猜到其中的符号是什么意思。 k k k 表示 target term 中第一个 word 的下标; m m m 是 target term 的长度; i i i 是当前考虑的 word 的下标; C C C 是事先设定的常量。

有了位置信息之后,我们可以通过其来选出对任务更有用的信息,公式如下:
h ^ i ( l ) = h i ( l ) ∗ v i , i ∈ [ 1 , n ] , l ∈ [ 1 , L ] (11) \hat{h}_i^{(l)} = h_i^{(l)} * v_i, i∈[1,n],l∈[1,L] \tag{11} h^i(l)=hi(l)vi,i[1,n],l[1,L](11)
从式子可以看到,对于之前得到的每个 word 定制的包含了 target 信息的隐状态 h i ( l ) h_i^{(l)} hi(l),与 target 离得越近,越会被终点考虑(对应得 v i v_i vi 大)。(注意 v v v 不是只应用于最后一层 CPT,而是应用于每一层 CPT。)

接下来将上面得到的所有第 L L L 层的包含了位置信息的隐状态送入一个 CNN 模型中,其中卷积层处理过程如下:
c i = R e L U ( w c o n v T h i : i + s − 1 L + b c o n v ) (12) c_i = ReLU(\pmb{w}^T_{conv} \mathbf{h}_{i:i+s-1}^{L} + b_{conv}) \tag{12} ci=ReLU(wwwconvThi:i+s1L+bconv)(12)
这里 h i : i + s − 1 L ∈ R s ⋅ d i m h \mathbf{h}_{i:i+s-1}^{L} ∈ R^{s·dim_h} hi:i+s1LRsdimh h ^ i ( L ) , ⋯   , h ^ i + s − 1 ( L ) \hat{h}_i^{(L)},\cdots,\hat{h}_{i+s-1}^{(L)} h^i(L),,h^i+s1(L) 的拼接(即将这些向量一个一个首尾相接,拼成一个长的 vector,其维数为 s ⋅ d i m h s·dim_h sdimh); s s s 是 kernel size;而 w c o n v ∈ R s ⋅ d i m h \pmb{w}_{conv} ∈ R^{s·dim_h} wwwconvRsdimh b c o n v ∈ R b_{conv} ∈ R bconvR 则是卷积核。由上式可知,一个 kernel 过滤一个从 i i i 开始 s s s 个个数的隐状态会得到一个对应的活性值 c i c_i ci,而该 kernel 过滤所有(n个)隐状态后,应该会得到 n − s + 1 n-s+1 ns+1 个活性值,作者定义这些活性值拼成的向量为 feature map c ∈ R n − s + 1 \mathbf{c} ∈ R^{n-s+1} cRns+1

下面是 pooling 层(这层是为了得到最丰富的特征,这里使用 max pooling):
z = [ m a x ( c 1 ) , ⋯   , m a x ( c n k ) ] T (13) z = [max(c_1),\cdots,max(c_{nk})]^T \tag{13} z=[max(c1),,max(cnk)]T(13)

这里 n k nk nk 是 kernel(也被称为过滤器)的个数(因为如果只有一个 kernel 的话参数值有点儿少,能学到的东西比较少); z ∈ R n k z∈R^{nk} zRnk 作为整个句子的表示。

最后将 z z z 送入一个全连接层做一次转换,将 n k nk nk 个值转换成待分类个数的值,再用 Softmax 分类即可,公式如下:
p ( y ∣ w τ , w ) = S o f t m a x ( W f z + b f ) (14) p(y|\mathbf{w}^τ,\mathbf{w}) = Softmax(W_fz + b_f) \tag{14} p(ywτ,w)=Softmax(Wfz+bf)(14)
这里 W f W_f Wf b f b_f bf 就是参数,没什么好说的。

不懂

  • CNN很难区分多个目标的观点词。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Drdajie

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

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

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

打赏作者

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

抵扣说明:

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

余额充值