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

买家除了对这个商品进行整体打分外,还会针对一些商品aspect(属性)进行文字评价,例如某个评论『这条裤子的材质很好,但是拉链太拉跨了』。从find-grained(细粒度)评价角度来说,买家对商品的“材质”这一aspect的评价为Positive,对“拉链”这一aspect评价为Negative,但aspect和对应的情感是隐式地体现在评价中,需要我们利用模型抽取出来
上面提到的细粒度情感分析,英文全称叫「Aspect Based Sentiment Analysis,简称ABSA」。
对细粒度的aspect进行分析,一方面,有助买的人从自己看重的特征方面决定是否购买;另一方面,让厂家能对自身的产品有更全面的认知,从而进行针对性的改进。
论文:《A Unified Model for Opinion Target Extraction and Target Sentiment Prediction》[1]
ABSA主要有两个模式
个人理解,大部分所谓的「joint方法(联合建模)」 其实就是用一个模型同时完成多个任务,「解节码阶段还是Pipeline的形式」。

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

模型由两层双向的LSTM组成,有三个主要思想:
五个。通过这个辅助训练,让底层的LSTM学习到边界信息;
来进行映射,这个矩阵维度为
,而且是一个「常数矩阵」,因为假如第一层预测出的标签是
,则它映射到对应的标签只能是
这三种。
,和第二层的t输出
进行相加,但问题是怎么分配它们的权重呢?论文如提出一个小技巧,如计算得到的
是很平滑的话,证明第一层捕捉到的边界信息也不明确,这时就降低
的权重,假如是一个熵
值很低的,表示很明确的,这时就增大它的权重,这就是SG组件里干的内容,具体的可以看论文的做法。
第二层的LSTM输出
,通过一个门控机制,把上一个词的特征考虑进来,这就是SC组件干的事情。目的避免出现上一时刻是
,这一时刻输出变成
的情况。不过个人感觉,这种也可以通过CRF来进行控制的吧。
论文里,提到”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组件做的事情。
论文:《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,
第一阶段做两个序列标注(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
。
和
都能得到收益,具体的,经过训练,
也融合进了opinion的信息,
也融合进了aspect的边界信息。
将第一阶段抽取的aspect&aspect sentiment、opinion用笛卡尔积枚举所有候选的三元组列表。训练时,文本信息加上aspect与opinion的相对位置信息,训练它们的匹配关系。
实验的结构这里就不post出来, 自然是比上一篇论文要好的,毕竟上一篇中的是2019 AAAI,这篇中的是2020 AAAI,这篇是前一篇的改造。
论文:《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