Al_challenger_2018_sentiment_analysis_top17_基于Aspect Level思路的解决方案

本文思路来源于基于Aspect Level思路的解决方案.
这篇文章的主要目的是记录复现过程中的心得和体会。

训练词向量

预处理

  • 将繁体字转换为简体字,使用了zhconv
  • 去掉停用词
  • 中文分词,使用了jieba分词
  • 去除了标点符号(训练词向量时)

训练词向量

word2vec模型

  • 词向量模型参数如下
model = Word2Vec(sentences, sg=1, size=100, compute_loss=True, window=5, worker=8, iter=8, min_count=2)
  • 字向量模型参数如下
model = Word2Vec(sentences, sg=1, size=100, compute_loss=True, window=10, worker=8, iter=15, min_count=2)

TFIDF特征提取

  • 首先使用TfidfVectorizer()将文本转换为特征矩阵,仅在训练集上面训练
  • 然后使用TruncatedSVD()将上一步中得到的特征矩阵进行降维(80),这一步也是仅仅在训练集上训练
    具体实现可以参考:使用Tfidf和TruncatedSVD做文本主题分析

Aspect选取

这部分作者没有给出源码,我尝试了将Tfidf特征用于LightGBM对每个类别做二分类,得到的结果比较近似,关键源码如下。有点需要指出的是,只使用TF特征貌似也能得到不错的结果,因此可以同时使用两种特征,然后再根据得到的两种结果进行挑选。
根据特征重要性取TopK作为Aspect,(原作者)得到如下结果:

subjects = ['地铁站 地铁 地理位置 位置 公交车 公交车站 公交站',
            '百货 商圈 商场 广场 购物中心 城 商业街',
            '容易 位置 醒目 找到 找 地理位置 显眼',
            '小时 排队 等 排 排号 队 号',
            '态度 服务员 热情 服务态度 老板 服务 服务生',
            '开车 停车费 停车位 停 停车场 车位 泊车',
            '很快 催 慢 速度 分钟 上菜 等',
            '小贵 不贵 价位 原价 块钱 价格 性价比',
            '不划算 物有所值 不值 物美价廉 超值 性价比 实惠',
            '活动 团 霸王餐 代金券 团购 优惠 券',
            '装修 布置 灯光 古色古香 装饰 优雅 情调',
            '安静 环境 装修 氛围 嘈杂 吵闹 音乐',
            '大 宽敞 空间 面积 装修 拥挤 店面',
            '整洁 干净 环境 卫生 苍蝇 不错 脏',
            '吃不完 一份 量 量足 个头 好大 少',
            '入味 吃 不错 味道 好吃 口味 好喝',
            '造型 颜色 精致 卖相 好看 色香味 食欲',
            '推荐 强烈推荐 值得 强推 一试 极力推荐 菜品',
            '好 满意 纪念品 内地 之 肠 灌',
            '还会 机会 再 不会 来 值得 推荐']

模型

小细节

  • 对于长评论不截断,以最长的评论为准
  • 词向量对于未知词使用 ( − 0.01 , 0.01 ) (-0.01,0.01) (0.01,0.01)的均匀分布初始化,此处只有一个word2id['<pad>'] = 0.
  • 对于类别不平衡问题对于每个类标加上权重,即数量少的样本被分错了会得到更大的 l o s s loss loss,具体实现如下,不直接取倒数是防止数量多的类别的系数太小,即分错误了带来的影响太小。
cost_w = [12, 11, 10, 1000]
cost_w = [11/12, 11/11, 11/10, 11/1000]
# 再softmax
cost_w = softmax(cost_w)
  • 使用了数据增强,即将Train_data:(samples, words)中的某一行中的某些列随机置零。
  • 使用了earlystop,如果连续两次f1score值没有上升则停止训练
  • 记录最优的epoch和sub_epoch(每轮验证三次),保存最近的7个模型,然后进行模型内集成,集成方法是按照对f1score进行计算得到的权重进行加权和
  • 使用了模型间集成

字词向量联合表示

借鉴R-NET(R-NET:MACHINE READING COMPREHENSION WITH SELF-MATCHING NETWORKS)的方法,采用词向量和字向量联合表示。这里是将每个词视为由7个字组成的,不足补零。

例如:奶茶十分好喝

词向量表示:[W2V(奶茶),W2V(十分), W2V(好喝)]

经过BiRNN的字向量:[BiRNN(,),BiRNN(,), BiRNN (,)]

最终向量表示:[Concat(W2V(奶茶), BiRNN(,)), Concat(W2V(十分), BiRNN(,)), Concat(W2V(好喝), BiRNN(,))]

下面详细说明一下数据的流动:

context(bs, len_contex)-embedding->(bs, len_context, edim)

context_ch(bs, len_context, len_words)-embedding->(bs, len_context, len_words, edim_ch)-reshape->(bs*len_context, len_words, edim_ch)-biRnn->(bs*len_context, 1, 2*edim_ch)-reshape->(bs, len_context, 2*edim_ch)

context = concat(context, context_ch)->(bs, len_context, 2*edim_ch+edim)

aspect可以用类似的方法推导得到。

Model 1

Abstrac

该模型来源于论文Aspect Based Sentiment Analysis with Gated Convolutional Networks。
论文中将基于aspect的情感分析(ABSA)分为两个子任务,一个是aspect-category的(ACSA),一个是aspect-term(ATSA)的。之前的方法大多是基于LSTM和注意力机制取预测相应目标的情感极性,这种方法同城很复杂并且很耗时。本文提出了一个基于卷积神经网络和门控机制的模型,相较于之前的模型更高效并且更准确。首先,新提出的Tanh-ReLU门控单元可以根据给定的aspect和entity有选择性的输出情感特征。这种结构相较于之前的注意力模型更简单。其次,该模型可以在训练的过程中实现并行化。

Model Structure

我们称这种模型为Gated Convolutional network with Aspect Embedding(GCAE)。

Gated Tanh-ReLU Units(GTRU)

模型结构
上图中的ReLU接受aspect信息来控制情感特征的传播。之后两个门的输出按元素相乘后送入max pooling层。
在每一个位置t都有两个卷积提取特征分别经过不同的门进入后面的max pooling层。下面我们看一下数据流动过程:
a i = r e l u ( X i : i + k ∗ W a + V a v a + b a ) a_i = relu(X_{i:i+k}*W_a + V_av_a + b_a) ai=relu(Xi:i+kWa+Vava+ba)
s i = t a n h ( X i : i + k ∗ W s + b s ) s_i = tanh(X_{i:i+k}*W_s + b_s) si=tanh(Xi:i+kWs+bs)
c i = s i × a i c_i = s_i \times a_i ci=si×ai
其中 v a v_a va是给定的category的embedding(ACSA)或者是对aspect terms(ATSA)经过另一个CNN卷积得到的。上述公式中,可以理解为 s i s_i si是用来产生情感特征的,而 a i a_i ai是用来产生指定的aspect的情感特征的。后面的maxpooling和softmax都是常规情况,无须多说明。
目标函数:
L = − ∑ i ∑ j y i j l o g y ^ i j L = - \sum_i \sum_jy_i^jlog\hat{y}{_i^j} L=ijyijlogy^ij
其中 i i i为样本的索引, j j j为情感类别的索引。

门控机制

这一部分和我理解有出入,放一段原文内容:

The ReLU gate in Equation 2( R e L U ReLU ReLU) does not have upper bound on positive inputs but
strictly zero on negative inputs. Therefore, it can output a similarity score according to the relevance between the given aspect information v a v_a va and the aspect feature a i a_i ai at position t t t. If this score is zero, the sentiment features s i s_i si would be blocked at the gate; otherwise, its magnitude would be amplified accordingly. The max-over-time pooling further removes the sentiment features which are not significant over the whole sentence

ReLU门的输出对于正面的输入来说没有上界,但是对于负面的输入来说就会变为0.因此可以根据给定的aspect v a v_a va和位置 t t t处的aspect 特征 a i a_i ai计算一个相似度分数,如果分数为0,则说明情感特征 s i s_i si会被阻塞;否则,它的值会被相应的放大。之后,时间上的max pooling会进一步移除那些对于整个句子不太重要的情感特征。

GCAE on ATSA

在ACSA中,控制情感特征流动的aspect信息来源于一个aspect单词;然而在ATSA中,这个信息由一个卷积网络在一系列aspect terms [ w i , w i + 1 , . . . , w i + k ] [w_i, w_{i+1}, ..., w_{i+k}] [wi,wi+1,...,wi+k]上面卷积得到。如下入所示:
GCAE on ATSA

作者改进

  • 字词向量联合表示
  • 句子先经过一个单向的 LSTM 再做上图中操作
  • 在最后的线性层之前加了 一个CNN
  • 同时预测 20 个aspect

Model 2

此模型来源于Effective Attention Modeling for Aspect-Level Sentiment Classification.

Abstrac

一个句子中通常会包含很多不同的target,并且对于不同的target,情感极性不一定相同。因此该任务最大的挑战就是如何根据不同的target将他们对应的情感极性分出来。此前,注意力机制在此问题上面得到了SOTA的结果,注意力机制通过对语义信息进行建模然后捕捉每种target对应的重要的语境信息。本文中提出了两种新方法改进注意力机制。首先,提出了一种target representation的方法以便更好的捕捉到观点目标的语义;其次,把语法信息和注意力机制结合得到一种新的注意力方法。

Model Description

Task Definition and Notation

给定一个评论的句子: s = ( w 1 , w 2 , . . . w n ) s = (w_1, w_2,...w_n) s=(w1,w2,...wn),该句子包含 n n n个词。那么它的判定目标应该是 s s s中的 m m m个连续的词组成的 s s s的一个子序列,表示如下: a = ( a 1 , a 2 , . . . a m ) a =(a_1,a_2,...a_m) a=(a1,a2,...am).aspect-level的情感分析的目标就是对给定的判定目标进行情感极性分析。

Target Representation

之前的工作对于目标地表示无外乎两种,一种是直接把几个词的embedding平均;另一种是使用带注意力机制的LSTM得到一个hidden vectors表示。简单的求均值很难完全捕捉到目标的语义,因此我们使用基于aspect embedding的加权和来表示目标,如下图所示。
模型结构
上图中, T ∈ R K × d T\in \mathbb{R}^{K\times d} TRK×d表示aspect embedding, K K K是由使用者自己定义,这个值应该远远小于 V V V,个人认为也应该小于 d d d,但图中远远小于可能不太合理。计算过程如下所示:
c s = A v e r a g e ( 1 m ∑ i = 1 m , 1 n ∑ j = 1 n e w j ) c_s = Average(\frac 1 m \sum_{i=1}{m}, \frac 1 n \sum_{j=1}^ne_{w_j}) cs=Average(m1i=1m,n1j=1newj)
q t = s o f t m a x ( W t ⋅ c s + b t ) q_t = softmax(W_t\cdot c_s + b_t) qt=softmax(Wtcs+bt)
t s = T T ⋅ q t t_s = T^T\cdot q_t ts=TTqt
其中 e a i , e w j , c s , t s ∈ R d , W t ∈ R K × d , q t ∈ R K e_{a_i}, e_{w_j}, c_s, t_s\in \mathbb{R}^d, W_t \in \mathbb{R}^{K\times d}, q_t \in \mathbb{R}^K eai,ewj,cs,tsRd,WtRK×d,qtRK
A v e r a g e Average Average函数返回输入函数的均值, c s c_s cs可以同时捕捉到目标信息和语境信息。 q t q_t qt K K K个aspect embeddings的权重向量,每个权重都表示该目标属于对应的aspect的概率。
我们希望学到的aspect embedding跟我们预训练的词向量空间具有一致性,这样我们就可以从词向量空间中寻找一个和它相近的词来解释它。然而, T T T是随机初始化的,如果我们仅仅训练情感分类器,那么很难得到一致性的结果。因此我们添加了一个无监督的目标函数来确保aspect embedding的质量,这将和基于注意力机制的LSTM联合训练。实际上,我们可以将 c s c_s cs t s t_s ts这几步视为自编码器,我们首先将 c s c_s cs的维度由 d d d维约简到K维通过使用 s o f t m a x softmax softmax非线性函数。这一步后只有和aspect相关的维度被保留在了 q t q_t qt中,其他的维度都被去除了。然后我们通过 q t q_t qt使用aspect embedding的线性组合重构 c s c_s cs。无监督的目标函数就是最小化重构误差,如下所示:
U ( θ ) = − ∑ ( s , a ) ∈ D l o g ( m i n ( ϵ , C o s S i m ( t s , c s ) ) U(\theta) = -\sum_{(s,a)\in D}log(min(\epsilon, CosSim(t_s, c_s)) U(θ)=(s,a)Dlog(min(ϵ,CosSim(ts,cs))
其中, C o s S i m ( ) CosSim() CosSim()函数用于相似性度量, ϵ \epsilon ϵ表示一个非常小的正数。实验中使用了 1 0 − 7 10^{-7} 107 ( s , a ) (s,a) (s,a)表示句子-目标对。

Syntax-based Attention Mechanism

之前的注意力机制往往认为所有的语境词都是同等重要的,这样就会导致注意力的权重仅仅是目标和语境词相似度的度量。但是,我们知道往往距离目标更近的词或者是修饰目标的词是更重要的,这些词应该获得更高的权重。尤其是在一个句子中有多个目标词的情况下。为了解决这个问题,我们提出了一种编码了句子的语法结构的注意力机制,语法信息来自于句法分析树。如下图所示:
在这里插入图片描述
在语法树中,离目标词越近的判定词往往对于确定情感极性耕种。在我们的模型中,我们定义了 l l l为一个语境词和目标词之间的路径长度。注意力模型根据位置有选择性地选择一个小窗内的语境词,我们使用 w s ws ws来表示注意力窗口大小。并且我们根据距离远近来为窗口内的语境词分配不同的权重。基本原则是距离的越近得到的权重越大。
d i = { 1 2 l i − 1 ⋅ e x p ( f s c o r e ( h i , t s ) ) i f l i ∈ [ 1 , w s ] 0 o t h e r w i s e d_i=\begin{cases} \frac 1 {2^{l_i-1}}\cdot exp(f_{score}(h_i,t_s)) &amp; if l_i \in [1, ws] \\ 0 &amp; otherwise \end{cases} di={2li11exp(fscore(hi,ts))0ifli[1,ws]otherwise

p i = d i ∑ j d j p_i = \frac {d_i} {\sum_j d_j} pi=jdjdi
f s c o r e ( h i , t s ) = t a n h ( h i T ⋅ W a ⋅ t s ) f_{score}(h_i, t_s) = tanh(h_i^T \cdot W_a \cdot t_s) fscore(hi,ts)=tanh(hiTWats)
其中, W a ∈ R d × d W_a \in \mathbb{R}^{d \times d} WaRd×d是一个可以训练的权重矩阵。

Overall Architecture and Training Objective

基于注意力机制的LSTM这一部分的损失函数如下:
J ( θ ) = − ∑ ( s , a ) ∈ D ∑ c ∈ C P s , a g ( c ) l o g ( P s , a ( c ) ) J(\theta)=-\sum_{(s,a)\in D}\sum_{c\in C}P_{s,a}^g(c)log(P_{s,a}(c)) J(θ)=(s,a)DcCPs,ag(c)log(Ps,a(c))
其中 C C C是所有情感类别的集合, P ( s , a ) g ( c ) P_{(s,a)}^g(c) P(s,a)g(c) 0 0 0 1 1 1,表示 c c c是否是 ( s , a ) (s,a) (s,a)的正确分类,而 P s , a ( c ) P_{s,a}(c) Ps,a(c)是预测 ( s , a ) (s,a) (s,a)属于 c c c类的概率。
T T T中的aspect embedding在训练过程中不 i i i同的aspect可能会很相似,为了确保不同aspect之间的差异性,我们定义了一个正则化项来确保这种差异性:
R ( θ ) = ∣ ∣ ( T n o r m ⋅ T n o r m T − I ) 2 ∣ ∣ R(\theta) = ||(T_{norm}\cdot T_{norm}^T-I)^2|| R(θ)=(TnormTnormTI)2
这里面 I I I是单位矩阵, T n o r m T_{norm} Tnorm T T T L 2 L_2 L2归一化, ∣ ∣ ∣ ∣ || || 表示矩阵中所有entries的和。当任意两个不同aspect embedding的点积为 0 0 0的时候R最小(显然 ∣ ∣ T i ∣ ∣ 2 = 1 ||T_i||_2 = 1 Ti2=1)。因此,正则化项最终可以使得 T T T的行之间正交,这就放置了aspect之间存在冗余。
最终的目标函数可以定义为:
L ( θ ) = J ( θ ) + λ u U ( θ ) + λ r R ( θ ) L(\theta)=J(\theta)+\lambda_uU(\theta)+\lambda_rR(\theta) L(θ)=J(θ)+λuU(θ)+λrR(θ)

结果分析

  • 基于语法的注意力机制带来的好处:更容易找到那些修饰target的词
  • Target Representation
    简单的平均target的向量难以捕捉到所有目标的正确的语义,因为在词向量空间中目标表示可能距离food-related(or others)很远。但在我们提出的方法中能够根据给定的targets捕捉到正确的aspect语义,因此注意力机制可以结合aspect语义捕捉到正确的观点语境。
    除此之外,论文提出的target representation方法在训练完成后还可以输出aspect embedding,即可以把输入的target映射到到一个aspect。但是论文中作者并没有进行相关的实验。

作者改进

  • 字词向量联合表示
  • 在最后的线性层之前加了 一个CNN
  • 同时预测 20 个aspect

模型融合

模型内融合

对于每一个模型都有一个f1score值,假设我们由5个模型,计算方法如下:

f1_score_list = [0.71, 0.69, 0.701, 0.705, 0.689]
f1_score_list *= 200
w = softmax(f1_score_list)

softmax之前先进行缩放:

  • 如果是放大一个倍数,则差异被放大,之后再softmax中会更明显,大的更大,小的更小。
  • 如果是缩小一个倍数,则差异被缩小,这样就会使得大的概率被缩小,小的概率被放大来以达到减小差异的效果。

多模型融合

实现类似于单模型融合。

待解决的问题

  • 第二个模型的实现
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值