自然语言处理之文本情感分类

一、概述

  文本情感分析(Sentiment Analysis)是指利用自然语言处理和文本挖掘技术,对带有情感色彩的主观性文本进行分析、处理和抽取的过程。情感分析任务按其分析的粒度可以分为篇章级,句子级,词或短语级;按其处理文本的类别可分为基于产品评论的情感分析和基于新闻评论的情感分析;按其研究的任务类型,可分为情感分类,情感检索和情感抽取等子问题。文本情感分析的基本流程如下图所示,包括从原始文本爬取,文本预处理,语料库和情感词库构建以及情感分析结果等全流程。

  情感分类又称情感倾向性分析,是对带有感情色彩的主观性文本进行分析、推理的过程,即分析对说话人的态度,倾向正面,还是反面。它与传统的文本主题分类又不相同,传统主题分类是分析文本讨论的客观内容,而情感分类是要从文本中得到它是否支持某种观点的信息。比如,“日媒:认为歼-31能够抗衡F-35,这种说法颇具恭维的意味。”传统主题分类是要将其归为类别为“军事”主题,而情感分类则要挖掘出日媒对于“歼-31能够抗衡F-35”这个观点,持反面态度。这是一项具有较大实用价值的分类技术,可以在一定程度上解决网络评论信息杂乱的现象,方便用户准确定位所需信息。按照处理文本的粒度不同,情感分析可分为词语级、短语级、句子级、篇章级以及多篇章级等几个研究层次。按照处理文本的类别不同,可分为基于新闻评论的情感分析和基于产品评论的情感分析。纵观目前主观性文本情感倾向性分析的研究工作,主要研究思路分为基于语义的情感词典方法和基于机器学习的方法。

二、基于情感词典的情感分类方法

  2.1 基于词典的情感分类步骤

​  基于情感词典的方法,先对文本进行分词和停用词处理等预处理,再利用先构建好的情感词典,对文本进行字符串匹配,从而挖掘正面和负面信息。如图:

  2.2 文本预处理及自动分词

  文本的预处理

  由网络爬虫等工具爬取到的原始语料,通常都会带有我们不需要的信息,比如额外的Html标签,所以需要对语料进行预处理。在《文本情感分类(一):传统模型》一文中,笔者使用Python作为我们的预处理工具,其中的用到的库有Numpy和Pandas,而主要的文本工具为正则表达式。经过预处理,原始语料规范为如下表,其中我们用-1标注消极情感评论,1标记积极情感评论。 

  句子自动分词

  为了判断句子中是否存在情感词典中相应的词语,我们需要把句子准确切割为一个个词语,即句子的自动分词。

  2.3 情感词典

​  情感词典包含正面词语词典、负面词语词典、否定词语词典、程度副词词典等四部分。一般词典包含两部分,词语和权重。


​  情感词典在整个情感分析中至关重要,所幸现在有很多开源的情感词典,如BosonNLP情感词典,它是基于微博、新闻、论坛等数据来源构建的情感词典,以及知网情感词典等。当然也可以通过语料来自己训练情感词典。

  2.4 情感词典文本匹配算法

​  基于词典的文本匹配算法相对简单。逐个遍历分词后的语句中的词语,如果词语命中词典,则进行相应权重的处理。正面词权重为加法,负面词权重为减法,否定词权重取相反数,程度副词权重则和它修饰的词语权重相乘。如图:

  利用最终输出的权重值,就可以区分是正面、负面还是中性情感了。

  2.5 缺点

  基于词典的情感分类,简单易行,而且通用性也能够得到保障。但仍然有很多不足:

  1)精度不高:语言是一个高度复杂的东西,采用简单的线性叠加显然会造成很大的精度损失。词语权重同样不是一成不变的,而且也难以做到准确。

  2)新词发现:​ 对于新的情感词,比如给力,牛逼等等,词典不一定能够覆盖。

  3)词典构建难:​ 基于词典的情感分类,核心在于情感词典。而情感词典的构建需要有较强的背景知识,需要对语言有较深刻的理解,在分析外语方面会有很大限制。

三、基于机器学习的情感分类方法  

  基于机器学习的情感分类即为分类问题,文本分类中的各方法均可采用,文本分类问题可查看我的另外一篇文章《自然语言处理之文本分类》。

  常见的分类算法有,基于统计的Rocchio算法、贝叶斯算法、KNN算法、支持向量机方法,基于规则的决策树方法,和较为复杂的神经网络。这里我们介绍两种用到的分类算法:朴素贝叶斯和支持向量机。情感分类模型的构建方法也很多,这里我们对《自然语言处理系列篇--情感分类》中的建模方法进行总结。

  3.1 分类算法

  3.1.1 朴素贝叶斯

  贝叶斯公式:$P(C|X)=P(X|C)P(C)/P(X)$

  先验概率P(C)通过计算训练集中属于每一个类的训练样本所占的比例,类条件概率P(X|C)的估计—朴素贝叶斯,假设事物属性之间相互条件独立,$P(X|C)=\prod P(x_{i}|c_{i})$。朴素贝叶斯有两用常用的模型,概率定义略有不同,如下:设某文档d=(t1,t2,…,tk),tk是该文档中出现过的单词,允许重复。

  • 多项式模型:

  先验概率P(c)= 类c下单词总数/整个训练样本的单词总数。

  条件概率P(tk|c)=(类c下单词tk在各个文档中出现过的次数之和+1)/( 类c下单词总数+|V|)

  • 伯努利模型:

  先验概率P(c)= 类c下文件总数/整个训练样本的文件总数。

  条件概率P(tk|c)=(类c下包含单词tk的文件数+1)/(类c下单词总数+2)

  通俗点解释两种模型不同点在于:计算后验概率时,对于一个文档d,多项式模型中,只有在d中出现过的单词,才会参与后验概率计算,伯努利模型中,没有在d中出现,但是在全局单词表中出现的单词,也会参与计算,不过是作为“反例”参与的。

  3.1.2 支持向量机模型SVM

  SVM展开来说较为复杂,这里借助两张图帮助概念性地解释一下。对于线性可分的数据,可以用一超平面f(x)=w*x+b将这两类数据分开。如何确定这个超平面呢?从直观上而言,这个超平面应该是最适合分开两类数据的直线。而判定“最适合”的标准就是这条直线离直线两边的数据的间隔最大。

  而对于线性不可分的数据,则将其映射到一个更高维的空间里,在这个空间里建立寻找一个最大间隔的超平面。怎么映射呢?这就是SVM的关键:核函数。

  现在常用的核函数有:线性核,多项式核,径向基核,高斯核,Sigmoid核。如果想对SVM有更深入的了解,请参考《支持向量机通俗导论(理解SVM的三层境界)》一文。

   3.2 情感分类系统的实现

  情感分类主要处理一些类似评论的文本,这类文本有以下几个特点:时新性、短文本、不规则表达、信息量大。我们在系统设计、算法选择时都会充分考虑到这些因素。情感分灰系统分为在线、离线两大流程,在线流程将用户输出的语句进行特征挖掘、情感分类、并返回结果。离线流程则负责语料下载、特征挖掘、模型训练等工作,系统结构如图3-1所示: 

图3-1 情感分类系统框架图 

  3.2.1 语料库建设

  语料的积累是情感分类的基石,特征挖掘、模型分类都要以语料为材料。而语料又分为已标注的语料和未标注的语料,已标注的语料如对商家的评论、对产品的评论等,这些语料可通过星级确定客户的情感倾向;而未标注的语料如新闻的评论等,这些语料在使用前则需要分类模型或人工进行标注,而人工对语料的正负倾向,又是仁者见仁、智者见智,所以一定要与标注的同学有充分的沟通,使标注的语料达到基本可用的程度。 

  3.2.2极性词挖掘

情感分类中的极性词挖掘,有一种方法是“全词表法”,即将所有的词都作为极性词,这样的好处是单词被全面保留,但会导致特征维度大,计算复杂性高。我们采用的是“极性词表法”,就是要从文档中挖掘出一些能够代表正负极性的词或短语。如已知正面语料“@jjhuang:微信电话本太赞了!能免费打电话,推荐你使用哦~”,这句话中我们需要挖掘出“赞”、“推荐”这些正极性词。分为以下两步:

  1)文本预处理 语料中的有太多的噪音,我们在极性词挖掘之前要先对文本预处理。文本预处理包含了分词、去噪、最佳匹配等相关技术。分词功能向大家推荐腾讯TE199的分词系统,功能强大且全面,拥有短语分词、词性标注等强大功能。去噪需要去掉文档中的无关信息如“@jjhuang”、html标签等,和一些不具有分类意义的虚词、代词如“的”、“啊”、“我”等,以起到降维的作用。最佳匹配则是为了确保提出的特征能够正确地反映正负倾向,如“逍遥法外”一词,如果提取出的是“逍遥”一词,则会被误认为是正面情感特征,而“逍遥法外”本身是一个负面情感词,这里一般可以采用最长匹配的方法。

  2)极性词选择 文本预处理之后,我们要从众多词语中选出一些词作为极性词,用以训练模型。我们对之前介绍的TF-IDF方法略作变化,用以降维。因为我们训练和处理的文本都太短,DF和TF值大致相同,我们用一个TF值就可以。另外,我们也计算极性词在反例中出现的频率,如正极性词“赞”必然在正极性语料中的TF值大于在负极性语料中的TF值,如果二者的差值大于某个域值,我们就将该特征纳入极性词候选集,经过人工审核后,就可以正式作为极性词使用。 

  3.2.3极性判断

  极性判断的任务是判断语料的正、负、中极性,这是一个复杂的三分类问题。为了将该问题简化,我们首先对语料做一个主客观判断,客观语料即为中性语料,主观语料再进行正、负极性的判断。这样,我们就将一个复杂三分类问题,简化成了两个二分类问题。如下:

  在分类器选择中,主客观判断我们使用了上节介绍的支持向量机模型。而极性判断中,我们同时使用了朴素贝叶斯和支持向量机模型。其中朴素贝叶斯使用人工审核过的极性词作特征,而支持向量机模型则使用全词表作为特征。两个模型会对输入的语料分别判断,给出正、负极性的概率,最后由决策模块给出语料的极性。

  在朴素贝叶斯模型中,我们比较了多项式模型和伯努力模型的效果。伯努力模型将全语料中的单词做为反例计算,因为评测文本大多是短文本,导致反例太多。进而伯努力模型效果稍差于多项式模型,所以我们选择了多项式模型。 

  支持向量机模型中,我们使用的是台湾大学林智仁开发的SVM工具包LIBSVM,这是一个开源的软件包,可以解决模式识别、函数逼近和概率密度估计等机器学习基本问题,提供了线性、多项式、径向基和S形函数四种常用的核函数供选择。LIBSVM 使用的一般步骤是:

  1. 按照LIBSVM软件包所要求的格式准备数据集;
  2. 对数据进行简单的缩放操作;
  3. 考虑选用RBF 核函数;
  4. 采用交叉验证选择最佳参数C与g;
  5. 采用最佳参数C与g 对整个训练集进行训练获取支持向量机模型;
  6. 利用获取的模型进行测试与预测。

  上述介绍的是我们通用的情感分类系统,面对的是通用的主观评论语料。但在一些领域中,某些非极性词也充分表达了用户的情感倾向,比如下载使用APP时,“卡死了”、“下载太慢了”就表达了用户的负面情感倾向;股票领域中,“看涨”、“牛市”表达的就是用户的正面情感倾向。所以我们要在垂直领域中,挖掘出一些特殊的表达,作为极性词给情感分类系统使用:

  垂直极性词 = 通用极性词 + 领域特有极性词

  该系统即为垂直领域的情感分类系统。

  3.3 系统优化

  情感分类的工作,在现在和未来还可以做更多的工作来对系统进行优化:

  1. 挖掘更多的极性词(多领域)
  2. 尝试不同的分类器,调优现有的模型
  3. 句式识别:否定句,转折句,排比句等……
  4. 语料清洗:识别水军评论和用户评论
  5. 极性词扩展:采用近义词、反义词等方法,将挖掘的极性词扩展更多 

 

参考:

https://blog.csdn.net/weixin_42398658/article/details/85222547

https://blog.csdn.net/weixin_41657760/article/details/93163519

https://zhuanlan.zhihu.com/p/25868008

相关文章

python方向·数据分析   ·自然语言处理nlp   案例:中...
原文地址http://blog.sina.com.cn/s/blog_574a437f01019poo....
ptb数据集是语言模型学习中应用最广泛的数据集,常用该数据集...
 Newtonsoft.JsonNewtonsoft.Json是.Net平台操作Json的工具...
NLP(NaturalLanguageProcessing)自然语言处理是人工智能的一...
做一个中文文本分类任务,首先要做的是文本的预处理,对文本...