自然语言处理前沿研究之细粒度情感分析

情感分析综述

  文本情感分析:又称意见挖掘、倾向性分析等。简单而言,是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。对于意见、情感或观点,我们进行如下建模:对于给定的文本d,任务从文本中获取(e,a,s,h,t)五元组,即态度持有者h在t时间(条件下)对实体e的a方面有观点s。传统情感分析任务主要为情感分类,即确定s的极性。

  从分析的粒度上,情感分析可以分为文章级(document level)、句子级(sentence level)和单词级(word level)情感分析,其中句子级情感分析在前沿领域有细粒度的情感分析。细粒度的情感分析在完成传统任务情感分类的基础上,还可以确定观点(情感)s针对了对象的哪一方面。例如,“这家餐厅披萨很好吃但是服务太差了”这句话,通过细粒度的分析可以提取出(披萨,+),(服务,-)。细粒度的情感分析可以进一步细分为三个小任务,分别是对象抽取(aspect extraction),对象级情感分类(aspect-level sentiment analysis)以及通过单个模型完成上述两个任务的方法(协同训练)。

  本文首先简要介绍传统情感分析任务与方法,之后详细介绍细粒度情感分析相关前沿。

传统情感分析任务与方法

  传统情感分析主要为情感分类,是nlp入门级的任务,相信很多人都做过豆瓣的影评情感分类(二分类),使用SVM等传统机器学习方法就可以很轻松的得到90%以上的准确率。但是很少有人想过:为什么豆瓣影评数据集只包含正面情感、负面情感两个类别,不应该有更多的数据是中性的吗?例如:“这个电影的主要内容是关于爱情的”,这样一个句子,很难说是包含了情感极性,而使用豆瓣影评数据集训练出来的模型,真的能够实际在豆瓣影评数据中进行分析吗?这恐怕是不行的,因为它没有能力处理大量的中性数据。

  因此,当我们说传统情感分析是入门级的任务,我们默认了我们要去进行二分类,二分类哪怕使用传统机器学习模型,也可以很轻松的跑到95%以上的准确率,就是一个小学生,学会了编程,也能很好的解决二分类的任务。但是如上文所述,二分类的任务一般缺乏现实依据,其数据集往往是精挑细选的,当传统情感分析涉及三分类甚至五分类时,准确率会直线下滑。根据论文Deep Learning-Based Sentiment Classification: A Comparative Survey(2020),三分类任务在不同数据集上准确率为70%-85%,五分类任务准确率在60%左右。

  一般对于显示数据集,三分类(正面、负面、中性)就可以很好概括数据集中的所有情况了,但是三分类任务哪怕在万能的深度学习方法的加持下,也只能达到75%左右的准确率。这是由于以下几个原因造成的:

  1. 现有模型对于语义的理解十分不直观,也很难计算全面。例如,句子“我不认为他不是一个好人”,包含了多重否定,在早期基于规则的方法下,这种情况就很难解决,在深度学习背景下,人们使用CNN去获取句子的局部语义信息,但是对于长句子,往往效果不好。或是使用RNN、LSTM去对句子进行顺序的记忆,但是由于储存空间有限,存在“遗忘”的现象。如何通过修改模型或引入更多语义信息(如pos或依存句法),来解决这一难题,是重要的研究方向之一。
  2. 现有模型对于特定领域词义的考虑不足,如何训练针对特定领域的词向量,或是通过大量领域a的数据,训练领域b的模型,来提高模型对特定领域的效果,是未来的重要研究方向之一。
  3. 现有模型对于知识的引入考虑不足,如何应用知识图谱等技术,使模型将知识引入计算,来提高模型的学习能力和可解释性,是未来的研究方向之一。

  综上,尽管传统情感分析是入门级的任务,但其中也包含着大量未解决的内容,联系着很多NLP领域的核心问题。现在,尽管更多顶会(ACL、NAACL、EMNLP)新论文是关于细粒度情感分析的,但是每年还是会有5篇左右顶会论文用于改进传统情感分析。相信未来会在这一方面取得突破性的进展。

细粒度情感分析任务与方法

  在上文,我们通过(e,a,s,h,t)五元组,即态度持有者h在t时间(条件下)对实体e的a方面有观点s,定义了情感分析问题。传统情感分析任务主要为情感分类,即确定s的极性。细粒度情感分析在传统情感分析的基础上,能够分析对于实体e的方面a,所表达的情感极性s。细粒度的情感分析在完成传统任务情感分类的基础上,还可以确定观点(情感)s针对了对象的哪一方面。例如,“这家餐厅披萨很好吃但是服务太差了”这句话,通过细粒度的分析可以提取出(披萨,+),(服务,-)。细粒度的情感分析可以进一步细分为三个小任务,分别是对象抽取(aspect extraction),对象级情感分类(aspect-level sentiment analysis)以及通过单个模型完成上述两个任务的方法(协同训练)。

  近三年来,细粒度情感分析的文章在nlp相关顶会之中大放异彩。越来越多的学者开始关注细粒度情感分析问题。

Aspect Extraction

  对象抽取(aspect extraction)的任务在过去的十几年之间均有研究。早期任务往往使用基于规则或者语法的方法,这种方法虽然准确率高且可解释性强,但是往往难以广泛应用。例如论文ICSE-Lin2019(Pattern-Based Mining of Opinions in Q&A Websites)为几千条数据就设计了100余条语法和依存句法的规则约束。
  较新的方法使用LDA等主题模型,LDA通过两层贝叶斯模型对文档-主题-词进行了建模。在对象抽取任务中,一些研究将LDA得到的主题视为对象(aspect)进行研究。这一类研究往往影响较小(个人意见),是因为主题模型得到的主题词只从文档中词共现的角度去获取了语义,同时只能分析目标文本库(例如100篇新闻文章),因此数据量小+粒度大。词向量的方法可以根据滑动窗口捕获语义,粒度更小,且可以根据大语料库进行计算,数据量大+粒度小,得到的词向量具有更好的语义。
  因此,较新的对象抽取方法主要基于词向量和深度学习模型。下文将逐一分析其中较为典型或比较有意思的文章。

Fine-grained Opinion Mining with Recurrent Neural Networks and Word Embeddings(emnlp2015liu)


  emnlp2015liu论文可以说是最早通过深度学习方法将细粒度情感分析中的对象抽取任务转化为BIO标注任务的文章之一。文章基于SemEval-2014数据集,这是一个细粒度标注的数据集,对于一个句子既标注了情感极性,也标注了句子中提到的aspect word以及每一个aspect的情感极性。

<sentence id="1316"><text>The tech guy then said the service center does not do 1-to-1 exchange and I have to direct my concern to the "sales" team, which is the retail shop which I bought my netbook from.</text><aspectTerms><aspectTerm term="service center" polarity="negative" from="27" to="41"/><aspectTerm term="&quot;sales&quot; team" polarity="negative" from="109" to="121"/><aspectTerm term="tech guy" polarity="neutral" from="4" to="12"/></aspectTerms>
</sentence>

  emnlp2015liu论文在SemEval-2014数据集标注数据的基础上,基于Bi-LSTM设计模型学习解决BIO标注问题。

An Unsupervised Neural Attention Model for Aspect Extraction(ACL2017He)

  跟据emnlp2015论文可知,监督学习主要将aspect提取任务转化为BIO标注任务,更新的相关工作主要集中于模型效果的提高。此处介绍的ACL2017He论文是使用无监督学习的方法,能够根据输入文本库(句子或文档),提取出aspect的embedding,将aspect和词向量映射到同一空间。因此,ACL2017He的方法可以无监督提取出aspect word,并对句子进行aspect的分类。

  模型简介:ACL2017He方法的具体思路如下:首先,把词汇表中每个词都使用词向量进行表示。之后,我们可以使用多种方法对aspect嵌入向量进行初始化。例如,我们可以完全随机K个aspect向量(和词向量在同一空间);我们也可以使用高级一点的方法,例如使用k-means方法找到文本库中词的K聚类中心,将这些聚类中心的坐标作为aspect嵌入向量;或者我们可以通过弱监督对aspect嵌入向量进行初始化。之后,我们根据每一个词的词向量,加上对这个词计算得到的ATTENTION,计算句子的加权向量(这里attention的作用被解释为把“看起来”更像aspect-word的词权重提高,把“看起来”就很水的non-aspect-word的权重减少)。我们将这一步得到的句子向量记为zsz_szs。将zsz_szs经过全连接层W并通过Softmax处理为概率分布ptp_tpt(代表这一句子描述每一个aspect的可能性)。得到了ptp_tpt之后,结合我们之前已经有了的aspect嵌入向量,以ptp_tpt为权重计算第二个同一句子的表示向量rsr_srs。目标函数就是要zsz_szsrsr_srs尽量接近。
  模型评估:ACL2017He的方法(ABAE)主要对比了LDA及其变种,作者定义了主题(方面)的相关性分数,并计算了LDA、ABAE得到结果的相关性分数。结果显示ABAE明显优于LDA及其变种方法。

  代码分析:作者在GitHub上开源了自己的代码(作者是个漂亮小姐姐),github链接

 - libs- ---custum_layers.py- ---model.py- ---optimizer.py- ---reader.py- ---...- preprocess.py- word2vec.py- reader.py- train.py- evaluation.py

  代码中libs主要是模型实现部分,其中运行顺序为preprocess.py–>word2vec.py–>train.py–>evaluation.py。代码的部分问题为,如果使用现成的谷歌词向量,模型对将整个词向量文件加载到内存(或显存中)导致速度过慢或无法运行,考虑之后对这一弊端进行更改。代码的另一个问题是运行环境为比较旧的python2.7环境,使用的tensorflow也比较过气了,之后考虑重写代码,改进弊端,发到GitHub上。github项目链接

Summarizing Opinions: Aspect Extraction Meets Sentiment Prediction and They Are BothWeakly Supervised(EMNLP2018 ABAE的变种)

  前文中,我介绍了ABAE方法,可以说是近几年来第一个使用深度学习和注意力机制解决aspect extraction的方法,算是一个小级别的开山鼻祖。之后EMNLP2018这篇文章在ABAE方法的基础上进行了改进,将方法变为了弱监督,从而实现了更好地效果。新方法被命名为MATE(Multi-Seed Aspect Extractor),其效果如下图所示。

  MATE方法对于每一个aspect,假设存在一个小集合的种子词(seed word,类似的思路其实挺常见的)。这些种子词即可以人工设定,也可以通过一个人工标注的句子集提取。MATE不同于ABAE,使用种子词得到(或者说初始化,在实际程序中可以选择aspect是否进行迭代更新)aspect的嵌入向量。MATE模型示意图如下图所示。

  种子词向量到aspect嵌入向量的计算过程中,作者并不是单纯的求和取平均,而是为每一个seed word设计了一个可学习的权重系数,从而让模型可以判断哪个seed word更重要,或者说,可以减少标注数据中存在噪声的影响。但是这样做会导致模型所需要的数据量增多。如果去分析这个项目的github开源代码,会发现作者所谓的”弱监督“数据量并不小。不过是否需要这个权重矩阵,在模型中也是可选的。
  我的GitHub改进项目上也会改进这一项目的代码。github项目链接

aspect-level sentiment analysis

  这一方面我个人还没有研究到,可参考博文ACL2018和博文TNet

自然语言处理前沿研究之细粒度情感分析相关推荐

  1. 复旦大学邢晓渝:细粒度情感分析中模型的鲁棒性研究

    ⬆⬆⬆              点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! 细粒度情感分析,也叫做基于方面的情感分析是情感分析中的一个子任务.虽然现有的模型在该任务上的效果很好, ...

  2. 【自然语言处理】【细粒度情感分析】细粒度情感分析:了解文本情感的What、How、Why

    细粒度情感分析:了解文本情感的What.How.Why Knowing What,How and Way:A Near Complete Solution for Aspect-based Senti ...

  3. 细粒度情感分析:还在用各种花式GNN?或许只用RoBERTa就够了

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自 | 知乎 作者 | 邱锡鹏 地址 | https://zhuanlan.zhih ...

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

    作者 | 周俊贤 整理 | NewBeeNLP 最近在调研细粒度情感分析的论文,主要对一些深度学习方法进行调研,看论文的同时记录下自己的一些想法. 首先,何为细粒度的情感分析?如下图,淘宝APP上某商 ...

  5. 情感分析 | 细粒度情感分析在美团到餐场景中的应用

    每天给你送来NLP技术干货! 来自:美团技术团队 经典的细粒度情感分析(ABSA,Aspect-based Sentiment Analysis)主要包含三个子任务,分别为属性抽取.观点抽取以及属性- ...

  6. 基于词典的细粒度情感分析

    1 细粒度情感分析 传统的情感分析大多是针对句子级的,即某条评论或某句话为积极或消极的概率.而往往一句话中包含着多个描述点,即方面级的述评,这时用一个模糊的概率或数字去评价整段文字或整句话势必是不准确 ...

  7. 细粒度情感分析(Aspect Based Sentiment Analysis, ABSA),一个从零开始的案例教程【Python实现】

    目录 前言 数据和源码 你要了解的基础 1. 细粒度情感分析(ABSA)案例背景 1.1 任务介绍 1.2 数据基本介绍 1.3 如何评估ABSA的结果 2. 任务一:Aspect Term Extr ...

  8. NLP之中文自然语言处理工具库:SnowNLP(情感分析/分词/自动摘要)

    NLP之中文自然语言处理工具库:SnowNLP(情感分析/分词/自动摘要) 作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!

  9. 基于 Amazon SageMaker 构建细粒度情感分析应用【附部署视频】

    基于 Amazon SageMaker 构建细粒度情感分析应用 基于 Amazon SageMaker 构建细粒度情感分析应用 一.创建Sagemaker Notebook实例 输入名称.选择实例类型 ...

最新文章

  1. 对支持向量机(SVM)的个人理解
  2. 世界上最经典的25句话
  3. ldap导入mysql_openLDAP 部署(亲测可用)
  4. 1019. 数字黑洞 (20)
  5. php的create_function、function_exists判断函数是否存在
  6. ubuntu 报错E: Unable To Locate Package Software-properties-common
  7. 探讨一下常见支付系统的对外接口
  8. JavaScriptjQuery.函数
  9. 【回归预测】基于matlab麻雀算法优化相关向量机RVM回归预测【含Matlab源码 1750期】
  10. linux超级终端root权限,linux超级终端命令
  11. python已停止工作请关闭该程序_解决PyCharm的Python.exe已经停止工作的问题
  12. Windows组策略禁止广告弹窗
  13. java工厂模式:简单工厂、工厂方法、抽象工厂(通俗易懂)
  14. macd底背离的python_python量化交易是否可以有策略有效识别MACD/SKDJ底背离和顶背离?...
  15. 2016年终总结——学生时代的结束、北漂生活的开始
  16. python进程间通信时间开销_python 进程间的通信
  17. 小米手机线下营销方案设计(毕业作品+任务书+设计方案+成果报告书)
  18. 篇一、Flask打造 Python Web 开发的灵活框架,实现简易登录。要求有 Python、HTML 和 CSS 基础。
  19. 如何从外包跳槽到大厂
  20. Linux RPM包安装、卸载和升级(rpm命令)详解

热门文章

  1. M-LVC: Multiple Frames Prediction for Learned Video Compression 个人理解
  2. 任务之间的同步与通信
  3. javascript转盘和砸蛋demo
  4. C++_6.0启动报错:应用程序无法正常启动0xc0000142解决方案
  5. c语言选择排序法程序设计,C语言选择排序算法及实例代码
  6. easyui 实现表格字段排序
  7. 铜火锅涮羊肉与敏捷价值观
  8. 微信小程序登录授权与授权手机号
  9. [Mac M1]Android Studio运行模拟器
  10. 京东按关键字搜索商品api电商接口