zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

浅谈 NLP 细粒度情感分析(ABSA)

2023-04-18 14:47:53 时间

最近在调研细粒度情感分析的论文,主要对一些深度学习方法进行调研,看论文的同时记录下自己的一些想法。

首先,何为细粒度的情感分析?如下图,淘宝APP上某商品的买家评论。

买家除了对这个商品进行整体打分外,还会针对一些商品aspect(属性)进行文字评价,例如某个评论『这条裤子的材质很好,但是拉链太拉跨了』。从find-grained(细粒度)评价角度来说,买家对商品的“材质”这一aspect的评价为Positive,对“拉链”这一aspect评价为Negative,但aspect和对应的情感是隐式地体现在评价中,需要我们利用模型抽取出来

上面提到的细粒度情感分析,英文全称叫「Aspect Based Sentiment Analysis,简称ABSA」

对细粒度的aspect进行分析,一方面,有助买的人从自己看重的特征方面决定是否购买;另一方面,让厂家能对自身的产品有更全面的认知,从而进行针对性的改进。

End-to-End ABSA任务

论文:《A Unified Model for Opinion Target Extraction and Target Sentiment Prediction》[1]

ABSA主要有两个模式

  • Pipeline:两阶段建模,先抽取文本的aspect,再判断相应的情感倾向,即一个抽取任务和一个分类任务。
  • Joint:用同一个模型同时进行抽取aspect和判断情感倾向,如下图的Joint行,用一个模型完成aspect属性抽取任务和情感抽取任务。

个人理解,大部分所谓的「joint方法(联合建模)」 其实就是用一个模型同时完成多个任务,「解节码阶段还是Pipeline的形式」

论文里提出一个「Unified」方案,如上图的Unified行,通过巧妙的标签设计,同时把aspect属性抽取和情感倾向放到一个序列标注任务中。

模型的架构如下图所示:

模型由两层双向的LSTM组成,有三个主要思想:

Target Boundary Guided TBSA

  1. 第一层的LSTM输出要做一个辅助任务,这个任务是捕捉aspect的边界信息,如上面提到的例子,这个辅助任务的label就为 【(The,O)、(AMD,B)、(Turin,I)、(Processor,E)、(seems,O)、(to,O)、(always,O)、(perform,O)、(much,O)、(better,O)、(than,O)、(Intel,S)】,标签只有
【B、I、E、S、O】

五个。通过这个辅助训练,让底层的LSTM学习到边界信息;

  1. 同时,第一层的输出经过softmax后也会加入到第二层的输出里面一起预测最终的token标签,但是第一层的输出经过softmax只有5维,但是最终要预测的标签是13维的,包括 【B-POS, I-POS, E-POS, S-POS, B-NEG, I-NEG, E-NEG, S-NEG, B-NEU, I-NEU, E-NEU, S-NEU、O】共13个,因此通过一个转移矩阵
W^{tr}

来进行映射,这个矩阵维度为

5 imes13

,而且是一个「常数矩阵」,因为假如第一层预测出的标签是

B

,则它映射到对应的标签只能是

B-POS、B-NEG、B-NEU

这三种。

  1. 第一层的输出经过softmax和转移后,得到上图左边的
z^{S^prime}_t

,和第二层的t输出

z^S_t

进行相加,但问题是怎么分配它们的权重呢?论文如提出一个小技巧,如计算得到的

z^{S^prime}_1

是很平滑的话,证明第一层捕捉到的边界信息也不明确,这时就降低

z^{S^prime}_t

的权重,假如是一个熵

z^{S^prime}_t

值很低的,表示很明确的,这时就增大它的权重,这就是SG组件里干的内容,具体的可以看论文的做法。

Maintaining Sentiment Consistency

第二层的LSTM输出

h^S_t

,通过一个门控机制,把上一个词的特征考虑进来,这就是SC组件干的事情。目的避免出现上一时刻是

I-POS

,这一时刻输出变成

E-NEG

的情况。不过个人感觉,这种也可以通过CRF来进行控制的吧。

Auxiliary Target Word Detection

论文里,提到”opinion targets are always collocated with opinion iword“,具体的上图的例子,”AMD Turin Processor”就是opinion target,“better”就为opinon word。

只要某个word的上下文窗口中出现了opinion word,我们就把这word定义为target word。根据这个定义,组织训练集时,可以得到每个word是否是target word,这样第一层LSTM输出也有一个辅助任务,做判断当前word是否是target word的二分类任务,这就是OE组件做的事情。

Aspect Sentiment Triplet Extraction (ASTE) 任务

论文:《Knowing What, How and Why: A Near Complete Solution for Aspect-based Sentiment Analysis》[2]

上面提的方法,通过巧妙的标签设计,提出一种unified方案,用一个序列标注任务,同时搞定aspect extraction和aspect sentiment classification,就是上图的红色框。这篇论文,更进一步,认为添加一个aspect sentiment triplet extraction(ASTE)任务(其实就是比unified方案多一个opinion term extraction的抽取任务以及多一个三元组判断任务),会让训练出来的模型更强大,就是上图的蓝色框。

假如赋予含义的话,博文里提到

aspect 给出了带有情感的评论目标,sentiment 给出了对目标的情感极性,opinion term 给出了情感的原因,这三者依次回答了What(对于什么),How(情感怎么样)以及 Why(为什么是这个情感)三个问题,对于评论目标构成更全面的分析。

具体的,如论文中提到的一个例子,”Waiters are very friendly and the pasta is simply average.“,假如用unified方案,只需要一个序列标注任务得到 【(Waiters,S-POS)、(are,O)、(very,O)、(friendly,O)、(and,O)、(the,O)、(pasta、S-NEG)、(is,O)、(simply,O)、(average,O)】 就搞掂。但假如同时抽取opinion term(即”friendly“和“average”),并且判断(Waiters,Positive,friendly)是匹配关系,(Waiters,Positive,average)不是匹配关系,学习出来的模型效果可能会更佳。

具体的模型架构如上图所示,分成了两个Stage,

Stage one

第一阶段做两个序列标注(SL) 任务,分别是抽取unified tag 【B-POS, I-POS, E-POS, S-POS, B-NEG, I-NEG,E-NEG, S-NEG, B-NEU, I-NEU, E-NEU, S-NEU,O】 和抽取opinion

【B,I,E,S,O】

  • 具体的,抽取unified tag由图中Stage one的左侧结构进行标注,与上一篇论文的方法不同的是,还融合了模型右侧图卷积网络(GCN)返回的情感词信息辅助进行输出;
  • 抽取opinion由图中stage one的右侧结构进行预测,把句子丢进一个GCN网络中,再放到双向LSTM中,最后对opinion进行序列抽取;
  • 除此之外,还多了一个Target Guidance(TG)模块,TG模块融合了aspect的边界信息和GCN的输出,做的任务是抽取ipinion term,「其实就是跟模型第一阶段右侧的任务一样的」!作者希望通过这样有监督地训练TG模块,让
BLSTM^T

GCN

都能得到收益,具体的,经过训练,

BLSTM^T

也融合进了opinion的信息,

GCN

也融合进了aspect的边界信息。

Stage two

将第一阶段抽取的aspect&aspect sentiment、opinion用笛卡尔积枚举所有候选的三元组列表。训练时,文本信息加上aspect与opinion的相对位置信息,训练它们的匹配关系。

实验的结构这里就不post出来, 自然是比上一篇论文要好的,毕竟上一篇中的是2019 AAAI,这篇中的是2020 AAAI,这篇是前一篇的改造。

用预训练模型BERT做unified方案

论文:《Exploiting BERT for End-to-End Aspect-based Sentiment Analysis》[3]

一篇简单的workshop论文,主要思想是「抛弃一切”花里胡哨“的启发式组件设计」,直接用BERT加具体的任务层(论文里采用了Linear、GRU、SAN、TFM、CRF五种)来做上文提到的unified方案。实验证明,预训练模型就是YYDS。

具体看下图实验结果,红色框就是上面提到的第一种方法的实验结果,蓝色框就是本论文的实验结果。预训练模型再次打倒一切!

总结

总体来说,在预训练模型之前,用了很多「启发式」的思想去改造模型,例如认为人在判断的时候,会依据什么角度去想,顺着这个思路,在神经网络的架构中就提出一些相对应的模块跟主任务一起做训练。

更简单来说,就是各种改造,然后给出一些「合理漂亮的解释」,然后实验效果不错,就可以投会议了。但随着预训练模型的出现,发现预训练模型加简单的任务层,瞬间超过前面所有精心设计的模型架构,让人不禁感叹,预训练模型的威力是如此地强大。

本文参考资料

[1]

《A Unified Model for Opinion Target Extraction and Target Sentiment Prediction》: https://ojs.aaai.org/index.php/AAAI/article/view/4643

[2]

《Knowing What, How and Why: A Near Complete Solution for Aspect-based Sentiment Analysis》: https://ojs.aaai.org/index.php/AAAI/article/view/6383

[3]

《Exploiting BERT for End-to-End Aspect-based Sentiment Analysis》: https://arxiv.org/abs/1910.00883