深刻解读华为云细粒度文本情感分析及其应用

摘要:本篇文章主要介绍了情感分析的一些基本任务,包括文本、语音、图像还有生成、识别,着重讲述华为云在细粒度情感分析方面两个工做。git

导读:先简单介绍一下文本情感分析的一些基本概念,而后介绍一下华为云在细粒度情感分析方面两个工做,一个是属性级的细粒度情感分析,还有一个是观点四元组的挖掘,最后再作一个总结和将来的展望。框架

今天主要介绍如下几点:机器学习

Ø 文本情感分析介绍分布式

Ø 属性级情感分析性能

Ø 观点四元组分析学习

Ø 总结测试

情感分析介绍

首先介绍一下文本情感分析的一个基本概念。情感分析,它主要是识别媒介中目标对象的一个情感,这里面可能有两个概念比较容易混淆,一个是sentiment analysis,另外一个是emotion analysis,通常咱们说的情感分析都是sentiment,主要指的正面和负面的分析,而后emotion会更详细一些,它不只包含正负面,还包含好比说生气、开心、高兴这些,会更加细粒度一些。编码

咱们主要分析sentiment,从分析对象来看会包含文本、图像、语音,EEG(脑电波)、多模态分析情感。从任务方面来看,不只是有情感的识别,还有情感生成的一些任务,像如今有情感对话的生成,还有虚拟人情感生成。 在本报告中,主要侧重文本方面的情感识别。url

文本情感分析

上面文本情感分析五要素定义是采用刘冰老师的定义,这个定义分为了实体(entity)、实体的某一个方面(aspect)、针对这个实体的情感正负面(opinion=sentiment,即情感正负面也称做观点正负面)、观点持有者(hold)和持有观点的时间(time)这五要素,通常来讲hold和time文本不多说起。spa

另外一个概念通常会把entity和aspect合并在一块儿成为一个target,是针对咱们目标对象的情感或者观点。例如:“我以为华为手机的拍照很是牛逼”这里面对应的实体是“华为手机”,对应的aspect是“拍照”,对应的情感是“很是牛逼”为正面,对应的观点持有者是“我”,而时间没有说起因此为空。

当前的文本情感分析就是根据输入文本,而后识别其中这五要素里的几个要素,如今尚未相关工做能够同时识别出五个要素。通常的话如今最简单的情感分析是只识别出这个文本的观点/情感,既不包含实体也不包含aspect而且也不包含观点持有者,再进一步的工做就是识别出针对哪个aspect(实体)的观点(情感)。

这里简单介绍一些细粒度情感分析和咱们说的通常情感分析的区别。通常的情感分析都是直接识别整个文本的正负面,然而细粒度情感分析会更细一些,这里面有两个概念,一个是从情感的粒度上会更细,好比从sentiment到emotion的情感粒度升级,以前咱们只分析正负面,如今除了正负面还有情绪,如高兴、伤心等,从情感这个维度讲这是一种细粒度情感分析。还有一个是从分析对象的角度来说,以前的情感分析是直接识别整个句子或整篇文章的情感,它不区分情感对象是谁,再细粒度一些的话就须要识别出整个句子里面情感针对的对象是谁,它是句子里的某个实体或者是某个实体的某个属性,从这个角度这也是细粒度情感分析的一种,咱们今天主要侧重第二个针对对象角度的情感分析。

情感分析任务

下面介绍一下情感分析的各个任务,这里面分析是情感的识别,不包含生成,还有前面提到的语音图片也不涉及。

针对文本的情感分析会分红几个等级:

词级别的情感分析:这个相似于情感词典的构建,怎么去构建一个大规模的情感词典,好比“车祸”这个词对应的情感就是负面的,“生日”这个词对应的情感就是正面的。

句子/文档级的情感分析:咱们如今用比较多的,各大云服务厂商都会有的一个服务,针对句子或者文档的情感分析,输入一句话返回相应的情感正负面,但它不区分正负面针对哪个句子里面哪一个实体或者哪一个对象。

目标级的情感分析:这是咱们今天侧重的目标级的细粒度情感分析,这里面的目标就是上边说的target,它能够是一个实体也能够是一个属性,还能够是实体+属性的组合形式。

对于目标级的情感分析会分为三种:

针对属性的情感分析(TG-ABSA):这里面对象是固定而后只分析里面某几个属性的正负面,这就会涉及到两个任务,一个是对象的属性识别,另外一个是该属性的情感识别。例如图中的例子“外观XXX”,这里的对象是固定说的是手机,咱们只须要识别出其中的属性外观、内存和性能,而后分别识别出各个属性的情感正负面。针对属性识别也分红两个任务,一是属性词的抽取,就是咱们要定位出属性描述词在文中的位置,另外一个是该属性描述词对应的属性类别,由于针对某个属性的描述多是“外观”也多是“看起来很好看”,它这个描述不必定包含显性的属性描述词。针对情感识别会分为观点词抽取和观点分类。

针对实体的情感分析(TN-ABSA):这里是文本中只有实体而没有属性,只针对实体的情感进行分析,这涉及到的两个任务,实体识别和情感识别。实体识别分为实体词抽取和实体分类,情感识别分为观点词抽取和观点分类。

针对目标的情感分析(T-ABSA):这里面的目标就是实体+属性的组合,例如:“小米性价比”、“华为拍照”等,这会比上面两个任务相对更细一些。目标识别分为目标词抽取和目标分类,情感识别分为观点词抽取和观点分类。

针对情感分析简单介绍一下它的一些方法简史,最先的一个方法是基于字典加规则的方式,咱们人工构建一个情感词典,每一个词都有对应的正负面,而后根据句子中正面词和负面词的数量,最后作一个投票,这是一个最简单的方法。后边就有了基于机器学习的方法,像传统的机器学习SVM等,将情感词典和词袋做为它的一个特征。再进一步就是深度学习,还有就是如今的基于预训练语言模型+fine tune的方法,应该是如今效果最好的一个方法。

属性级情感分析

下边我介绍一下咱们其中的一个工做,属性级情感分析(TG-ABSA),这里面实体是固定的,分析它各个属性的正负面。像上面句子级情感分析是大部分厂商提供的,好比“买没几天就降价一点都不开心,闪存跑分就五百多点”,这个总体是负面,可是它针对价格和闪存两个属性都有相应情感,这里并无区分。属性级情感分析这个任务就是给定属性的类别集合,而后预测它各个属性的正负面。其中,这里的表达也分为两种,一种是显式的观点表达,另外一种是隐式的观点表达。显式的观点表达会显示提到属性的属性词和观点词,好比“手机内存很是大,系统流畅,性价比很是高”,这里属性词“内存”、“系统”和“性价比”都有显示的提到,而像“手机太贵了,颜值很是高,一点都不卡”,这里“手机太贵了”、“一点都不卡”表达的属性分别是“价格”和“性能”,可是没有相应的属性词。

针对这两种不一样的表达方式,处理方式是不同的,后边会介绍一种专门针对显示的方法。

属性级情感分析—相关工做介绍

无监督方法:

最传统的一个方法是无监督的,这种方法的优点是不须要标注数据,好比使用基于句法解析的方法,先抽取句子里主语谓语宾语的表达方式,好比“服务员很漂亮”,经过抽到的主语“服务员”和它对应的形容词“漂亮”,这样我就能够知道它的评价对象是“服务员”,观点是“漂亮”,再根据查情感词典知道这是一个正面的情感,这样就能够获得针对服务员的评价是正面的。

这种方法只能处理显示的表达,若是是隐式的表达,由于句子中没有属性词,那么经过句法解析无法获得对应的角色,因此没法分析来处理隐式的表达。这种无监督方法的优势是不须要标数据,缺点是准确率相对低一些,无法处理隐式表达。

阅读理解方法:

最近的一个工做是复旦邱锡鹏老师组提出的基于深度学习的方法,分析一个句子里面各个属性的正负面,他把这个问题转化成一个阅读理解的问题,原本一个句子有N个属性集合,他把句子和属性转换成句子-属性 pair。输入一个句子,这里面aspect能够描述成阅读理解的一个问你题,好比“针对外观评价是怎么样的”,这样转换成问答对的方式,而后基于Bert来识别这个问答对正负面的答案,这是一个比较新的工做。

这种方式的优点是比较灵活,属性能够无限的扩充,无论是新增或者减小属性,均可以用这种方法直接取处理,并且准确率还比较高。可是这种方法的缺点就是它的效率相对要低一些,由于若是有N个属性,在预测的时候,它须要预测N次才能获得结果。

属性级情感分析—方案介绍

咱们提出了一个基于相似多标签,多任务的方法。整个任务给定属性类别集合,而后预测每一个属性的正负面。

这里面的难点是,首先咱们大框架使用的是有监督的方法,由于最终咱们想要把应用部署到华为云的服务上,因此准确率要求是比较高的,要求达到90%以上,通常无监督的方法没法知足,因此仍是须要有监督的方法。这就须要标注数据,若是是多个属性它的一个问题就是标注起来比较困难,好比说一个手机评论可能会涉及到二三十个属性或者说甚至上百种属性,若是要标数据的话,这会很是的困难。咱们的方法不一样于传统的多标签分类,像文本多标签分类任务的类别有政治、经济、新闻,该任务只涉及标签是否出现,但这里不同的地方是它不只涉及到属性是否出现,还要预测出属性的正负面,至关于每一个属性都要预测出它的三个标签—正面、负面和未出现。至关于每一个属性是一个多分类任务而不是一个二分类任务。以前那种多标签分类,通常最后会把每一个标签转化成logits,这里的话用这种方法就没办法处理。而后还有就是隐式表达。

咱们解决的技术思路是,把它转换成一个Multi-task多分类任务,每一个属性都处理成一个多分类的任务,因此它输出不是二分类而是一个多分类。在标注数据的过程当中,咱们引入主动学习的思路,先标注一批少许的数据,而后用模型对剩余未标注的作一个预测,而后再对那些置信度比较低的再去人工审核标注这些数据,若是置信度比较高的就不用再标了,这样的话能够提升标注效率。另外一个方法是,若是一个样本同时标注多个属性,这个标注成本是很高的,咱们引入Label mask的思路,就是在训练的时候 某几个属性可能标也可能没标,若是没标的话就把这个属性mask掉,而后在计算loss的时候该属性就不参与计算了,只将那些已经标注的属性参与loss计算和反向传播的计算,这样的一个好处就是我在真正标注样本的时候想标注哪几个属性就标注哪几个属性,不用每一个样本的全部属性都要标注,这样标注就更加灵活,能够先针对某一个属性只标注它,标完该属性后再标另外一个属性,这其实是一个很灵活的标注。

使用这个方法的一个优点是,它最终基于深度学习模型,准确率比较高,也支持隐式的表达,由于深度学习能够编码各类语义的表达,还有一个就是咱们这种方法能够提升标注效率。在中间编码这块能够是基于bert、roberta这种预训练语言模型,最终输出使用label mask的方法。

属性级情感分析—结果

下面两个图是咱们最终的一个实验结果,针对汽车领域测试样本大概有7000多个,每一个样本平均的属性数量是4.27个,其中预约义的属性集合是8个,最终能够看到每一个属性的准确率都是很高的,基本上达到90%以上。针对手机领域的结果基本上也是每一个属性F值基本上能达到将近90%。

右上角的图是针对每一个属性预测的标签的置信度的阈值,随着阈值的上升,命中的属性(即预测的标签的置信度在阈值以上的属性)准确率也在上升,而Attribute Hit Rate(即预测标签的置信度在阈值以上的属性占比)也随着阈值的上升而降低,即有些属性预测的标签的置信度低于阈值,可是命中的属性预测出标签的准确率是慢慢上升的,这个也是符合咱们的通常认知的。这个的一个好处是最终产品上线以后,用户要求有一部分不须要人工审核,另外一部分则须要人工审核,当达到某个阈值以后,他们就能够不用参与人工审核。经过调节阈值,让某些属性的指标达到了这个阈值,好比准确率都达到95%,这一部分就不须要人工审核。

属性级情感分析—应用案例

这是咱们基于多属性情感分析的一个应用案例,这是汽车领域的案例,针对网上不少的汽车领域的评论,咱们能够分析汽车在八个属性维度上的正负面评价。上图左上角里红色的线就是一个行业的平均水平,蓝色的线是针对这个车它的各个维度的雷达图像,这样就能够很方便地对比出不一样车型,它的一个好坏。能够方便用户在产品选型的时候作一个对比,也能够方便厂家针对评论自己对他们的产品作相应的改进。

观点四元组分析

四元组观点挖掘—介绍

上面讲到的虽然能够分析出各个属性的正负面,可是它的一个缺点是没办法定位出针对某个属性具体评价的属性描述词位置和观点描述的位置,由于有些用户不只想要找到属性正负面,还要找到它对应的评价位置,因此咱们这个工做是针对观点四元组进行挖掘的。

观点四元组挖掘这个任务不只要分析出各个属性的正负面,还要定位出它属性描述词的位置以及观点描述词的位置。好比“手机内存很是大”中属性描述词定位到“内存”,评价词定位“很是大”,对于“性价比很是高”这句话,属性描述词定位到“性价比”,观点描述定位到“很是高”,不只要识别出属性的类别还要定位到位置,因此这里一共有四个要素要预测出来,分别是属性词、属性类别、评价词和评价极性,其中属性类别和评价极性在前面的工做已经作到了。

四元组观点挖掘—方案

针对这个任务,咱们提出了一个基于抽取加分类的联合模型,上图是咱们如今采用的框架,底层是基于编码的模型,能够是bert或者roberta等,而后将句子编码成一个向量表示。

图中左边这侧是用于定位属性描述位置和观点描述位置的,是一个序列标注模型,好比这里B_A是属性描述词起始位置,I_A则是在属性描述词中间的位置,例如这里“内存”和“颜色”都是属性描述词。在这里最上层用的是CRF序列标注模型来进行属性描述词的抽取。图中右边这侧对应的跟上面的工做有点相似了,有N个属性对应有N个输出,而后对应每一个属性预测它的正负面和未出现这几类。左边作属性词抽取,右边作属性正负面预测,最终能够输出每一个属性的四元组(属性类别,属性描述词,观点描述词,观点类别)。

四元组观点挖掘—数据标注

这里的比较耗时间的工做就是数据标注,所以咱们专门作了四元组观点挖掘的数据标注平台。上面“简单”这个分类标签是为了解决标注过程当中有些不一样标注人员他可能对同一个样本就会有冲突,他以为这个样本比较难标或者好标的话这里就是用这进行区分,若是样本好标会打个“简单”的分类标签,若是让他以为不肯定,他会不打“简单”的标签,即“复杂”标签。由于咱们标的属性比较多,涉及到差很少三四十个属性,这里作了一个对属性作了大体的分类。

这里的标注任务是相似于关系抽取里面3元组的标注任务,先标注属性描述词,而后再标注它的观点描述词,这里面它两个实际上是造成一个搭配关系,这个相似于一个三元组中实体和实体及他们的关系,只不过这里的关系是一种搭配的关系,将它们连起来就能够了,最后再加上它对应的正负面以及属性描述词对应的属性类别,这样每一个样本的四元组就标出来了。

上图左边是咱们标注大概两万条手机评论的数据分布,其实能够看到数据分布式很是不均衡的。这个是拿到真实用户在线上评论的数据,有些评论会偏的很是多,然而有些类别评论会很是少。上图右边是针对全部属性对应正负面的分布,这个也是很是不均衡的,正面的评论比较多,负面的评论会相对少不少。

四元组观点挖掘—结果

上图为咱们最终的评价结果,由于它是一个四元组既包含分类也包含抽取,对于评价指标咱们用了一个Fuzzy F1值。咱们对每个属性加正负面标签做为一个评价对象,好比“外观正”做为一个评价对象,而后去找它对应的位置,计算这个位置它们字符的重合率(包括观点描述词和属性描述词的重合率)这样去算它的F值。EM F1值是预测描述词的位置彻底精准匹配,稍微有一点不对也算错,这个比前面的指标更加严格。

在编码器这部分咱们尝试了几个不一样的编码器,包括bert、roberta还有nezha等。因为咱们有不少未标注的数据,基于这些数据咱们作了领域的预训练,而后再进行fine tune。右图展现了不一样指标下的结果,能够看到在未标注数据上进行领域预训练的话是能够带了一个点的提高,Fuzzy F1能达到0.79。另外,这个评估指标对于人的实际感知不太直观,咱们随机抽取500条数据进行人工评价。人工评价的过程是每一个样本预测出每一个属性标签和正负面且包括它们的位置,将这样的四元组抽取出来进行人工评价,判断预测是否合理,若是合理标记为1,若是不合理则标记为0,这样来看人工对模型预测的指标判断。人工评价的准确率是很是高的,差很少96%的准确率,即人工认为预测是合理的。这两个结果差异是比较大的,但也是比较合理的,由于在数据标注过程当中,不一样标注人员对观点描述词的位置以及属性描述的位置也但是会有歧义。好比“外观很是好看”这句话,有些人观点描述词会标“好看”,有些人就会标“很是好看”,这其实对最终预测结果影响不大,可是若是用字符重合率的方法,那会严重影响计算这个指标,因此说它两个差别比较大也是合理的。

四元组观点挖掘—Demo

上图是咱们一个简单的demo,输入一个样本,生成对应每一个属性的正负面,当点击某个属性的时候它对应的评价词位置就能够高亮出来,红色表明属性描述词,绿色表明观点描述词。上面说的人工评价就是这些结果预测出来后,人工看看预测是否合理。

总结

本篇文章主要介绍了情感分析的一些基本任务,包括文本、语音、图像还有生成、识别。对于文本情感分析任务作了详细介绍,重点介绍了两个工做,一个是属性级情感分析,这个是给定属性集合状况下,预测每一个属性的正负面,咱们将它构建成了一个多任务分类。另外一个工做比上面的粒度更细一点,不只要预测出属性正负面,还要定位出它具体的属性描述词和观点描述词的位置,咱们把它作成了一个抽取加分类的多任务联合模型,既包括抽取也包括分类。

对于将来的趋势,咱们在实际作的过程当中发现你们在工业界会碰到标注数据成本很是高的问题,每个任务基本上咱们须要标将近两万条数据,因此最终的效果准确率是比较高的。另外一方面,对于模型加速这部分,因为使用深度学习像bert这种预训练模型,它的推理成本仍是比较高的,咱们华为能够对硬件进行底层适配。对于领域迁移将来也是关注重点,怎么能从更低成本从某一领域迁移到另外一个领域,好比从汽车领域迁移到手机领域,或者从手机领域迁移到房地产领域等等。另外,还有自监督去训练超大规模的模型,好比像bert、roberta还有最近GPT3等等,这也是将来的趋势,而后再考虑如何将知识图谱加入到大模型当中进行知识加强来提高模型理解的效果。还有就是多模态这部分,怎么把图像、文本或者语音这些信息辅助来提高模型的效果。由于人在学习的时候不只参考了文本的信息,还有视觉方面的信息等等。如今对于多模态情感分析咱们也有一些工做正在作,好比说从视频中分析出一我的的情感,既考虑人脸的图像信息,也考虑他语音的一些信息,好比语气等等。

本文分享自华为云社区《细粒度文本情感分析及其应用》,原文做者:NLP9527。

点击关注,第一时间了解华为云新鲜技术~

相关文章
相关标签/搜索