情感分析

我灵愁苦,要发出言语。我心苦恼,要吐露哀情。 --《旧·伯》7:11


一、什么是情感分析

情感分析(SA)又称为倾向性分析和意见挖掘,它是对带有情感色彩的主观性文本进行分析、处理、归纳和推理的过程,其中情感分析还可以细分为情感极性(倾向)分析,情感程度分析,主客观分析等。

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

请噶程度分析主要是对同一情感极性中再进行划分或者细分,以描述该极性的强度。例如“喜爱”和“敬爱”都是褒义词,但是“敬爱”相对来说褒义的程度更加强烈一些。

主客观分析主要目的是却别文本中哪些部分是客观称述而不带情感色彩,哪些是带有情感的主管描述。在对于微博,或者商品评论时,这个分析步骤一般都忽略,因为微博和商品评论本身就一定存在强烈的情感色彩,而且客观描述的情感值理论上是为零,不影响最终的情感分析结果。

二、情感分析的主要方法

现阶段主要的情感分析方法主要有两类:

基于词典的方法

基于机器学习的方法

基于词典的方法主要通过制定一系列的情感词典和规则,对文本进行段落拆借、句法分析,计算情感值,最后通过情感值来作为文本的情感倾向依据。

基于机器学习的方法大多将这个问题转化为一个分类问题来看待,对于情感极性的判断,将目标情感分类2类:正、负。对训练文本进行人工标标注,然后进行有监督的机器学习过程。例如想在较为常见的基于大规模语料库的机器学习等。

三、基于词典的情感分析

情感分析对象的粒度最小是词汇,但是表达一个情感的最基本的单位则是句子,词汇虽然能描述情感的基本信息,但是单一的词汇缺少对象,缺少关联程度,并且不同的词汇组合在一起所得到的情感程度不同甚至情感倾向都相反。所以以句子为最基本的情感分析粒度是较为合理的。篇章或者段落的情感可以通过句子的情感来计算。

基于词典的情感分析大致步骤如下:

分解文章段落

分解段落中的句子

分解句子中的词汇

搜索情感词并标注和计数

搜索情感词前的程度词,根据程度大小,赋予不同权值

搜索情感词前的否定词,赋予反转权值(-1)

计算句子的情感得分

计算段落的情感得分

计算文章的情感得分

考虑到语句中的褒贬并非稳定分布,以上步骤对于积极和消极的情感词分开执行,最终的到两个分值,分别表示文本的正向情感值和负向情感值。

算法设计(伪代码):

fetch all text

for each text:

for each para in text:

for each sent in para:

for each word in sents:

if word in sentiment_dicts:

if adverb before sentword

score = adverb*score

if inverse before sentword

score = -1 * score

进过以上的步骤,每篇文章的每个段落的每个句子都会有相应的情感分值,之后针对需求,可以针对句子的分值作统计计算,也可以针对段落的分值作统计计算,得到最后的文本的正向情感值和负向情感值。

四、基于机器学习的情感分析

基于机器学习的情感分析思路是将情感分析作为一个分类过程来看待。例如对于极性判别来说,正向极性和负向极性就是目标类别,对文本内容进行结构化处理,输入到给定分类算法中进行训练,并对测试数据用模型来预测结果。

1. 文本结构化

文本结构化是机器学习中重要的一步,由于文本的特殊性,计算机不能直接理解文本中的语义。需要将文本转结构化以此作为分类器的输入。

最小语义粒度

在中文中,最小语义粒度为字,但是一个单字所表示的语义信息太少,一般的,大多都以词作为最基本的语素,因为这在实际的交流中也正是如此。但是用词作为最小的语义粒度也有一个问题,就是词和词之间的关系随着分词而丢失了,其实这部分信息非常重要。为了减小这种隐性的语义损失,有人提出了N-gram模型。N-gram模型基于这样一种假设,第n个词的出现只与前面N-1个词相关,而与其它任何词都不相关。简单来说,unigram模型对应的最小语素就是单字,bigram模型是二字串,举例说明:“我爱北京天安门”的bigram表示形式就是“我爱 爱北 北京 京天 天安 安门”,以此类推。由于N-gram存在致命的缺陷——产生的结果过于稀疏,假设正常分词的词表中有1000个词,如果是bigram那么可能的N-gram就有1000000个,如果是trigram,那么可能的N-gram就有1000000000个,其维度增长是指数级的。一般在使用中只使用二字串或三字串作为最小的语义粒度,并且需要其他处理来缩减维度,减少计算资源的消耗。

文本向量化

文本向量化是文本结构化的最重要的一步,如果说确定最小语义粒度是告诉计算机最小的语义信息单位的话,那么向量化则是告诉计算机该用什么结构来理解文本。比较主流的表示方式有:词袋模型和向量空间模型。这两个模型其实较为类似,两者都将词汇(或者N-gram中的最小语素)作为切分的最小粒度,拆分一句话,得到“我” “爱” “北京” “天安门”,根据每个词出现的次数设置词的权重,转化为[1, 1, 1, 1]形式的向量。而向量空间模型则是在词袋模型的基础上,将多个文本的词袋模型整合在一起,组成一个单词-文档的二维矩阵。其中词又称为维度或者特征,一般的,基于词典情感分析都基于前者,而后者是应用在大规模语料库上。

词条权值

在词袋或者词频矩阵中,如果出现这个词,则标志为1,没有出现则标志为0,这被称为布尔权值。人们发现有些词在文章中出现次数很多,理应有更加重要的地位,所以布尔权重升级为词频权值,用该词在文章中出现的频数作为权值。再后来人们又发现,有些词在所有文章中都有很高的词频,例如“的”。这些词反而对文章来说没有有价值的信息,需要剔除,以节省性能开支。所以人们通过逆文档频率idf来将这些分布较为平均的词剔除掉,词频和逆文档频率的乘积就是现在较为常用的tf-idf权值。

注:这里用权值是为了和区分之后会提到的特征选择时提到的权重,这两者的区别在之后会介绍。

特征提取

特征提取是文本向量化的最后一步,其重要性更多的体现在于防止模型过拟合以及在不损失精度的前提下减少运算开支。面对海量数据的时候,其重要性不亚于之前的任何一步。

特征提取主要分两种方式:特征选择特征抽取。特征选择就是在一堆特征中挑选出对目标类别贡献较高的特征维度,通过计算特征的权重,并依据权重重新排序挑选出较高的一部分特征维度作为模型训练的输入特征。这里的权重和之前讲到的词(也就是特征)权值是不同的。特征权重描述的是特征和目标类别之间的关系,而词权值是词在文章中的重要性的描述,这两者非常容易混淆。特征抽取则是将所有特征作为输入,通过某种方式或者算法,输出一批新的特征,这个特征的维度数量大大小于原始特征长度。此过程中的信息损失比特征选择少很多。深度学习和神经网络是主要的算法。

2. 分类算法选择

文本结构化之后就可以进行训练了。当然之前还需要挑选一个合适的分类器。在各大文献中,较为推荐的文本分类算法大多为SVM。因为其较为出色的泛化能力(不容易过拟合),SVM也受到了工业界的青睐,被用于许多分类场合。当然,分类器有许许多多种,朴素贝叶斯、神经网络、K临近都有着各自的有点。本文主要从SVM入手,情感分析场景下的文本分类作一些说明。

Support Vector Machine

支持向量机是一种有监督的学习算法。其分类的判别标准为最大分类边界,处于分类边界上的向量(特征)即为支持向量。

所以其直接参与分类运算的向量其实小于原始输入向量。这也是为什么虽然在训练的时候比较费时,但是在预测时期性能较好的原因。

这里需要提到一个SVM中特有的概念,分类超平面。由于现实中的数据非常复杂,尤其是文本数据,在向量化之后并不能简单的用线性分割的方式将其区分,所以有牛人想到利用高维来解决低维中线性不可分的问题,以下是一个简答的例子,在二维中,无法用一条直线将这两组点分开。将其映射到三维场景时,就可以用一个线性平面将其分割。当然现实中的数据也不会那么简单,所以低维向高维映射之后的复杂程度也远远超过想想。不过依然有牛人通过数学证明的方式,证明了低维不可分问题在高维中,至少某一个高维中能够线性可分。

不过支持向量机中的数学推导较为复杂,如果详细讲解可以另写一篇文章,这里就不做过多讲解。但是有几个比较重要的概念不得不提:核函数松弛变量

核函数:核函数是一类能够简化低维到高维运算的函数,通过他能够将低维的数据映射到高维中。之前提到了低维向高维映射的过程,但是在实际操作中会发现,这之间的一个映射关系通常是非常难解甚至是不可解的。依旧是牛人,通过一组符mercy定律的函数,找到了低维和高维之间关系的方法。这些符合mercy定律的函数就称为核函数。

松弛变量:在分类问题中,往往会遇到因为遇到噪声而导致分类器对于训练集效果较好,但是对于其他测试集则效果较差的问题,在传统统计算法中,这个现象被称为过拟合。为了避免这些噪声的干扰,需要对SVM的决策边境进行“软化”,让其适当地允许“错误”产生,引入松弛变量。

3. 训练模型和评价

参数选择

在文本分类场景中,选择线性核函数或者高斯核函数较为平常,前者计算效率较高,后者效果较好。在本文场景下选择高斯核函数。松弛变量的选择依据主要为实际的模型拟合和在预测集上的表现来决定。

模型评价

因为在文本分类中类别不平衡经常出现(某一类非常多其他类非常少),如果以所有类别的准确率来作为分类器的评判指标的话,就会出现一个问题,假如二类样本中,1类占到了90%,2类只有10%,那么大多数分类器只需要将所有样本都判为1类就有90%的准确率。但是我们可能更关注那10%的类别,这样的分类器对我们来说相当于没有效果的分类器,是不可接受的。所以在评价分类器效果时,引入了信息检索中的混淆矩阵:

传统的准确率计算公式就是图中的Accuracy,考量了分类器对于两个类别的总体的分类效果,由于其在不平衡样本中效果不好,所以提出了精度召回率这两个指标。

精度:反映了被分类器判定的正例中真正的正例样本的比重。

召回率:也成为True Postive Rate,反映了被正确判定的正例占总的正例的比重。

这两个指标都100%的分类器几乎不存在(就连人都很难做到),并且经过实验发现,这两个指标在同一场景中具有互斥的性质。当精度较高的时候往往召回率较低。往往需要我们在面对具体问题时具体分析,例如在本文所描述的情感分析中,我们更加关注10%的2类,希望判定2类的准确度越高越好,那么这时候2类的召回率会比较低(可能不到50%),但是精度会相对来说较高(可能在70%-80%左右);若如果我们认为希望2类的文章多一些,则在挑选分类器的时候更看重哪些召回率较高的。不过也有牛人为了帮助哪些“选择困难症患者”帮助挑选分类器,提出了F-measure检验,以此同时考虑两者的结果。


以上是经常被用的到F1指标,其扩展形式为:


可以看到,F1即为β取1时的特殊情形。

关于以上信息检索的相关指标可以参看一下连接:Precision and recallAccuracy and precision

五、总结

相对于基于辞典的情感分析,机器学习不太关注这篇文章中是否含有这些或那些情感词,他更加依赖于训练集文章被标注的类别是什么。他结果的好坏和语料库的规模(预料是否包含足够多的信息)和语料库的标注准确率(如果你告诉我橘子是西瓜,那么以后我遇到橘子都会判它为西瓜)。在实际运用中可以两者相辅相成,在短文本中,基于词典的情感分析效果更加好,例如微博、商品评论等。而长文本则更加适合机器学习来处理。

参考文献

情感分析算法设计

文本分类技术

Precision and recall

Accuracy and precision


更多内容 请访问:点击这里

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,847评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,208评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,587评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,942评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,332评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,587评论 1 218
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,853评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,568评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,273评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,542评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,033评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,373评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,031评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,073评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,830评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,628评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,537评论 2 269

推荐阅读更多精彩内容

  • 使用 TensorFlow 做文本情感分析 本文将通过使用TensorFlow中的LSTM神经网络方法探索高效的深...
    Datartisan数据工匠阅读 13,103评论 0 16
  • 原文链接:https://districtdatalabs.silvrback.com/modern-method...
    Eric_py阅读 1,478评论 1 4
  • 精卫鸟 丁香 众幽灵 跨鲸而来 有这样的故事,很多跌崖之幽灵悲哀地鸦聚华山之麓,酿造迷魂酒浆,诱惑酩酊...
    丁_香阅读 617评论 42 56
  • 4.更新数据表 更新数据表 语法: UPDATE 表名 SET 字段名=表达式 [, 字段名=表达式 ...] ...
    mrs_xu阅读 349评论 0 0
  • 这是我第28篇原创日记。坚持的力量,持续写作,持续分享美乐家。 5月28日 惠州晴 端午节放假,先生说...
    沐阳花开阅读 432评论 3 5