精华内容
下载资源
问答
  • 基于双向时间深度卷积网络的中文文本情感分类
  • 中文文本情感分类及情感分析资源大全

    万次阅读 多人点赞 2018-10-03 22:43:49
    本文主要是基于机器学习方法的中文文本情感分类,主要包括:使用开源的Markup处理程序对XML文件进行分析处理、中科院计算所开源的中文分词处理程序ICTCLAS对文本进行分词处理、去除停用词等文本预处理,在基于向量...

    摘要:20世纪初以来,文本的情感分析在自然语言处理领域成为了研究的热点,吸引了众多学者越来越多的关注。对于中文文本的情感倾向性研究在这样一大环境下也得到了显著的发展。本文主要是基于机器学习方法的中文文本情感分类,主要包括:使用开源的Markup处理程序对XML文件进行分析处理、中科院计算所开源的中文分词处理程序ICTCLAS对文本进行分词处理、去除停用词等文本预处理,在基于向量空间模型VSM的文本表示,使用卡方统计量CHI的进行特征选择,TFIDF权值计算方法进行的特征权值计算,最后使用支持向量机SVM进行中文文本情感的分类。在实验过程中,对比了特征数量的大小对情感分类结果的影响、布尔权值、TF权值和TFIDF权值三种不同计算方法对情感分类结果的影响以及SVM分类器对于不同类型文本数据的分类效果。从整个实验结果来看,TFIDF权值计算相较于其他两种更有利于文本的情感分类。SVM分类器作为文本情感分类器对于不同类型的文本数据,其分类效果不同,但总体上取得了较好的效果。

     

    关键词:中文文本情感分类  SVM分类器  特征选择

     

    1绪论

    1.1国内外研究现状

    文本情感分类是文本分类中的一个重要分支,也称之为意见挖掘。简而言之,文本的情感分类就是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程[1]。情感分类中,按照处理文本的粒度不同,可分为词语短语级、句子级、篇章级等几个研究层次[2]。在此,对词语短语级的情感分类进行详细阐述。在情感分析中可以认为构成篇章的基本单位包括词、短语、和固定搭配,对于它们的褒贬程度的度量是判别文本情感倾向的基础。国外许多学者做了大量研究,其主要研究方法分为基于字典和基于语料库两种。

    基于语料库的词语短语级的情感判别主要是根据它们的语法特性,对大规模语料库进行信息挖掘,从而得到统计数据并对其极性做出判断。在研究早期,学者发现由某些连词连接的形容词具有相同或相反的极性,Hatzivassilolou和Mckeown[4]利用大规模语料库华尔街日报中的连接词信息来自动识别形容词的情感倾向,利用聚类算法将它们归属于褒义或贬义的类别集合。Turney和Littman[5]提出了点互信息的方法判别词的褒贬倾向。Dave等[6]从语料中抽取特征集合,通过分析此特征集合和己标记文本的关系来判定词汇的语义倾向。

    基于词典的词语短语的情感判别,主要是根据词典WordNet或HowNet中词语间的关联来判别词语的极性。sista等[7]将GI(General Inquirer)和WordNet中的褒义和贬义词作为种子词,得到一个扩展后的较大规模情感词集合,并以此作为分类特征,利用机器学习方法对文本褒贬义进行了自动分类。Faye Baron和Graeme Hirst[8]从文档中抽取倾向性强的搭配作为种子词汇,取得了较好的分类效果。相对于英语,中文的词汇、短语的情感分析研究起步较晚。中科院自动化所的王根等[9]提出了词语倾向性的极坐标方式,并采用均衡化的互信息方法计算了词语倾向性。北京理工大学的李钝博士[10]把短语归结为一个非递归的基本词汇及依存关系的集合,提出了一种基于短语中心词之间依存概率统计分析方法,并将其应用于对短语的倾向性和倾向强度的计算。

    1.2存在的问题和挑战

    情感分类的应用十分广泛,因此近年来的发展迅速,取得的不小的进步,同时我们也该看到,由于情感分类问题较复杂,不仅仅是单一的文本分类或文本挖掘任务,因而在研究过程中还存在很多问题与挑战。

    1)情感语义的机器理解问题

    人类的自然语言情感表达十分复杂,特别是网络评论的形式更加灵活多变,要使机器精确的理解文本中的情感内容,不能简单的提取词语作为特征,还必须结合语言学方面的知识,借助于文本上下文和领域相关性对情感语义进行分析处理。

    2)特征提取问题

    文本分类中一般采用词袋法表示文本的特征,然而由于情感表达中有许多诸如隐喻、反话等复杂的语言形式,且上下相关,因此简单采用词袋法提取特征并进行分析的效果极其有限,如何提取对情感分析具有更大价值的特征依然是一个有待完善的课题。

    3)领域依赖

    由于情感表达在不同的领域差别较大,所以无论是在有监督的学习方法还是无监督学习方法,情感分类都面临着领域依赖问题。

    4)语料库建设问题

    情感分类领域,许多研究者自己通过互联网获取语料,并进行人工标注,即使相同领域语料,但语料内容相差较大且标注标本不统一,造成实验结果很难进行比较。特别是在中文的情感研究领域,国内的公开语料库较少,资源匮乏。

     

    2基于机器学习的文本分类方法

    基于机器学习的情感分类问题,它的处理过程大致可以分为两个部分,一部分是学习过程,另一部分是情感分类过程。其中,学习过程包括训练过程和测试过程,训练过程中对训练集进行训练得到分类器,用其对测试集进行情感分类,将测试的结果反馈给分类器,进一步改进训练方法,生成新的分类器,最后利用最终生成的分类器对新的文本进行情感分类,其基本流程如图1所示。

    图1 基于机器学习的文本情感分类流程图

     

    2.1文本预处理

    文本的预处理是进行文本情感分类的第一步,预处理结果的好坏直接影响到今后的分析处理能否顺利进行。文本预处理的目的是从文本语料库中规范地提取出主要内容,去除与文本情感分类不相关的信息。对于中文的预处理,其主要操作包括规范编码,过滤非法字符,分词处理,去除停用词等步骤。

    1)文件规范编码处理

    从网上下载的语料库存储格式可能千差万别,对实验带来很大困扰。所以第一步一般都是对语料库进行数据格式的归一化处理。

    2)中文分词处理

    中文文本单词之间没有天然的分隔符,因此在提取特征之前,首先要对中文文本进行分词。分词处理能够将连续的汉字序列按照一定的规则重新切分为词或词组。切分好的词或词组将会作为文本的特征用于情感分类分析过程,因此能否高效、正确的对中文进行分词成为中文情感分析的重要任务。中国科学院计算技术研究所专门开发了汉语词法分析系统ICTCLAS(Institute of Computing Technology,ChineseLexical Analysis System)。ICTCLAS的主要功能包括中文分词、词性标注、新词识别、命名实体识别等功能,它的分词性能和分词精度都较高,是目前最受好评的汉语分词开源系统。

    3)停用词去除

    文本中包含许多助词、虚词等词性的单词以及在文本中经常出现的高频词汇但其本身对情感分类意义不大,这些词汇我们将它们统称为停用词。停用词表的构造一般有两种方式,人工方式或机器自动统计。停用词的存在不但会增加存储空间,而且很可能形成噪声,影响情感分类的精度,因此需要过滤文本中的停用词。

    2.2文本表示模型

    文本是一种非结构化的数据,由大量字符构成,计算机无法直接处理字符类型的数据,因此需要将普通文本的内容转变为计算机能够读懂的数据形式,即将文本进行形式化表示。本文采用向量空间模型来表示文本。

    向量空间模型(VSM)[11]是由salton等人在1975年提出的一个基于统计的文本表示模型,并成功的应用在著名的SMART系统中。向量空间模型可以形式化的表述为,对于给定的文本D=D{t1,w1;t2,w2;…tn,wn}其中ti表示第i个特征项(最小不可分割的语言单位,如字、词、短语),wi表示特征项ti所拥有的权值,n为特征项的总数。每一个文本可以表示为一个向量(w1,w2…wn),wi的计算可以使用布尔权重法,词频权重和TFIDF权重。

    向量空间模型对文本的表示效果较好,可以将文档表示成空间向量进行运算,且具有较强的可计算性和可操作性。向量空间模型是文本分类中应用最为广泛的文本形式化模型。向量空间模型的缺点也十分明显,忽略了特征的次序和位置关系,且不考虑文本的长度,不考虑语义联系,认为所有的特征项都是独立的,只考虑文本所属类别的文档中出现特征项的频率,在情感分类的应用中存在一定的局限性。

    2.3特征选择

    在对文本进行预处理并对其进行形式化表示后,得到了一个高维稀疏的特征空间,特征的数量可以达到几万维甚至是几十万维,不仅使得运算时间变长,而且会在很大程度上降低分类的准确度。特征选择(Feature Selection)就是从原始的高维特征集合中选择一小部分特征作为分类器的分类特征。特征选择过程需要通过构造好的评估函数对每个特征进行评分,然后按照评分的大小对特征向量进行降序排序,最后选择一定数量的特征作为分类特征集合。目前常用的特征选择方法有文档频率(DF)、信息增益(IG)、统计量(CHI)、期望交叉熵(ECE)和互信息(MI)等,本文采用卡方统计量来进行特征选择,并选取了不同数量的特征进行了对比测试。

    卡方统计方法[12]用来衡量特征tj和文档类别Cj之间的统计相关强度,并假设tj和Cj之间符合具有一阶自由度的X2分布。特征相对某类的X2统计值越高,则其含有的信息量越多,与该类的相关性越大。CHI的计算公式如下:

                 

    其中,tj表示特征项,Ci表示类别,N表示文本总数,A表示包含特征tj,且属于类别Ci的文档数,B表示包含特征tj,但不属于类别Ci的文档数,C表示属于类别Ci但不包含特征tj,的文档数,D表示不属于类别Ci且不包含特征tj的文档数。当有多个类别时,分别计算特征tj对每个类别的CHI,然后取最大值作为特征的CHI值。CHI特征选择方法可以在降低85%以上特征维度的情况下取得较好的分类结果。

    2.4特征加权

    特征选择过程中选择了最能代表文本内容的特征向量,但是这些特征对文本分类的影响不尽相同,因此,有必要对经过选择的特征进行加权,对表征能力强的特征赋予较大权重,对具有较弱类别区分能力的特征赋予较小的权重,这样可以有效抑制噪声。特征加权(Feature Weighting)就是对特征集合中每个特征根据其对分类的贡献程度赋予一定权值的过程。常用的特征加权方法有布尔权重,词频权重,TFIDF权重。本文分别使用了这三种权重计算方法,并对三种方法得到的分类结果进行了对比分析。

    设文本类别集合D={d1,d2,…,dn},dk∈D(k=1,2,…,n),n为文本总数;类别集合C={c1,c2,…,cm},ci∈C(i=1,2,...,m),特征集合T={t1,t2,…,tn},tj∈T(j=1,2,...,n),m为特征总数;wij表示特征tj在文本dk中的权重。

    1)布尔权重(Boolean Weighting)

    布尔权重是最简单的权重计算方法,其计算公式如下:

    若特征tj,在文本di中出现,则其权重wij为1;若特征tj在文本di中不出现,则其权重wij为0。

    2)词频权重(Term Frequency,TF)

    词频权重是指用特征在文本中的出现次数作为权重。不同类别的文本集合,特征出现的频率有较大差异,因此特征频率信息可以作为文本分类的重要参考之一。一般情况下,对于一个类别,出现频率较高的特征应该包含更多的类别信息,说明此特征对分类具有重要的意义,以词频作为参考赋予较大权重,反之应该赋予较小权重。TF权重计算公式如下:

    其中tfij表示特征tj在类别ci中出现的次数。

    词频权重相对于布尔权重,不再是均值权重,而是根据文本集合中特征出现的次数对特征进行加权,从权值函数构造来看有了一定的进步,然而词频权值对高频特征过度依赖,忽略了一些带有大量类别信息的低频特征。

    3)TFIDF权重

    将特征词频和逆文档频率相结合用于特征权重计算,在实验中取得了较好的效果,因此TFIDF也成为了最经典也是最广泛使用的一种特征权重计算方法。逆文档频率(InverseDocument Frequency,IDF)是以包含特征的文档数为参数构造特征权重函数。其核心思想是:在大多数文档中出现的特征所带有的类别信息相比于在少量文本中出现的特征较少,也就是说,若一个特征同时出现在多个文档中,它所携带的类别信息较少,它的重要程度较低。逆文档频率在计算时常采用对数形式,其计算公式如下:

    其中,ni为文本集合中包含特征tj的文本数。

    集合次品权重函数就形成了TFIDF权重,计算公式如下:

    其中,tfij表示特征tj在文本ci中出现的次数,ni为文本集合中包含特征ti的文本数。

    为了消除文本长度对特征权重的影响,要对特征的权重进行归一化处理,归一化后的TFIDF特征权重函数如下:

    2.5分类方法

    分类器是文本分类问题中的核心部分,在进行文本分类过程中常用的分类器有朴素贝叶斯分类器(NB),支持向量机(SVM),最大熵分类器(ME),K近邻分类器(KNN)等,本文中主要使用支持向量机来进行分类,用现有的LibSVM完成实际操作,并对book类别、dvd类别和music类别的训练集分别进行了测试,对比测试结果。

    支持向量机(Support Vector Machine)是Cortes和Vapnik[13]等人首先提出,它在解决小样本、非线性及高维模式识别中表现出许多优势,并能够推广应用到函数拟合等其他机器学习问题中。其基本思想是首先通过非线性变换将输入空间映射到一个高维特征空间,然后根据核函数在这个新空间中求取最优线性分类平面。将支持向量机应用于文本分类表现尤为突出,其分类的精确率和召回率都较高,且具有较好的稳定性,虽然它在大数据集上的训练收敛速度较慢,需要大量的存储资源和较高的计算能力,但其分隔面模式有效地克服了特征冗余、样本分布以及过拟合等因素的影响,具有较好的泛化能力。

    2.6评价标准

    在进行文本分类实验时,需要将文本集合划分为训练集合和测试集合,在进行划分时一般采用K折交叉验证法,将其得到的实验结果的平均值作为实验的最终结果。对结果的评价已经有了许多标准,常用的有查准率、查全率等。

    查准率是指分类器判别为ci类别的文本数与实际属于ci类别的文本数的比值,其计算公式如下:

    查全率是指实际属于ci类别的文本数与分类器判别为ci类别的文本数的比值,其计算公式如下:

    查准率和查全率分别反映分类器不同方面的性能:查准率反映分类器的准确性,查全率反映分类器的完备性。采用准确率还是召回率作为分类器的评价性能取决于实验者所侧重的目标,两个评价标准是互补的,单纯提高其中一个评价标准会导致另一个评价标准的降低。对于一个优良的分类器应该同时具备较高的查准率和查全率。

     

    3实验方法与步骤

    为了更好的理解情感分类的相关算法与步骤,结合相关论文方法与语料库进行了一系列的实验。实验过程框架图如图2所示,实验步骤如下:

    1)  将训练文本数据文件作为XML文件处理,提取评论文本数据信息;

    2)  对评论文本数据进行中文分词处理与停用词去除处理,并统计词频;

    3)  结合预处理结果、词频信息以及情感标签,使用CHI方法进行特征选择;

    4)  对评论文本进行特征权值计算并归一化权值,使用VSM模型表示文本;

    5)  结合归一化后的特征权值向量,利用支持向量机分类器进行分类器训练;

    6)  对测试文本进行情感分类的学习预测。

    图2 中文情感分类实验框架图

    结合实验框架图的基础上,针对分类过程中的各个部分,通过大量的实验进行验证。主要包括以下几个方面:

    1)  特征数量的大小对情感分类结果的影响。按照理论情况,选取全部的特

    征必然会得到最好的分类效果,但是会导致特征维数的急剧增大,从而导致“维数灾难”,以至后续的分类将会很难进行。故通过实验验证特征数量对分类效果的影响,力求做到能够在不大幅度降低分类效果的基础上,选取一个合适并且便于计算的特征数量。

    2)  布尔权值、TF权值和TFIDF权值三种不同计算方法对情感分类结果的影

    响 。从大量的论文中分析得出,TFIDF权值计算方法在情感分类中效果最好,这里通过实验对三种不同的权值计算方法进行验证。

    3)  SVM分类器对于不同类型文本数据的分类效果。不同类型的数据语料由

    于其内容以及情感变化的不同,在同时使用SVM分类器的过程中其分类效果可能不同。故采取实验的方法验证不同类型文本数据在使用SVM分类器进行情感分类的效果区别。

        最后,结合上述三个实验验证结果,对给定的测试语料进行情感分类实验。

     

    4实验结果及分析

    4.1 实验数据与程序说明

    整个实验的相关算法利用C++在Windows平台下完成,使用ICTCLAS中文分词开源程序、LibSVM以及开源的XML文件处理程序Markup完成。具体实验代码详见附件。

    实验使用的数据集分为三类,分别为book、dvd和music三类评论文本数据。三类数据集的情况如表2所示:

    表2 实验语料数据情况说明表

    4.2 特征数量的大小对情感分类影响实验

    实验对book类别训练集进行测试,分别使用预处理处理后得到的特征集合的10%,15%与20%作为选取的特征。文本的特征权值计算使用TFIDF方法,使用SVM分类器进行训练集的分类训练。在不同特征数量的情况下,训练集的最优分类率如表3所示:

    表3不同特征数量最优分类率表

     

    4.3 不同权值计算方法对情感分类结果影响实验

    实验对book类别训练集进行测试,分别使用预处理处理后得到的特征集合的10%作为选取的特征,文本的特征权值计算分别使用布尔方法、TF方法和TFIDF方法,使用SVM分类器进行训练集的分类训练。在不同权值计算方法的情况下,训练集的最优分类率如表4所示:

    表4不同权值计算方法下最优分类率表

    4.4 SVM分类器对于不同类型文本数据分类效果实验

    实验分别对book类别、dvd类别和music类别训练集进行测试,分别使用预处理处理后得到的特征集合的10%作为选取的特征,文本的特征权值计算使用TFIDF方法,使用SVM分类器进行训练集的分类训练。在不同类型数据情况下,训练集的最优分类率如表5所示:

    表5 不同文本数据使用SVM分类最优分类率表

    4.5测试文本数据分类实验

    结合上述三个实验结果,分别对book类别、dvd类别和music类别测试集进行分类实验。实验过程中使用预处理处理后得到的特征集合的10%作为选取的特征,文本的特征权值计算使用TFIDF方法,使用SVM分类器进行训练集的分类训练。三种不同文本测试数据的分类效果如表6所示:

    表6测试文本数据分类结果表

     

     

    5总结

    本文主要是对基于机器学习方法的情感文本分类做了初步的研究,

    取得了一定的研究成果,但得到的结果还有很大的提升空间,就本文而言,在许多方面还需要进一步的研究和改进。

    情感分类是一个具有挑战性的研究课题,其问题更加复杂,同一方法应用于不同语料所产生的结果存在较大差异,本文中只在3个类别的数据集上进行了实验,应将该方法应用于更多的数据集进行对比分析研究。此外,分类器的融合方法还有多种,可以进一步实验其他融合策略对于情感分类性能的影响。

    从整个实验结果来看,TFIDF权值计算相较于其他两种更有利于文本的情感分类。SVM分类器作为文本情感分类器对于不同类型的文本数据,其分类效果不同,但总体上取得了较好的效果。

    该博客收集情感分析领域中一些语料、词典等。
      如果引用到下列语料、词典等数据,出于尊重作者的学术成果,在文章中还请引用相关的文献。

    1 语料库

    1.1 谭松波-酒店评论语料-UTF-8,10000条

      现在网上大部分谭松波老师的评论语料资源的编码方式都是gb2312,本资源除了原始编码格式,还具有UTF-8编码格式。 本资源还包含将所有语料分成pos.txt和neg.txt两个文件,每个文件中的一行代表原始数据的一个txt文件,即一篇评论。
      下载地址为:谭松波-酒店评论语料-UTF-8,10000条

    1.2 SemEval-2014 Task 4数据集

    SemEval-2014 Task 4数据集主要用于细粒度情感分析,包含Laptop和Restaurant两个领域,每个领域的数据集都分为训练数据、验证数据(从训练数据分离出来)和测试数据,非常适用于有监督的机器学习算法或者深度学习算法,如LSTM等。文件格式为.xml,其数据统计如下:
    这里写图片描述
    下载地址为: SemEval-2014 Task 4数据集

    1.3 Citysearch corpus

    该语料库为餐馆评论数据,收集自Citysearch New York网站,可用于细粒度的情感分析任务中,即aspect extraction任务当中。在本资源中,分为原始数据和处理后数据两部分,其统计如下:
    这里写图片描述
    其中,训练数据不包含标注信息;测试数据中包含标注信息,标注类别为预先定义的6个aspect类型,依次为Food、Staff、Ambience、Price、Anecdotes和Miscellaneous,可用于验证模型的有效性;在处理后数据文件夹中,还包含对应的词嵌入模型。
    下载地址:Citysearch corpus

    1.4 BeerAdvocate

    该语料为啤酒评论数据,共150W条评论,可用于细粒度的情感分析任务当中,即aspect extraction任务当中。
    由于资源大小的限制,本资源分为原始数据和处理后的数据。在原始数据当中,包含1000条带标注信息的评论,共9245条句子,标注类别为Feel、Look、Smell、Taste和Overall五种Aspect类别;在处理后数据当中,包含相应的词嵌入模型。
    原始数据下载地址:BeerAdvocate–Source
    处理后数据下载地址:BeerAdvocate–Preprocess

    1.5 NLPCC2014评估任务2_基于深度学习的情感分类

    该语料共包含中文和英文两种语言,主要是商品评论,评论篇幅都比较短,可以被应用于篇章级或者句子级的情感分析任务。数据集被分为训练数据、测试数据、带标签的测试数据三个文件,共有正向和负向两种极性。
    下载地址:NLPCC2014评估任务2_基于深度学习的情感分类

    1.6 NLPCC2013评估任务_中文微博观点要素抽取

    该语料主要用于识别微博观点句中的评价对象和极性。训练数据由两个微博主题组成,每个主题各一百条,内含标注及数据说明。
    下载地址:NLPCC2013评估任务_中文微博观点要素抽取

    1.7 NLPCC2013评估任务_中文微博情绪识别

    该语料主要用于识别出整条微博所表达的情绪,不是简单的褒贬分类,而是涉及到多个细粒度情绪类别(例如悲伤、忧愁、快乐、兴奋等),属于细粒度的情感分类问题。
    下载地址:NLPCC2013评估任务_中文微博情绪识别

    1.7 NLPCC2013评估任务_跨领域情感分类

    给定已标注倾向性的英文评论数据和英文情感词典,要求只利用给出的英文情感资源进行中文评论的情感倾向分类。该任务注重考察多语言环境下情感资源的迁移能力,有助于解决不同语言中情感资源分布的不均衡问题。
    下载地址:NLPCC2013评估任务_跨领域情感分类

    1.8 NLPCC2012评估任务_面向中文微博的情感分析

    该语料主要用于中文微博中的情感句识别、情感倾向性分析和情感要素抽取。
    下载地址:NLPCC2012评估任务_面向中文微博的情感分析

    1.9 康奈尔大学影评数据集

    该语料由电影评论组成,其中持肯定和否定态度的各1,000 篇;另外还有标注了褒贬极性的句子各5331句,标注了主客观标签的句子各5000句。该语料可以被应用于各种粒度的情感分析,如词语、句子和篇章级情感分析研究中。
    下载地址:康奈尔大学影评数据集

    1.10 MPQA

    Janyce Wiebe等人所开发的MPQA(Multiple-Perspective QA)库:包含535 篇不同视角的新闻评论,它是一个进行了深度标注的语料库。其中标注者为每个子句手工标注出一些情感信息,如观点持有者、评价对象、主观表达式以及其极性与强度。
    下载地址:MPQA

    1.11 Twitter Comments

    该语料主要来自于Twitter上面的评论数据集,分为训练数据和测试数据,分别有6248条和692条Twitter。在文件中,每条推特被分为三行,第一行为评论句子、第二行为评价对象、第三行为情感极性。通常每条句子只包含一个评价对象。在情感极性中,用-1、0、1分别代表负向、中性、正向,三个极性的条数分别在语料中占25%、50%、25%。该语料来自于以下工作。
    Paper:Dong L, Wei F, Tan C, et al. Adaptive Recursive Neural Network for Target-dependent Twitter Sentiment Classification[C]// Meeting of the Association for Computational Linguistics. 2014:49-54.
    下载地址:Twitter Comments

    2 词典

    2.1 大连理工大学中文情感词汇本体库(无辅助情感分类)

    中文情感词汇本体库是大连理工大学信息检索研究室在林鸿飞教授的指导下经过全体教研室成员的努力整理和标注的一个中文本体资源。该资源从不同角度描述一个中文词汇或者短语,包括词语词性种类、情感类别、情感强度及极性等信息。
    中文情感词汇本体的情感分类体系是在国外比较有影响的Ekman的6大类情感分类体系的基础上构建的。在Ekman的基础上,词汇本体加入情感类别“好”对褒义情感进行了更细致的划分。最终词汇本体中的情感共分为7大类21小类。
    构造该资源的宗旨是在情感计算领域,为中文文本情感分析和倾向性分析提供一个便捷可靠的辅助手段。中文情感词汇本体可以用于解决多类别情感分类的问题,同时也可以用于解决一般的倾向性分析的问题。
    其数据格式介绍如下:
    这里写图片描述
    下载地址为:http://download.csdn.net/download/qq280929090/10215956
    由于在某些情感分析文献当中,需要对情感程度进行归一化,将随后添加归一化版本。
    本版本去掉辅助情感分类,主要是由于其对实验帮助非常小,而且增加了处理的复杂性。

    2.2 台湾大学中文情感极性词典(NTUSD)

    该词典为简体的情感极性词典,共包含2812个正向情感词和8278个负向情感词,可以用于二元情感分类任务当中。
    下载地址为:http://download.csdn.net/download/qq280929090/10215985

    2.3 清华大学李军中文褒贬义词典(TSING)

    该词典共包含褒义词5568个和贬义词4470个。
    下载地址:http://download.csdn.net/download/qq280929090/10216029

    2.4 知网情感词典(HOWNET)

    该词典主要分为中文和英文两部分,共包含如下数据:中文正面评价词语3730个、中文负面评价词语3116个、中文正面情感词语836个、中文负面情感词语1254个;英文正面评价词语3594个、英文正面评价词语3563个、英文正面情感词语769个、英文负面情感词语1011个。
    下载地址:http://download.csdn.net/download/qq280929090/10216044

    2.5 知网程度副词词典(HOWNET)

    该词典主要发呢为中文和英文两部分,共包含如下数据:中文程度级别词语219个、英文程度级别词语170个。
    下载地址:http://download.csdn.net/download/qq280929090/10216051

    2.6 知网主张词语词典(HOWNET)

    该词典主要发呢为中文和英文两部分,共包含如下数据:中文主张词语38个、英文主张词语35个。
    下载地址:http://download.csdn.net/download/qq280929090/10216055

    3 预训练词嵌入

    3.1 Google预训练词嵌入

    3.2 Glove预训练词嵌入

    该预训练词嵌入根据斯坦福大学提出的Glove模型进行训练,主要包括如下四个文件:
    1) glove.6B:Wikipedia 2014 + Gigaword 5 (6B tokens, 400K vocab, uncased, 50d, 100d, 200d, & 300d vectors, 822 MB download)
    2) glove.42B.300d:Common Crawl (42B tokens, 1.9M vocab, uncased, 300d vectors, 1.75 GB download)
    3)glove.840B.300d:Common Crawl (840B tokens, 2.2M vocab, cased, 300d vectors, 2.03 GB download)
    4)glove.twitter.27B:Twitter (2B tweets, 27B tokens, 1.2M vocab, uncased, 25d, 50d, 100d, & 200d vectors, 1.42 GB download)
    下载地址为:Glove预训练词嵌入

    展开全文
  • 一种基于情感词典和朴素贝叶斯的中文文本情感分类方法
  • 基于朴素贝叶斯理论提出了一种新的中文文本情感分类方法。这种方法利用情感词典对文本进行处理和表示,基于朴素贝叶斯理论构建文本情感分类器,并以互联网上宾馆中文评论作为分类研究的对象。实验表明,使用提出的...
  • 基于pytorch的Bi-LSTM中文文本情感分类

    千次阅读 2020-10-23 20:15:33
    基于pytorch的Bi-LSTM中文文本情感分类 前言 情感分析(Sentiment Analysis),也称为情感分类,属于自然语言处理(Natural Language Processing,NLP)领域的一个分支任务,随着互联网的发展而兴起。多数情况下该...

    基于pytorch的Bi-LSTM中文文本情感分类

    目录

    基于pytorch的Bi-LSTM中文文本情感分类

    一、前言

    二、数据集的准备与处理

    2.1 数据集介绍

    2.2 文本向量化

    2.3 数据集处理

    三、模型的构建

    3.1 LSTM的介绍

    3.2 Bi-LSTM+embedding+logsoftmax模型构建

    四、模型训练与评估

    五、小结与反思

    参考文献


    一、前言

    情感分析(Sentiment Analysis),也称为情感分类,属于自然语言处理(Natural Language Processing,NLP)领域的一个分支任务,随着互联网的发展而兴起。多数情况下该任务分析一个文本所呈现的信息是正面、负面或者中性,也有一些研究会区分得更细,例如在正负极性中再进行分级,区分不同情感强度.

    文本情感分析(Sentiment Analysis)是自然语言处理(NLP)方法中常见的应用,也是一个有趣的基本任务,尤其是以提炼文本情绪内容为目的的分类。它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程。

    情感分析中的情感极性(倾向)分析。所谓情感极性分析,指的是对文本进行褒义、贬义、中性的判断。在大多应用场景下,只分为两类。例如对于“喜爱”和“厌恶”这两个词,就属于不同的情感倾向。

    本文将采用LSTM模型,训练一个能够识别文本postive, negative情感的分类器。本文的数据集采用的2019年SMP - ECISA “拓尔思杯”中文隐式情感分析评测的官方公布的数据集,下载链接如下所示:

    https://www.biendata.xyz/competition/smpecisa2019/Evaluation/

           在本文中将该数据集中的中性情感删除,做成了一个二分类的问题(也可理解为回归问题),根据机器学习的经验,我的大致思路流程如下:

    1. 准备与处理数据集
    2. 构建模型
    3. 模型训练
    4. 模型评估

    在此思路的基础上在2.2.1与2.2.2节讲解对于文本分词以及词向量化的相关内容,以及在2.3.2也具体讲解了文本序列化的内容,最后三四节简短的写了关于模型的构建,训练以及评估。(因为在我看来,这次实战最重要的就是对文本数据集的处理以及对模型的batch,输出以及输出的理解。)

    二、数据集的准备与处理

    2.1 数据集介绍

    本次“拓尔思杯”中文隐式情感分析评测使用的数据集由山西大学提供,数据来源主要包括微博、旅游网站、产品论坛,主要领域/主题包括但不限于:春晚、雾霾、乐视、国考、旅游、端午节等。

    本次评测中,我们将使用一个大规模情感词典,过滤掉所有包含显式情感词的文本。对这类不含显式情感词的数据进行标注,将数据标注为:褒义隐式情感、贬义隐式情感以及不含情感倾向的句子。评测数据以切分句子的篇章形式发布,保留了完整的上下文内容信息。

    训练数据集包括篇章12664篇,其中标注数据14774句,褒义、贬义隐式情感句分别为3828、3957句,不含情感句为6989句。验证集包括篇章4391篇,其中标注数据5143句,褒义、贬义隐式情感句分别为1232、1358句,不含情感句为2553句。测试数据集包括篇章6380篇,其中标注数据3800句,褒义、贬义隐式情感句为919和979句,不含情感句为1902句。其余为混淆数据,混淆数据不作为测点,在最终结果评测时会预先去除。      

    数据集以xml格式发布,内容形式为:

    <Doc ID="5">

        <Sentence ID="1">因为你是老太太</Sentence>

        <Sentence ID="2" label="1">看完了,满满的回忆,很多那个时代的元素</Sentence>

    </Doc>

    红色加粗为标记句子,含有完整的上下文,标签为:0-不含情感,1-褒义隐式情感,2-贬义隐式情感[1]。

     

    2.2 文本向量化

    2.2.1 文本分词

    1. 文本的tokenization

    tokenization就是通常所说的分词,分出的每一个词语我们把它称为“token”

    常见的分词工具很多,比如:

    jieba分词:https://github.com/fxsjy/jieba

    清华大学的分词工具THULAC:https://github.com/thunlp/THULAC-Python

    在中文文本分词中有以下两种常用的分词方法:

    把句子转化为词语

    比如:“我爱深度学习” 可以分为[我,爱, 深度学习]

    把句子转化为单个字

    比如:“我爱深度学习”的token是[我,爱,深,度,学,习]

    2. “N-garm”表示方法

    其实句子不但可以用单个的字,词来表示,有的时候,我们也可以用2个、3个或者多个词来表示。这里就需要用到一种“N-gram”的表示方法。N-gram一组一组的词语,其中的N表示能够被一起使用的词的数量。

     

    In [59]: text = "深度学习(英语:deep learning)是机器学习的分支,是一种以人工神经网络为架构,对数据进行表征学习的算法。"

    In [60]: cuted = jieba.lcut(text)

    In [61]: [cuted[i:i+2] for i in range(len(cuted)-1)] #N-gram 中n=2时

    Out[61]:[['深度', '学习'], ['学习', '('],['(', '英语'],['英语', ':'],[':', 'deep'],['deep', ' '],[' ', 'learning'],['learning', ')'],[')', '是'],['是', '机器'],['机器', '学习'],['学习', '的'],['的', '分支'],['分支', ','],[',', '是'],['是', '一种'],['一种', '以'],['以', '人工神经网络'],['人工神经网络', '为'],['为', '架构'],['架构', ','],[',', '对'],['对', '数据'],['数据', '进行'],['进行', '表征'], ['表征', '学习'], ['学习', '的'],['的', '算法'],['算法', '。']]

    例如:

     

    在传统的机器学习中,使用N-gram方法往往能够取得非常好的效果,但是在深度学习比如RNN中会自带N-gram的效果。

    2.2.2 词向量化

    我们知道中英文字词是不能够直接被模型计算的,所以需要将其转化为向量,才能在模型中进行计算。把文本转化为向量的常用方法有两种:      

    1. 转化为one-hot编码

    2. 转化为word embedding

    1. one-hot 编码

    使用one-hot编码,就是将每一个token使用一个长度为N的向量表示,其中N表示词典的数量。即把待处理的文档进行分词或者是N-gram处理,然后进行去重得到一个二进制的词典。例如,我们有一个句子“深度学习”,那么进行one-hot处理后的结果如下:

    token

    one-hot encoding

    1000

    0100

    0010

    0001

    表 1 one-hot编码实例

    2. word embedding

    word embedding是深度学习中表示文本常用的一种方法。和one-hot编码不同,word embedding使用了浮点型的稠密矩阵来表示token。根据词典的大小,我们的向量通常使用不同的维度,例如100,256,300等。其中向量中的每一个值是一个参数,其初始值是随机生成的,之后会在训练的过程中进行学习而获得。

    如果我们文本中有20000个词语,如果使用one-hot编码,那么我们会有20000*20000的矩阵,其中大多数的位置都为0,但是如果我们使用word embedding来表示的话,只需要20000\* 维度,比如20000\*300。例如:

    Token

    Num

    Vector

    词1

    0

    [w11,w12,w13...w1N]` ,其中N表示维度(dimension)

    词2

    1

    [w21,w22,w23...w2N]

    词3

    2

    [w31,w23,w33...w3N]

    ……

    ……

    ……

    词m

    m

    [wm1,wm2,wm3...wmN]`,其中m表示词典的大小

    表 2 embedding编码示例

    在把所有的文本转化为向量的过程中间,我们会先把token使用数字来表示,再把数字使用向量来表示。流程即为:token---> num ---->vector。

     

    embedding = nn.Embedding(vocab_size,300)  #实例化

    input_embeded = embedding(input)         #进行embedding的操作

           在pytorch中也有相对应的API,Embedding(num_embeddings,embedding_dim),其中参数num_embeddings表示词典的大小,embedding_dim表示词典的维度。使用方式举例如下[2]:

     

     

    2.3 数据集处理

    因为官方的数据集是xml格式的,本文中用最简单的方法是直接用EXCEL表打开并保存为csv文件,如下所示:

    图 1 数据集的CSV表示

    2.3.1 基础Dataset的准备

    在实例化dataloader的过程中,我们需要考虑以下几个问题:

    1. 数据集给的是一个三分类的数据集,我们仅仅只需要正反的情绪;
    2. 在dataloader中每个batch 的 文本长度不同的问题;
    3. 如何将字转化为数字向量。

    对于以上的问题,我们来一个个的解决。

     

    def tokenlize(sentence):
    
        fileters = ['!', '"', '#', '$', '%', '&', '\(', '\)', '\*', '\+', ',', '-', '\.', '/', ':', ';', '<', '=', '>',
    
                    '\?', '@', '\[', '\\', '\]', '^', '_', '`', '\{', '\|', '\}', '~', '\t', '\n', '\x97', '\x96', '”', '“',
    
                    '\【', '\】', '\(', '\、', '。', '\)',  '\,', '[\s0-9a-zA-Z]']
    
        sentence = "".join(sentence)
    
        sentence = re.sub("|".join(fileters)," ",sentence)
    
        # result = [i for i in sentence.split(" ") if len(i) > 0]
    
        result = [i for i in list(sentence) if i != ' ']
    
        return result

           首先我们需要对句子进行分析,其中需要过滤掉字母和数字以及各种标点符号,只对汉字进行分词,便于之后的文本向量化

     

           然后,因为我们需要完成的是一个二分类的问题,于是这里将数据集中的中性情感标签和不带标签的句子进行删除,留下正反两种情绪的句子以及标签,处理如下:

     

     

     

    def collate_fn(batch):
    
         sentence, label = list(zip(*batch))
    
         return sentence, label
    data_path = r"D:\PycharmCode\PycharmProjects\代码\postgraduate\Sentiment_Anaiysis\S_A_SMP\SMP2019_ECISA_Train.csv"
    
        df = pd.read_csv(data_path)
    
        # 删除0,0",1"的情感,仅仅只留下正反的情绪
    
        df = df.drop(df[df['/Doc/Sentence/@label'] == '0'].index)
    
    df = df.drop(df[df['/Doc/Sentence/@label'] == '0"'].index)
    
    df = df.drop(df[df['/Doc/Sentence/@label'] == '1"'].index)
    
    df = df.dropna()

           接着,就要实例化dataloader,测试一下输出的数据,不过这里需要注意一个问题,关于自定义一个collate_fn,通过自定义collate_fn,我们才能得到最终我们所需要的效果,自定义collate_fn的函数如下:

     

           最后通过测试我们可以得到需要的结果如下所示

    图 2 dataset的数据集准备

     

    2.3.2 文本序列化

    在2.2.2中介绍word embedding的时候,我们说过,不会直接把文本转化为向量,而是先转化为数字,再把数字转化为向量,那么这个过程该如何实现呢?

    这里我们可以考虑把文本中的每个词语和其对应的数字,使用字典保存,同时实现方法把句子通过字典映射为包含数字的列表。

    实现文本序列化之前,考虑以下几点:

    1. 如何使用字典把词语和数字进行对应

    2. 不同的词语出现的次数不尽相同,是否需要对高频或者低频词语进行过滤,以及总的词语数量是否需要进行限制

    3. 得到词典之后,如何把句子转化为数字序列,如何把数字序列转化为句子

    4. 不同句子长度不相同,每个batch的句子如何构造成相同的长度(可以对短句子进行填充,填充特殊字符)

    5. 对于新出现的词语在词典中没有出现怎么办(可以使用特殊字符代理)

     

    思路分析:

    1. 对所有句子进行分词

    2. 词语存入字典,根据次数对词语进行过滤,并统计次数

    3. 实现文本转数字序列的方法

    4. 实现数字序列转文本方法

    其中分词,在2.3.1中token函数已经实现,接着就是要实现剩下的几个方法,如下所示:

     

    def fit(self, sentence):
    
        for word in sentence:
    
            self.count[word] = self.count.get(word, 0) + 1
    
        def build_vocab(self, min=0, max=None, max_features=None):
    
        if min is not None:
    
            self.count = {word:value for word, value in self.count.items() if value > min}
    
        if max is not None:
    
            self.count = {word:value for word, value in self.count.items() if value < max}
    
        if max_features is not None:
    
            temp = sorted(self.count.items(), key=lambda x:x[-1],reverse=True)[:max_features]
    
            self.count = dict(temp)
    
        for word in self.count:
    
            self.dict[word] = len(self.dict)
    
        self.inverse_dict = dict(zip(self.dict.values(), self.dict.keys()))

    i. 词语存入字典,根据次数对词语进行过滤,并统计次数

     

     

    def transform(self, sentence, max_len=None):
    
        if max_len > len(sentence):
    
            sentence = sentence + [self.PAD_TAG] * (max_len - len(sentence)) # 填
    
        if max_len < len(sentence):
    
            sentence = sentence[:max_len] # 裁剪
    
        return [self.dict.get(word, self.UNK) for word in sentence]

    ii. 实现文本转数字序列的方法

     

     

    def inverse_transform(self, indices):
    
        return [self.inverse_dict.get(idx) for idx in indices]

    iii. 实现数字序列转文本方法

     

           最后我们自定义一段文字来测试,文本序列化的效果如下:

    图 3 文本序列化测试结果

           其中88对应“我”,1197对应“爱”,其余的“UNK”和“PAD”作为填充数据,来填充词典的长度,从而使得文本进行向量化计算。

     

    三、模型的构建

    3.1 LSTM的介绍

    假如现在有这样一个需求,根据现有文本预测下一个词语,比如天上的云朵漂浮在__,通过间隔不远的位置就可以预测出来词语是天上,但是对于其他一些句子,可能需要被预测的词语在前100个词语之前,那么此时由于间隔非常大,随着间隔的增加可能会导致真实的预测值对结果的影响变的非常小,而无法非常好的进行预测(RNN中的长期依赖问题(long-Term Dependencies))那么为了解决这个问题需要LSTM(Long Short-Term Memory网络)。LSTM是一种RNN特殊的类型,可以学习长期依赖信息。在很多问题上,LSTM都取得相当巨大的成功,并得到了广泛的应用。一个LSMT的单元就是下图中的一个绿色方框中的内容:

    图 4 LSTM单元

    LSTM的核心在于单元(细胞)中的状态,也就是上图中最上面的那根线。但是如果只有上面那一条线,那么没有办法实现信息的增加或者删除,所以在LSTM是通过一个叫做`门`的结构实现,门可以选择让信息通过或者不通过。

    在理解LSTM时,我们需要理解遗忘门,输入门以及输出门的相关概念以及公式的说明和推导。

    ·遗忘门

    遗忘门通过sigmoid函数来决定哪些信息会被遗忘在下图就是和进行合并(concat)之后乘上权重和偏置,通过sigmoid函数,输出0-1之间的一个值,这个值会和前一次的细胞状态()进行点乘,从而决定遗忘或者保留。

    图 5 遗忘门

    ·输入门

    下一步就是决定哪些新的信息会被保留,这个过程有两步:

    1. 一个被称为`输入门`的sigmoid 层决定哪些信息会被更新

    2. `tanh`会创造一个新的候选向量$\widetilde{C}_{t}$,后续可能会被添加到细胞状态中

    例如:

    `我昨天吃了苹果,今天我想吃菠萝`,在这个句子中,通过遗忘门可以遗忘`苹果`,同时更新新的主语为`菠萝`

    现在就可以更新旧的细胞状态C_t-1新的C_t了。更新的构成简单说就是:

    1. 旧的细胞状态和遗忘门的结果相乘

    2. 然后加上 输入门和tanh相乘的结果

    图 6 输入门1

    图 7 输入门2

    ·输出门

    最后,我们需要决定什么信息会被输出,也是一样这个输出经过变换之后会通过sigmoid函数的结果来决定那些细胞状态会被输出。步骤如下:

     

    1. 前一次的输出和当前时间步的输入的组合结果通过sigmoid函数进行处理得到O_t

    2. 更新后的细胞状态C_t会经过tanh层的处理,把数据转化到(-1,1)的区间

    3. tanh处理后的结果和O_t进行相乘,把结果输出同时传到下一个LSTM的单元

    图 8 输出门

    在本文中,采用的是双向的LSTM结构,因为单向的 RNN,是根据前面的信息推出后面的,但有时候只看前面的词是不够的,可能需要预测的词语和后面的内容也相关,那么此时需要一种机制,能够让模型不仅能够从前往后的具有记忆,还需要从后往前需要记忆。此时双向LSTM就可以帮助我们解决这个问题。

    图 9 双向LSTM结构

    3.2 Bi-LSTM+embedding+logsoftmax模型构建

           在本文中采用Bi-LSTM+embedding+logsoftmax的结构来构建情感分类的模型处理,代码如下所示:

     

    def forward(self, input):
    
        x = self.embedding(input)  # [batch_size, max_len, 100]
    
        x, (h_n, c_n) = self.lstm(x)
    
        output_fw = h_n[-2, :, :]  # 正向最后一次的输出
    
        output_bw = h_n[-1, :, :]  # 反向最后一次的输出
    
        output = torch.cat([output_fw, output_bw], dim=-1)  
        out = self.fc(output)  # [batch_size, 2]
    
        # 可以考虑再添加一个全连接层作为输出层,激活函数处理。
    
        return F.log_softmax(out, dim=-1)
    class MyModel(torch.nn.Module):
    
        def __init__(self):
    
            super().__init__()
    
            self.embedding = torch.nn.Embedding(len(lib.ws), 100)
    
            self.lstm = torch.nn.LSTM(input_size=100, hidden_size=lib.hidden_size, num_layers=lib.num_layers,
    
                                      bidirectional=True, batch_first=True, dropout=lib.dropout)
    
            self.fc = torch.nn.Linear(lib.hidden_size * 2, 2)

     

    四、模型训练与评估

     

    def train(epoch):
    
        train_dataloader = get_dataloader(train=True)
    
        bar = tqdm(train_dataloader,total=len(train_dataloader))
    
        for idx,(input,target) in enumerate(bar):
    
            optimizer.zero_grad()
    
            output = model(input)
    
            loss = F.nll_loss(output,target)
    
            loss.backward()
    
            loss_list.append(loss.item())
    
            optimizer.step()
    
            bar.set_description("epcoh:{}  idx:{}   loss:{:.6f}".format(epoch,idx,np.mean(loss_list)))
    
            if idx%10 == 0:
    
                torch.save(model.state_dict(),"./model/model.pkl")
    
                torch.save(optimizer.state_dict(),"./model/opt.pkl")

    模型的训练函数如下所示:

     

           模型的评估结果是以准确率的均值来判断模型对于分类结果的好坏,评估的结果如下图所示:

    图 10 三次训练评估结果

    五、小结与反思

           在本次的情感分析的评测实战中,刚开始是碍于所选参考资料是用Keras完成,于是想偷懒自己移植到pytorch上来直接套用,但是发现对于整个模型的输出输出以及过程的不理解,发现这样根本不行,于是又找了一个基于pytorch的LSTM情感分析的实战课,但是因为数据集是英文的数据集,而且文本处理的方式也不太一样,于是在这里又卡住了,但是经过一晚上的通宵奋战,将书和视频吃透之后发现,英文与中文文本的处理都是殊途同归,最后都是要是的文本序列化,便于进行计算。所以一晚上将中文文本处理完之后,后面直接使用api进行模型的构建与训练就显得十分轻松了。   

           不过,此次任务中值得反思的是,因为还是贪图方便,就直接将这个三分类的问题当做二分类的问题来做,所以尽管在某种层度上说是熟悉了模型,但是实际上评测的任务也还是没有完成,所以需要就这个评测任务进一步进行学习和完善,比如换成GRU,或者textCNN。

           最后,借上周战略管理课上讲的,任何事情只要投入,总会得到意想不到的结果,对于一个较难的任务,要实现短期收益,就是短时间投入加上目标分解。

     

     

     

     

     

     

     

     

     

     

     

     

     

    参考文献

    1. SMP - ECISA “拓尔思杯”中文隐式情感分析评测 2019

     https://www.biendata.xyz/competition/smpecisa2019/data/ 2019.07.15

    1. 黑马Python就业班15期.
    展开全文
  • 摘要:20世纪初以来,文本的情感分析在自然语言处理领域成为了研究的热点,吸引了众多学者...本文主要是基于机器学习方法的中文文本情感分类,主要包括:使用开源的Markup处理程序对XML文件进行分析处理、中科院计算...

    摘要:20世纪初以来,文本的情感分析在自然语言处理领域成为了研究的热点,吸引了众多学者越来越多的关注。对于中文文本的情感倾向性研究在这样一大环境下也得到了显著的发展。本文主要是基于机器学习方法的中文文本情感分类,主要包括:使用开源的Markup处理程序对XML文件进行分析处理、中科院计算所开源的中文分词处理程序ICTCLAS对文本进行分词处理、去除停用词等文本预处理,在基于向量空间模型VSM的文本表示,使用卡方统计量CHI的进行特征选择,TFIDF权值计算方法进行的特征权值计算,最后使用支持向量机SVM进行中文文本情感的分类。在实验过程中,对比了特征数量的大小对情感分类结果的影响、布尔权值、TF权值和TFIDF权值三种不同计算方法对情感分类结果的影响以及SVM分类器对于不同类型文本数据的分类效果。从整个实验结果来看,TFIDF权值计算相较于其他两种更有利于文本的情感分类。SVM分类器作为文本情感分类器对于不同类型的文本数据,其分类效果不同,但总体上取得了较好的效果。

     

    关键词:中文文本情感分类  SVM分类器  特征选择

    1绪论

    1.1国内外研究现状

    文本情感分类是文本分类中的一个重要分支,也称之为意见挖掘。简而言之,文本的情感分类就是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程[1]。情感分类中,按照处理文本的粒度不同,可分为词语短语级、句子级、篇章级等几个研究层次[2]。在此,对词语短语级的情感分类进行详细阐述。在情感分析中可以认为构成篇章的基本单位包括词、短语、和固定搭配,对于它们的褒贬程度的度量是判别文本情感倾向的基础。国外许多学者做了大量研究,其主要研究方法分为基于字典和基于语料库两种。

    基于语料库的词语短语级的情感判别主要是根据它们的语法特性,对大规模语料库进行信息挖掘,从而得到统计数据并对其极性做出判断。在研究早期,学者发现由某些连词连接的形容词具有相同或相反的极性,Hatzivassilolou和Mckeown[4]利用大规模语料库华尔街日报中的连接词信息来自动识别形容词的情感倾向,利用聚类算法将它们归属于褒义或贬义的类别集合。Turney和Littman[5]提出了点互信息的方法判别词的褒贬倾向。Dave等[6]从语料中抽取特征集合,通过分析此特征集合和己标记文本的关系来判定词汇的语义倾向。

    基于词典的词语短语的情感判别,主要是根据词典WordNet或HowNet中词语间的关联来判别词语的极性。sista等[7]将GI(General Inquirer)和WordNet中的褒义和贬义词作为种子词,得到一个扩展后的较大规模情感词集合,并以此作为分类特征,利用机器学习方法对文本褒贬义进行了自动分类。Faye Baron和Graeme Hirst[8]从文档中抽取倾向性强的搭配作为种子词汇,取得了较好的分类效果。相对于英语,中文的词汇、短语的情感分析研究起步较晚。中科院自动化所的王根等[9]提出了词语倾向性的极坐标方式,并采用均衡化的互信息方法计算了词语倾向性。北京理工大学的李钝博士[10]把短语归结为一个非递归的基本词汇及依存关系的集合,提出了一种基于短语中心词之间依存概率统计分析方法,并将其应用于对短语的倾向性和倾向强度的计算。

    1.2存在的问题和挑战

    情感分类的应用十分广泛,因此近年来的发展迅速,取得的不小的进步,同时我们也该看到,由于情感分类问题较复杂,不仅仅是单一的文本分类或文本挖掘任务,因而在研究过程中还存在很多问题与挑战。

    1)情感语义的机器理解问题

    人类的自然语言情感表达十分复杂,特别是网络评论的形式更加灵活多变,要使机器精确的理解文本中的情感内容,不能简单的提取词语作为特征,还必须结合语言学方面的知识,借助于文本上下文和领域相关性对情感语义进行分析处理。

    2)特征提取问题

    文本分类中一般采用词袋法表示文本的特征,然而由于情感表达中有许多诸如隐喻、反话等复杂的语言形式,且上下相关,因此简单采用词袋法提取特征并进行分析的效果极其有限,如何提取对情感分析具有更大价值的特征依然是一个有待完善的课题。

    3)领域依赖

    由于情感表达在不同的领域差别较大,所以无论是在有监督的学习方法还是无监督学习方法,情感分类都面临着领域依赖问题。

    4)语料库建设问题

    情感分类领域,许多研究者自己通过互联网获取语料,并进行人工标注,即使相同领域语料,但语料内容相差较大且标注标本不统一,造成实验结果很难进行比较。特别是在中文的情感研究领域,国内的公开语料库较少,资源匮乏。

     

    2基于机器学习的文本分类方法

    基于机器学习的情感分类问题,它的处理过程大致可以分为两个部分,一部分是学习过程,另一部分是情感分类过程。其中,学习过程包括训练过程和测试过程,训练过程中对训练集进行训练得到分类器,用其对测试集进行情感分类,将测试的结果反馈给分类器,进一步改进训练方法,生成新的分类器,最后利用最终生成的分类器对新的文本进行情感分类,其基本流程如图1所示。


    图1 基于机器学习的文本情感分类流程图


    2.1文本预处理

    文本的预处理是进行文本情感分类的第一步,预处理结果的好坏直接影响到今后的分析处理能否顺利进行。文本预处理的目的是从文本语料库中规范地提取出主要内容,去除与文本情感分类不相关的信息。对于中文的预处理,其主要操作包括规范编码,过滤非法字符,分词处理,去除停用词等步骤。

    1)文件规范编码处理

    从网上下载的语料库存储格式可能千差万别,对实验带来很大困扰。所以第一步一般都是对语料库进行数据格式的归一化处理。

    2)中文分词处理

    中文文本单词之间没有天然的分隔符,因此在提取特征之前,首先要对中文文本进行分词。分词处理能够将连续的汉字序列按照一定的规则重新切分为词或词组。切分好的词或词组将会作为文本的特征用于情感分类分析过程,因此能否高效、正确的对中文进行分词成为中文情感分析的重要任务。中国科学院计算技术研究所专门开发了汉语词法分析系统ICTCLAS(Institute of Computing Technology,ChineseLexical Analysis System)。ICTCLAS的主要功能包括中文分词、词性标注、新词识别、命名实体识别等功能,它的分词性能和分词精度都较高,是目前最受好评的汉语分词开源系统。

    3)停用词去除

    文本中包含许多助词、虚词等词性的单词以及在文本中经常出现的高频词汇但其本身对情感分类意义不大,这些词汇我们将它们统称为停用词。停用词表的构造一般有两种方式,人工方式或机器自动统计。停用词的存在不但会增加存储空间,而且很可能形成噪声,影响情感分类的精度,因此需要过滤文本中的停用词。

    2.2文本表示模型

    文本是一种非结构化的数据,由大量字符构成,计算机无法直接处理字符类型的数据,因此需要将普通文本的内容转变为计算机能够读懂的数据形式,即将文本进行形式化表示。本文采用向量空间模型来表示文本。

    向量空间模型(VSM)[11]是由salton等人在1975年提出的一个基于统计的文本表示模型,并成功的应用在著名的SMART系统中。向量空间模型可以形式化的表述为,对于给定的文本D=D{t1,w1;t2,w2;…tn,wn}其中ti表示第i个特征项(最小不可分割的语言单位,如字、词、短语),wi表示特征项ti所拥有的权值,n为特征项的总数。每一个文本可以表示为一个向量(w1,w2…wn),wi的计算可以使用布尔权重法,词频权重和TFIDF权重。

    向量空间模型对文本的表示效果较好,可以将文档表示成空间向量进行运算,且具有较强的可计算性和可操作性。向量空间模型是文本分类中应用最为广泛的文本形式化模型。向量空间模型的缺点也十分明显,忽略了特征的次序和位置关系,且不考虑文本的长度,不考虑语义联系,认为所有的特征项都是独立的,只考虑文本所属类别的文档中出现特征项的频率,在情感分类的应用中存在一定的局限性。

    2.3特征选择

    在对文本进行预处理并对其进行形式化表示后,得到了一个高维稀疏的特征空间,特征的数量可以达到几万维甚至是几十万维,不仅使得运算时间变长,而且会在很大程度上降低分类的准确度。特征选择(Feature Selection)就是从原始的高维特征集合中选择一小部分特征作为分类器的分类特征。特征选择过程需要通过构造好的评估函数对每个特征进行评分,然后按照评分的大小对特征向量进行降序排序,最后选择一定数量的特征作为分类特征集合。目前常用的特征选择方法有文档频率(DF)、信息增益(IG)、统计量(CHI)、期望交叉熵(ECE)和互信息(MI)等,本文采用卡方统计量来进行特征选择,并选取了不同数量的特征进行了对比测试。

    卡方统计方法[12]用来衡量特征tj和文档类别Cj之间的统计相关强度,并假设tj和Cj之间符合具有一阶自由度的X2分布。特征相对某类的X2统计值越高,则其含有的信息量越多,与该类的相关性越大。CHI的计算公式如下:

                 

    其中,tj表示特征项,Ci表示类别,N表示文本总数,A表示包含特征tj,且属于类别Ci的文档数,B表示包含特征tj,但不属于类别Ci的文档数,C表示属于类别Ci但不包含特征tj,的文档数,D表示不属于类别Ci且不包含特征tj的文档数。当有多个类别时,分别计算特征tj对每个类别的CHI,然后取最大值作为特征的CHI值。CHI特征选择方法可以在降低85%以上特征维度的情况下取得较好的分类结果。

    2.4特征加权

    特征选择过程中选择了最能代表文本内容的特征向量,但是这些特征对文本分类的影响不尽相同,因此,有必要对经过选择的特征进行加权,对表征能力强的特征赋予较大权重,对具有较弱类别区分能力的特征赋予较小的权重,这样可以有效抑制噪声。特征加权(Feature Weighting)就是对特征集合中每个特征根据其对分类的贡献程度赋予一定权值的过程。常用的特征加权方法有布尔权重,词频权重,TFIDF权重。本文分别使用了这三种权重计算方法,并对三种方法得到的分类结果进行了对比分析。

    设文本类别集合D={d1,d2,…,dn},dk∈D(k=1,2,…,n),n为文本总数;类别集合C={c1,c2,…,cm},ci∈C(i=1,2,...,m),特征集合T={t1,t2,…,tn},tj∈T(j=1,2,...,n),m为特征总数;wij表示特征tj在文本dk中的权重。

    1)布尔权重(Boolean Weighting)

    布尔权重是最简单的权重计算方法,其计算公式如下:

    若特征tj,在文本di中出现,则其权重wij为1;若特征tj在文本di中不出现,则其权重wij为0。

    2)词频权重(Term Frequency,TF)

    词频权重是指用特征在文本中的出现次数作为权重。不同类别的文本集合,特征出现的频率有较大差异,因此特征频率信息可以作为文本分类的重要参考之一。一般情况下,对于一个类别,出现频率较高的特征应该包含更多的类别信息,说明此特征对分类具有重要的意义,以词频作为参考赋予较大权重,反之应该赋予较小权重。TF权重计算公式如下:

    其中tfij表示特征tj在类别ci中出现的次数。

    词频权重相对于布尔权重,不再是均值权重,而是根据文本集合中特征出现的次数对特征进行加权,从权值函数构造来看有了一定的进步,然而词频权值对高频特征过度依赖,忽略了一些带有大量类别信息的低频特征。

    3)TFIDF权重

    将特征词频和逆文档频率相结合用于特征权重计算,在实验中取得了较好的效果,因此TFIDF也成为了最经典也是最广泛使用的一种特征权重计算方法。逆文档频率(InverseDocument Frequency,IDF)是以包含特征的文档数为参数构造特征权重函数。其核心思想是:在大多数文档中出现的特征所带有的类别信息相比于在少量文本中出现的特征较少,也就是说,若一个特征同时出现在多个文档中,它所携带的类别信息较少,它的重要程度较低。逆文档频率在计算时常采用对数形式,其计算公式如下:

    其中,ni为文本集合中包含特征tj的文本数。

    集合次品权重函数就形成了TFIDF权重,计算公式如下:

    其中,tfij表示特征tj在文本ci中出现的次数,ni为文本集合中包含特征ti的文本数。

    为了消除文本长度对特征权重的影响,要对特征的权重进行归一化处理,归一化后的TFIDF特征权重函数如下:

    2.5分类方法

    分类器是文本分类问题中的核心部分,在进行文本分类过程中常用的分类器有朴素贝叶斯分类器(NB),支持向量机(SVM),最大熵分类器(ME),K近邻分类器(KNN)等,本文中主要使用支持向量机来进行分类,用现有的LibSVM完成实际操作,并对book类别、dvd类别和music类别的训练集分别进行了测试,对比测试结果。

    支持向量机(Support Vector Machine)是Cortes和Vapnik[13]等人首先提出,它在解决小样本、非线性及高维模式识别中表现出许多优势,并能够推广应用到函数拟合等其他机器学习问题中。其基本思想是首先通过非线性变换将输入空间映射到一个高维特征空间,然后根据核函数在这个新空间中求取最优线性分类平面。将支持向量机应用于文本分类表现尤为突出,其分类的精确率和召回率都较高,且具有较好的稳定性,虽然它在大数据集上的训练收敛速度较慢,需要大量的存储资源和较高的计算能力,但其分隔面模式有效地克服了特征冗余、样本分布以及过拟合等因素的影响,具有较好的泛化能力。

    2.6评价标准

    在进行文本分类实验时,需要将文本集合划分为训练集合和测试集合,在进行划分时一般采用K折交叉验证法,将其得到的实验结果的平均值作为实验的最终结果。对结果的评价已经有了许多标准,常用的有查准率、查全率等。

    查准率是指分类器判别为ci类别的文本数与实际属于ci类别的文本数的比值,其计算公式如下:

    查全率是指实际属于ci类别的文本数与分类器判别为ci类别的文本数的比值,其计算公式如下:

    查准率和查全率分别反映分类器不同方面的性能:查准率反映分类器的准确性,查全率反映分类器的完备性。采用准确率还是召回率作为分类器的评价性能取决于实验者所侧重的目标,两个评价标准是互补的,单纯提高其中一个评价标准会导致另一个评价标准的降低。对于一个优良的分类器应该同时具备较高的查准率和查全率。

     

    3实验方法与步骤

    为了更好的理解情感分类的相关算法与步骤,结合相关论文方法与语料库进行了一系列的实验。实验过程框架图如图2所示,实验步骤如下:

    1)  将训练文本数据文件作为XML文件处理,提取评论文本数据信息;

    2)  对评论文本数据进行中文分词处理与停用词去除处理,并统计词频;

    3)  结合预处理结果、词频信息以及情感标签,使用CHI方法进行特征选择;

    4)  对评论文本进行特征权值计算并归一化权值,使用VSM模型表示文本;

    5)  结合归一化后的特征权值向量,利用支持向量机分类器进行分类器训练;

    6)  对测试文本进行情感分类的学习预测。


    图2 中文情感分类实验框架图

    结合实验框架图的基础上,针对分类过程中的各个部分,通过大量的实验进行验证。主要包括以下几个方面:

    1)  特征数量的大小对情感分类结果的影响。按照理论情况,选取全部的特

    征必然会得到最好的分类效果,但是会导致特征维数的急剧增大,从而导致“维数灾难”,以至后续的分类将会很难进行。故通过实验验证特征数量对分类效果的影响,力求做到能够在不大幅度降低分类效果的基础上,选取一个合适并且便于计算的特征数量。

    2)  布尔权值、TF权值和TFIDF权值三种不同计算方法对情感分类结果的影

    响 。从大量的论文中分析得出,TFIDF权值计算方法在情感分类中效果最好,这里通过实验对三种不同的权值计算方法进行验证。

    3)  SVM分类器对于不同类型文本数据的分类效果。不同类型的数据语料由

    于其内容以及情感变化的不同,在同时使用SVM分类器的过程中其分类效果可能不同。故采取实验的方法验证不同类型文本数据在使用SVM分类器进行情感分类的效果区别。

        最后,结合上述三个实验验证结果,对给定的测试语料进行情感分类实验。

     

    4实验结果及分析

    4.1 实验数据与程序说明

    整个实验的相关算法利用C++在Windows平台下完成,使用ICTCLAS中文分词开源程序、LibSVM以及开源的XML文件处理程序Markup完成。具体实验代码详见附件。

    实验使用的数据集分为三类,分别为book、dvd和music三类评论文本数据。三类数据集的情况如表2所示:

    表2 实验语料数据情况说明表


    4.2 特征数量的大小对情感分类影响实验

    实验对book类别训练集进行测试,分别使用预处理处理后得到的特征集合的10%,15%与20%作为选取的特征。文本的特征权值计算使用TFIDF方法,使用SVM分类器进行训练集的分类训练。在不同特征数量的情况下,训练集的最优分类率如表3所示:

    表3不同特征数量最优分类率表


    4.3 不同权值计算方法对情感分类结果影响实验

    实验对book类别训练集进行测试,分别使用预处理处理后得到的特征集合的10%作为选取的特征,文本的特征权值计算分别使用布尔方法、TF方法和TFIDF方法,使用SVM分类器进行训练集的分类训练。在不同权值计算方法的情况下,训练集的最优分类率如表4所示:

    表4不同权值计算方法下最优分类率表

    4.4 SVM分类器对于不同类型文本数据分类效果实验

    实验分别对book类别、dvd类别和music类别训练集进行测试,分别使用预处理处理后得到的特征集合的10%作为选取的特征,文本的特征权值计算使用TFIDF方法,使用SVM分类器进行训练集的分类训练。在不同类型数据情况下,训练集的最优分类率如表5所示:

    表5 不同文本数据使用SVM分类最优分类率表

    4.5测试文本数据分类实验

    结合上述三个实验结果,分别对book类别、dvd类别和music类别测试集进行分类实验。实验过程中使用预处理处理后得到的特征集合的10%作为选取的特征,文本的特征权值计算使用TFIDF方法,使用SVM分类器进行训练集的分类训练。三种不同文本测试数据的分类效果如表6所示:

    表6测试文本数据分类结果表

     

    5总结

    本文主要是对基于机器学习方法的情感文本分类做了初步的研究,

    取得了一定的研究成果,但得到的结果还有很大的提升空间,就本文而言,在许多方面还需要进一步的研究和改进。

    情感分类是一个具有挑战性的研究课题,其问题更加复杂,同一方法应用于不同语料所产生的结果存在较大差异,本文中只在3个类别的数据集上进行了实验,应将该方法应用于更多的数据集进行对比分析研究。此外,分类器的融合方法还有多种,可以进一步实验其他融合策略对于情感分类性能的影响。

    从整个实验结果来看,TFIDF权值计算相较于其他两种更有利于文本的情感分类。SVM分类器作为文本情感分类器对于不同类型的文本数据,其分类效果不同,但总体上取得了较好的效果。

     

    6参考文献

    [1]赵妍妍,秦兵,刘挺.文本情感分析[J].软件学报,2010:21(8):1834~1848.

    [2]Huang X J, Zhao J. Sentiment analysis for Chinese text[C].Proceedings oftheCommunications of CCF,2008:4(2).

    [3]Picard R W.Affective Computing[M].Cambridge:MIT Press,1997.

    [4]Hatzivassiloglou V,Mckeown K R.Predicting the semanticorientation of adjectives[C].Proceedings of the 35thAnnual Meeting of the Association for Computational Linguistics and EighthConference of the European Chapter of the Association for ComputationalLinguistics.Association for Computational Linguistics,1997:174-181.

    [5]Tumey P D,Littman M L.Measuring praise and criticism:Inference of semantic orientation from association[J].ACM Transactionson Information Systems,2003,21(4):315-346.

    [6]Dave K,Lawrence S,Pennock D M.Mining the peanut gallery:Opinion extractionand semantic classification of product reviews[C].Proceedingsof the 12th internationalconference on World Wide Web.ACM,2003:519-528.

    [7]Sista S.P,Srinivasan S.H.Polarized lexicon for review classification[C.Proceedings of the International Conference on Artificial Intelligence.2004:867-872.

    [8]Faye B,Graeme H.Collocations as cues to semanticorientation[C].Proceedings of AAAI Spring Symposium onExploring Attitude and Affect in Text,2004.

    [9]王根,赵军.中文褒贬义词语倾向性的分析[C].第三届学生计算语言学研讨会论文集.2006:81~85.

    [10]李钝.基于中文文本的网络内容分层监测研究[D].北京:北京理工大学,2007.

    [11]Salton G,Wong A,Yang C S.Avector space model for automatic indexing[J].Communicationsofthe ACM,1975,18(1 1):613-620

    [12]Zheng Z,Srihari S N.Text Categorization UsingModified-CHI Feature Selection and Document/TermFrequencies[C].Proceedings of the2002 International Conference On MachineLearningAnd Applications,2002:143-146.

    [13]JoachimsT.Text categorizationwith support vector machines:Learning with many relevant features[C].Proceedingsof the lOth European Conference on Machine Learning.Chemnitz,Germany,1998:137-142.


    版权声明:本文为博主原创文章,未经博主允许不得转载。

    转载于:https://my.oschina.net/stevie/blog/691914

    展开全文
  • 已经标注好的情感分类语料库,一共两万多条,可进行下载练习。
  • 停用词表对中文文本停用词表对中文文本情感分类的影响.pdf情感分类的影停用词表对中文文本情感分类的影响.pdf响.pdf
  • sentimentpy是我根据R语言的一个文本情感分析包sentiment进行开发的, 开发的初衷有:R的sentiment已经被弃坑, 没人维护Python比R更擅长文本处理sentiment包不支持中文而sentimentpy包有如下特点:使用朴素贝叶斯分类...

    sentimentpy是我根据R语言的一个文本情感分析包sentiment进行开发的, 开发的初衷有:

    R的sentiment已经被弃坑, 没人维护

    Python比R更擅长文本处理

    sentiment包不支持中文

    而sentimentpy包有如下特点:

    使用朴素贝叶斯分类算法

    利用了情感词典

    支持中英文

    支持情绪分类(喜怒哀乐恶惊)

    支持极性分类(positive/negtive/both)

    正在开发的功能:

    利用语料库训练神经网络进行分类

    用到的词库

    具体来说, 中英文的分类类别是不同的, 这受限于中英文使用了不同的情感词库, 英文的情感词库来自于R的sentiment库, 而中文的情感词库是大连理工大学信息检索研究室在林鸿飞教授标注的一个中文情感词库, 在这里有介绍: 传送门

    中文情感类别(英文的参考R sentiment库)

    具体参考下表, 我们把句子分类下面6个情感大类。

    编号 情感大类 情感类 例词

    1 乐 快乐(PA) 喜悦、欢喜、笑眯眯、欢天喜地

    2 安心(PE) 踏实、宽心、定心丸、问心无愧

    3 好 尊敬(PD) 恭敬、敬爱、毕恭毕敬、肃然起敬

    4 赞扬(PH) 英俊、优秀、通情达理、实事求是

    5 相信(PG) 信任、信赖、可靠、毋庸置疑

    6 喜爱(PB) 倾慕、宝贝、一见钟情、爱不释手

    7 祝愿(PK) 渴望、保佑、福寿绵长、万寿无疆

    8 怒 愤怒(NA) 气愤、恼火、大发雷霆、七窍生烟

    9 哀 悲伤(NB) 忧伤、悲苦、心如刀割、悲痛欲绝

    10 失望(NJ) 憾事、绝望、灰心丧气、心灰意冷

    11 疚(NH) 内疚、忏悔、过意不去、问心有愧

    12 思(PF) 思念、相思、牵肠挂肚、朝思暮想

    13 惧 慌(NI) 慌张、心慌、不知所措、手忙脚乱

    14 恐惧(NC) 胆怯、害怕、担惊受怕、胆颤心惊

    15 羞(NG) 害羞、害臊、面红耳赤、无地自容

    16 恶 烦闷(NE) 憋闷、烦躁、心烦意乱、自寻烦恼

    17 憎恶(ND) 反感、可耻、恨之入骨、深恶痛绝

    18 贬责(NN) 呆板、虚荣、杂乱无章、心狠手辣

    19 妒忌(NK) 眼红、吃醋、醋坛子、嫉贤妒能

    20 怀疑(NL) 多心、生疑、将信将疑、疑神疑鬼

    21 惊 惊奇(PC) 奇怪、奇迹、大吃一惊、瞠目结舌

    中文极性

    sentimentpy可以将句子分为四种极性: positive/negtive/neutral/both

    英文可以分为三种极性: positive/negtive/neutral

    中文分词

    建议使用jieba2, 并加载情感词库以后进行分词, 这样可以尽量把句子按照词库中已有的词进行分词。

    sentimentpy这个库已经包含了分词的功能。

    下面是我的测试:1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41import unittest

    from sentiment import sentiment

    class Test(unittest.TestCase):

    def test_chinese(self):

    classifier = sentiment.Classifier('zh')

    # 必须用空格分词

    rtn = classifier.polarity('我 喜欢 这个 手机')

    self.assertEqual(rtn['best_fit_cat'], 'positive')

    rtn = classifier.polarity('我 今天 很 难过')

    self.assertEqual(rtn['best_fit_cat'], 'neutral')

    rtn = classifier.polarity('我 讨厌 你 你 滚开')

    self.assertEqual(rtn['best_fit_cat'], 'negative')

    rtn = classifier.emotion('我 喜欢 这个 手机')

    self.assertEqual(rtn['best_fit_cat'], '好')

    rtn = classifier.emotion('我 今天 很 难过')

    self.assertEqual(rtn['best_fit_cat'], '哀')

    rtn = classifier.emotion('我 讨厌 你 你 滚开')

    self.assertEqual(rtn['best_fit_cat'], '恶')

    def test_english(self):

    classifier = sentiment.Classifier('en')

    rtn = classifier.polarity('i love this cellphone')

    self.assertEqual(rtn['best_fit_cat'], 'positive')

    rtn = classifier.polarity('i am so sad today')

    self.assertEqual(rtn['best_fit_cat'], 'negative')

    rtn = classifier.polarity('i hate you fuck away')

    self.assertEqual(rtn['best_fit_cat'], 'negative')

    rtn = classifier.emotion('i love this cellphone')

    self.assertEqual(rtn['best_fit_cat'], 'joy')

    rtn = classifier.emotion('i am so sad today')

    self.assertEqual(rtn['best_fit_cat'], 'sadness')

    rtn = classifier.emotion('i hate you fuck away')

    self.assertEqual(rtn['best_fit_cat'], 'anger')

    if __name__ == '__main__':

    unittest.main()

    展开全文
  • 基于深度学习的情感分类和智能客服研究与实现。主要是酒店和书店的评论情感分析,可以判定积极和消极,对于消极评论,还可以判断其具体类别,比如物流不好或者服务差等等。内含项目源代码和开发文档。
  • 本文主要从Bert实践角度,拎出实用的代码片段,来完成文本情感分类。 **数据准备:**七彩鹿互联网早教提供的微博“早教”热度话题评论数据源 首先下载Bert预训练模型: google公布了一个参数较小的BERT预训练模型,...
  • 针对文本情感分类准确率不高的问题,提出基于CCA-VSM分类器和KFD的多级文本情感分类方法。采用典型相关性分析对文档的权重特征向量和词性特征向量进行降维,在约简向量集上构建向量空间模型,根据模型之间的差异度...
  • sentimentpy是我根据R语言的一个文本情感分析包sentiment进行开发的, 开发的初衷有:R的sentiment已经被弃坑, 没人维护Python比R更擅长文本处理sentiment包不支持中文而sentimentpy包有如下特点:使用朴素贝叶斯分类...
  • 随着计算机网络技术的快速发展和普及,互联网更注重用户与网站之间和用户与用户之间的互动,人们通过参与网站内容的提交...一、情感分类介绍情感分析的研究起源于21世纪初期,目前已经成为自然语言处理、机器学习等...
  • 以上文本都是用爬虫从网络上爬取的,由人工进行分类,为了将数据喂进神经网络模型,需要先对文本进行预处理,预处理包括去除标点符号,停用词过滤和分词等,这里就不放预处理代码了,处理完的数据如下: 使用循环...
  • 最近派给我一个任务,说是要做情感分析的东西...一般认为,文本的情感倾向分配是一个两分类问题,就是把文本分成正面和负面两类,一般中文情感分类器的构建过程主要包括中文文本处理及表示、特征选择、分类器训练和分类
  • 使用信息增益对高维文本做特征降维的基础上,将优化的语义理解和机器学习相结合,设计了一种新的混合语义理解的机器学习中文情感分类算法框架。

空空如也

空空如也

1 2 3 4 5 ... 19
收藏数 379
精华内容 151
关键字:

中文文本情感分类