Press "Enter" to skip to content

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

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

 

作者 | 周俊贤

 

整理 | NewBeeNLP

 

 

 

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

 

首先,何为细粒度的情感分析?如下图,淘宝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

 

 

第一层的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)】,标签只有五个。通过这个辅助训练,让底层的LSTM学习到边界信息;

 

同时,第一层的输出经过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个,因此通过一个转移矩阵来进行映射,这个矩阵维度为,而且是一个 「常数矩阵」 ,因为假如第一层预测出的标签是,则它映射到对应的标签只能是这三种。

 

第一层的输出经过softmax和转移后,得到上图左边的,和第二层的t输出进行相加,但问题是怎幺分配它们的权重呢?论文如提出一个小技巧,如计算得到的是很平滑的话,证明第一层捕捉到的边界信息也不明确,这时就降低的权重,假如是一个熵值很低的,表示很明确的,这时就增大它的权重,这就是SG组件里干的内容,具体的可以看论文的做法。

 

 

Maintaining Sentiment Consistency

 

第二层的LSTM输出,通过一个门控机制,把上一个词的特征考虑进来,这就是SC组件干的事情。目的避免出现上一时刻是,这一时刻输出变成的情况。不过个人感觉,这种也可以通过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。

 

具体的,抽取unified tag由图中Stage one的左侧结构进行标注,与上一篇论文的方法不同的是,还融合了模型右侧图卷积网络(GCN)返回的情感词信息辅助进行输出;

 

抽取opinion由图中stage one的右侧结构进行预测,把句子丢进一个GCN网络中,再放到双向LSTM中,最后对opinion进行序列抽取;

 

除此之外,还多了一个Target Guidance(TG)模块,TG模块融合了aspect的边界信息和GCN的输出,做的任务是抽取ipinion term, 「其实就是跟模型第一阶段右侧的任务一样的」 !作者希望通过这样有监督地训练TG模块,让和都能得到收益,具体的,经过训练,也融合进了opinion的信息,也融合进了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。

 

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

 

 

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

 

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

 

不过在看这些“复杂”架构的时候,尝试去理解作者的切入点,倒是挺有意思的事情。同时,除了关注模型架构,也要关注 「把问题看作什幺任务来进行解决」 ,如上面第一种方法提到的unified方案,就是把细粒度情感分析问题看作一个序列标注任务来进行解决。

一起交流

想和你一起学习进步!『 NewBeeNLP』 目前已经建立了多个不同方向交流群( 机器学习 / 深度学习 / 自然语言处理 / 搜索推荐 / 图网络 / 面试交流 /  等),名额有限,赶紧添加下方微信加入一起讨论交流吧!(注意一定o要 备注信息 才能通过)

 

 

本文参考资料

[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

Be First to Comment

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注