lg总文本数/出现某词的文本数。
idf表示逆文本频率,lg(总文本数/出现某词的文本数),也就是说出现某词的文本数越大,对应的结果越小,当某词在所有文本中都出现时,结果为0,也就是说该词不能用来区分文本。
分析目的:对优酷电视剧《回答明朝当王爷之杨凌传》的评论进行情感分析分析思路:1 通过爬虫爬取优酷上电视剧《回到明朝当王爷之杨凌传》的评论;2 对评论进行预处理工作;3 在当前情感分析的方法中监督学习是主流, 而朴素贝叶斯模型也常用于情感分析,因此我们选择监督学习中的朴素贝叶斯模型来进行分析建模。那么, 接下来第一步便是进行数据的收集工作。
算法太多挑花眼?教你如何选择正确的机器学习算法
机器学习算法虽多,却没有什么普适的解决方案。决策树、随机森林、朴素贝叶斯、深度网络等等等等,是不是有时候觉得挑花了眼呢?福利来啦~本文将教你慧眼识精,快速挑选出满意的算法!
机器学习既是一门科学,也是一种艺术。纵观各类机器学习算法,并没有一种普适的解决方案或方法。事实上,有几个因素会影响你对机器学习算法的选择。
有些问题是非常特别的,需要用一种特定的解决方法。例如,如果你对推荐系统有所了解,你会发现它是一类很常用的机器学习算法,用来解决一类非常特殊的问题。而其它的一些问题则非常开放,可能需要一种试错方法(例如:强化学习)。监督学习、分类、回归等问题都是非常开放的,可以被用于异常检测或建立更加广泛的预测模型。
此外,我们在选择机器学习算法时所做出的一些决定与算法的优化或技术层面关系并不大,而更多地与业务决策相关。下面,让我们一起来看看有哪些因素能帮你缩小机器学习算法的选择范围。
数据科学过程
在你开始研究不同的机器学习算法前,你需要对自己拥有的数据、面对的问题及相关约束有清晰的了解。
理解你的数据
当我们决定使用哪种算法时,我们所拥有的数据的类型和形态起着关键性的作用。有些算法可以利用较小的样本集合工作,而另一些算法则需要海量的样本。特定的算法对特定类型的数据起作用。例如,朴素贝叶斯算法对处理待分类的输入特别有效,但是对于缺失值则一点都不敏感。
因此,你需要做到:
了解你的数据
1 查看总结统计和数据可视化的结
百分比可以帮助你识别大多数数据的范围
平均数和中位数可以描述集中趋势
相关系数可以指出强的关联性
2 数据可视化
箱形图可以识别出异常值
密度图和直方图可以显示出数据的散布情况
散点图可以描述二元关
数据清洗
1 处理缺失值。缺失的数据对于某些模型的影响比对其它模型更大。即使是对于那些被用于处理缺失数据的模型来说,它们也可能对缺失数据很敏感(某些变量的缺失数据可能导致预测性能变差)
2 选择处理异常值的方法
异常值在多维数据中十分常见。
有些模型对异常值的敏感性比其它模型要低。通常而言,树模型对于异常值的存在不太敏感。然而回归模型、或者任何试图使用方程的模型都会受到异常值的严重影响。
异常值可能是糟糕的数据收集造成的,也可能是合理的极值。
3 数据需要被聚合吗?
数据增强
1 特征工程是从原始数据中产生能够被用于建模的数据的过程,可以起到以下几种作用:
使模型更容易被解释(如数据分箱(binning))
捕获更复杂的关系(如神经网络)
减少数据冗余并降低数据维度(如主成分分析(PCA))
重新缩放变量(如标准化或归一化)
2 不同的模型可能有不同的特征工程的要求。有的模型有内置的特征工程。
对问题进行分类
下一步是对问题进行分类。这是一个需要分两步实现的过程。
1 根据输入分类:
如果你拥有的是带标签的数据,那么这就是一个监督学习问题。
如果你拥有的是未标注过的数据,并且希望从中找到有用的结构,那么这就是一个无监督学习问题。
如果你想要通过与环境的交互来优化一个目标函数,那么这就是一个强化学习问题。
2 根据输出分类:
如果模型的输出是一个(连续的)数字,那么这就是一个回归问题。
如果模型的输出是一个类别,那么这就是一个分类问题。
如果模型的输出是一组用输入数据划分出的簇,那么这就是一个聚类问题。
你想发现一个异常点吗?此时你面对的就是一个异常检测问题。
理解你要满足的约束条
你需要考虑你能够存储数据的容量有多大?这取决于系统的存储容量,你可能无法存储若干 GB 大小的分类、回归模型或者若干 GB 的用于聚类分析的数据。例如,在嵌入式系统中,你就会面临这种情况。
对预测过程的速度是否有要求?在实时应用中,很显然,尽快得出预测结果是十分重要的。例如,在自动驾驶问题中,应用必须尽可能快地对道路标志进行分类,以免发生交通事故。
对学习过程的速度是否有要求?在某些情况下,快速训练模型是十分必要的:有时,你需要使用不同的数据集快速地实时更新你的模型。
寻找可用的算法
当对自己的任务环境有了一个清晰的认识后,你就可以使用你所掌握的工具确定适用于待解决的问题并切实可行的算法。一些影响你选择模型的因素如下:
模型是否满足业务目标
模型需要多少数据预处理工作
模型有多准确
模型的可解释性如何
模型运行的速度有多快:构造模型需要多久?模型做出预测需要多长时间?
模型的可伸缩性如何
模型的复杂度是一个影响算法选择的重要标准。一般来说,一个更复杂的模型具备下列特征:
它依赖于更多的特征进行学习和预测(例如,使用十个而不是两个特征来预测目标)
它依赖于更复杂的特征工程(例如,使用多项式特征、交互特征或主成分)
它有更大的计算开销(例如,需要一个由 100 棵决策树组成的随机森林,而不是一棵单独的决策树)
除此之外,同样的机器学习算法可以基于参数的个数和某些超参数的选择而变得更加复杂。例如:
回归模型可以拥有更多的特征,或者多项式项和交互项。
决策树可以拥有更大或更小的深度。
将相同的算法变得更加复杂增加了发生过拟合的几率。
常用的机器学习算法
线性回归
这可能是机器学习中最简单的算法。例如,当你想要计算一些连续值,而不是将输出分类时,可以使用回归算法。因此,当你需要预测一个正在运行的过程未来的值时,你可以使用回归算法。然而,当特征冗余,即如果存在多重共线性(multicollinearity)时,线性回归就不太稳定。
在下列情况下可以考虑使用线性回归:
从一个地方移动到另一个地方所需的时间
预测下个月某种产品的销售情况
血液中的酒精含量对协调能力的影响
预测每个月礼品卡的销售情况,并改善年收入的估算
Logistic 回归
Logistic 回归执行二进制分类,因此输出二值标签。它将特征的线性组合作为输入,并且对其应用非线性函数(sigmoid),因此它是一个非常小的神经网络的实例。
logistic回归提供了许多方法对你的模型进行正则化处理,因此正如在朴素贝叶斯算法中那样,你不必担心你的特征是否相关。该模型还有一个很好的概率化的解释。不像在决策树或者支持向量机中那样,你可以很容易地更新你的模型以获取新的数据。如果你想要使用一个概率化的框架,或者你希望在未来能够快速地将更多的训练数据融合到你的模型中,你可以使用 logistic 回归算法。logistic 回归还可以帮助你理解预测结果背后起作用的因素,它不完全是一个黑盒方法。
在下列情况下可以考虑使用 logistic 回归算法:
预测客户流失
信用评分和欺诈检测
评价市场营销活动的效果
决策树
决策树很少被单独使用,但是不同的决策树可以组合成非常高效的算法,例如随机森林或梯度提升树算法。
决策树很容易处理特征交互,并且决策树是一种非参数模型,所以你不必担心异常值或者数据是否是线性可分的。决策树算法的一个缺点是,它们不支持在线学习,因此当你要使用新的样本时,你不得不重新构建决策树。决策树的另一个缺点是,它很容易发生过拟合,而这就是像随机森林(或提升树)这样的集成学习方法能够派上用场的地方。决策树也需要大量的内存空间(拥有的特征越多,你的决策树可能会越深、越大)
决策树能够很好地帮助你在诸多行动路径中做出选择:
做出投资决策
预测客户流失
找出可能拖欠银行贷款的人
在「建造」和「购买」两种选择间进行抉择
销售主管的资质审核
K-均值
有时,你完全没有数据的标签信息,并且你的目的是根据对象的特征来为其打上标签。这种问题被称为聚类任务。聚类算法可以在这种情况下被使用:例如,当你有一大群用户,你希望根据他们共有的一些属性将其划分到一些特定的组中。
如果在你的问题声明中有这样的问题:例如,找出一群个体的组织形式,或将某些东西分组,或找出特定的组。这时,你就应该使用聚类算法。
该方法最大的缺点是,K-均值算法需要提前知道你的数据会有多少簇,因此这可能需要进行大量的试验去「猜测」我们最终定义的簇的最佳个数——K。
主成分分析(PCA)
主成分分析能够对数据进行降维。有时,你拥有各种各样的特征,这些特征之间的相关性可能很高,而模型如果使用如此大量的数据可能会产生过拟合现象。这时,你可以使用主成分分析(PCA)技术。
主成分分析(PCA)能够起作用的关键因素是:除了低维的样本表征,它还提供了各种变量的一种同步的低维表征。同步的样本和变量的表征提供了一种能够可视化地找到能够表示一组样本的特征的变量的方法。
支持向量机
支持向量机(SVM)是一种在模式识别和分类问题中被广泛应用的监督机器学习技术——当你的数据恰好有两类时。
支持向量机准确率高,对于防止过拟合很好的理论保障。当你使用一个合适的核函数时,即使你的数据在基(低维)特征空间中是线性不可分的,他们也可以很好地工作。支持向量机在文本分类问题中非常流行,在该问题中,输入是一个维度非常高的空间是很正常的。然而,SVM 是一种内存密集型算法,它很难被解释,并且对其进行调优十分困难。
在下列现实世界的应用中,你可以使用支持向量机:
发现患有糖尿病等常见疾病的人
手写字符识别
文本分类——将文章按照话题分类
股票市场价格预测
朴素贝叶斯
这是一种基于贝叶斯定理的分类技术,它很容易构建,非常适用于大规模数据集。除了结构简单,据说朴素贝叶斯的表现甚至比一些复杂得多的分类方法更好。当 CPU 和内存资源有限时,朴素贝叶斯算法也是一个很好的选项。
朴素贝叶斯非常简单,你仅仅是在做大量的计数工作。如果朴素贝叶斯的条件独立假设确实成立,朴素贝叶斯分类器的收敛速度会比 logistic 回归这样的判别模型更快,因此需要的训练数据更少。即使朴素贝叶斯的假设不成立,朴素贝叶斯分类器往往也能很好地完成任务。如果你想使用一种快速的、简单的、性能也不错的模型,朴素贝叶斯是一个很好的选择。这种算法最大的缺点就是它不能学习到特征之间的相互作用。
在下列真实世界的应用中,你可以使用朴素贝叶斯:
情感分析和文本分类
类似于 Netflix、Amazon 这样的推荐系统
识别垃圾邮件
人脸识别
随机森林
随机森林是一种决策树的集成方法。它能够同时解决具有大规模数据集的回归问题和分类问题,还有助于从数以千计的输入变量中找出最重要的变量。随机森林具有很强的可伸缩性,它适用于任何维数的数据,并且通常具有相当不错的性能。此外,还有一些遗传算法,它们可以在具有最少的关于数据本身的知识的情况下,很好地扩展到任何维度和任何数据上,其中最简单的实现就是微生物遗传算法。然而,随机森林学习的速度可能会很慢(取决于参数设置),并且这种方法不能迭代地改进生成模型。
在下列现实世界的应用中,你可以使用随机森林:
预测高危患者
预测零件在生产中的故障
预测拖欠贷款的人
神经网络
神经网络中包含着神经元之间连接的权重。这些权重是平衡的,逐次对数据点进行学习。当所有的权重都被训练好后,如果需要对新给定的数据点进行回归,神经网络可以被用于预测分类结果或一个具体数值。利用神经网络,可以对特别复杂的模型进行训练,并且将其作为一种黑盒方法加以利用,而在训练模型之前,我们无需进行不可预测的复杂特征工程。通过与「深度方法」相结合,甚至可以采用更加不可预测的模型去实现新任务。例如,最近人们已经通过深度神经网络大大提升了物体识别任务的结果。深度学习还被应用于特征提取这样的非监督学习任务,也可以在人为干预更少的情况下,从原始图像或语音中提取特征。
另一方面,神经网络很难被解释清楚,其参数设置也复杂地让人难以置信。此外,神经网络算法也都是资源密集型和内存密集型的。
SCIKIT 参考手册
Scikit learning 为大家提供了一个非常深入的、解释地很清楚的流程图,它能够帮助你选择正确的算法。我认为此图十分方便。
结论
一般来说,你可以根据上面介绍的要点来筛选出一些算法,但是要想在一开始就知道哪种方法最好是很难的。你最好多迭代几次选择算法的过程。将你的数据输入给那些你确定的潜在优秀机器学习算法,通过并行或串行的方式运行这些算法,最终评估算法性能,从而选择出最佳的算法。
在最后,我想告诉你:为现实生活中的问题找到正确的解决方案,通常不仅仅是一个应用数学方法的问题。这要求我们对业务需求、规则和制度、相关利益者的关注点有所了解,并且具备大量的专业知识。在解决一个机器学习问题的同时,能够结合并平衡这些问题是至关重要的,那些能做到这一点的人可以创造最大的价值。
这是计算机世界的一个尚未开发的前沿:将各种人类情感转化成实实在在的数据。
起源
虽然之前也有一些相关工作,但目前公认的情感分析比较系统的研究工作开始于(Pang et al, 2002)基于监督学习(supervised learning)方法对**评论文本进行情感倾向性分类和(Turney,2002)基于无监督学习(unsupervised learning)对文本情感情感倾向性分类的研究。Pang et al, 2002)基于文本的N元语法(ngram)和词类(POS)等特征分别使用朴素贝叶斯(Naive Bayes),最大熵(Maximum Entropy)和支持向量机(Support Vector Machine,SVM)将文本情感倾向性分为正向和负向两类,将文本的情感进行二元划分的做法也一直沿用至今。同时他们在实验中使用**评论数据集目前已成为广泛使用的情感分析的测试集。(Turney ,2002)基于点互信息(Pointwise Mutual Information,PMI)计算文本中抽取的关键词和种子词(excellent,poor)的相似度来对文本的情感倾向性进行判别(SO-PMI算法)。在此之后的大部分都是基于(Pang et al, 2002)的研究。而相对来说,(Turney et al,2002)提出的无监督学习的方法虽然在实现上更加简单,但是由于单词之间的情感相似度难以准确的计算和种子词的难以确定,继续在无监督学习方向的研究并不是很多的,但是利用SO-PMI算法计算文本情感倾向性的思想却被很多研究者所继承了
它是一种预测建模算法。之所以称为朴素贝叶斯,是因为它假设每个输入
变量是独立的。这个假设现实生活中根本不满足,但对绝大部分复杂问题仍然非常有效。
朴素贝叶斯模型由两种类型的概率组成:
1、每个类别的概率P(Cj);
2、每个属性的条件概率P(Ai|Cj)。
比如:cj就表示男女,比如c0=男,c1=女,而Ai就表示影响预测为男女的因素(身高、
体重、鞋码),比如A0=身高,A1=体重,A2=鞋码
为了训练朴素贝叶斯分类器模型,我们需要先给出训练数据,以及这些数据对应的分
类。那么类别概率和条件概率。可从训练数据计算出来。
一旦计算出来,概率模型就可以使用贝叶斯原理对新数据进行预测。
预测的原理就是,加入我们是一个而分类问题,C0表示正样本,C1表示负样本,则预测的结果就是去比较 P(C0|A1A2A3) 与 P(C1|A1A2A3)的大小。那个样本的概率高,就被预测为哪一类。
1贝叶斯原理是最大的概念,它解决了概率论中“逆向概率”的问题,在这个理论基础上,人们设计出了贝叶斯分类器
(1)实时预测 # 样本变化,概率变化
(2)多类预测,预测不同类别的可能性
(3)文本分类/垃圾邮件/情感分析 : 文本:变量类型多,更独立 朴素贝叶斯:执果索因,属于某个类别是某几个单词存在与否造成的
(4)推荐系统,朴素贝叶斯和协同过滤结合过滤用户想看到和不想看到的东西
(1) 高斯分布朴素贝叶斯GaussianNB
用处:解决连续数据分类问题。
如果数据集是连续型的,如身高,数据做正态分布,数据在分布的某个位置,对应一个概率,即根据正态分布的概率密度函数算出。 # 尽可能把数据集转换成标准正态分布(stand_scaler)。不过最好是做离散再做其他的概率模型。
(2) 多项式朴素⻉叶斯MultinomialNB
用处:处理离散数据建模,数据集尽可能离散。
离散数据集(可将连续数据做离散处理,如分箱处理)
计数,身高低,1,2,3
(3) 伯努利朴素⻉叶斯BernoulliNB
用处:数据特征可以表达是或不是,可用。
离散数据集,数据是与否,0或1
互斥事件一定不独立(因为一件事的发生导致了另一件事不能发生);
独立事件一定不互斥(如果独立事件互斥, 那么根据互斥事件一定不独立,就会矛盾)
问题修改为:到达公司未迟到选择第1条路的概率是多
少?
在知道未迟到结果的基础上问选择第一条路的概率,并不是直接可得出的。 故有:
所以选择第一条路的概率为028
贝叶斯公式是当已知结果,问导致这个结果的第i原因的可能性是多少?执果索因!
例:
假设有一种病叫做“贝”,它的发病率是万分之一,现有一种测试可以检验一个人是否得病的准确率是 999%,它的误报率是 01%,那么现在的问题是,如果一个人被查出来患有“贝”,实际上患有的可能性有多大?
问题分析:
假设:A 表示事件 “测出为阳性”, 用 B1 表示“患有贝”, B2 表示“没有患贝”。
P(A|B1)=999%,P(A|B2)=01%。
患有贝叶死的概率为 P(B1)=001%,没有患贝叶死的概率 P(B2)=9999%。
以上可以认为是先验概率。
想求 P(B1|A)
先验概率: 通过经验来判断事情发生的概率,就是先验概率。也就是能根据样本值估算出来的概率
后验概率: 就是发生结果之后,推测原因的概率。比如说你迟到了,那么原因可能是 A、B 或 C。其中迟到是因为原因A的概率就是后验概率。它是属于条件概率的一种。 # 及可根据先验概率求解出来的。
文本相似度。基于词典的情感分析,依赖人工标记的词典,所以需要大量的人力。如果遇到是情感词但是词典里没有,就设计到另一种在NLP经常用到的技术文本相似度。以上步骤可以更加优化,比如用决策树来判断句法规则。下一步实现,基于朴素贝叶斯的情感分析。
决策树(Decision Tree,DT)分类法是一个简单且广泛使用的分类技术。
决策树是一个树状预测模型,它是由结点和有向边组成的层次结构。树中包含3种结点:根结点、内部结点和叶子结点。决策树只有一个根结点,是全体训练数据的集合。
树中的一个内部结点表示一个特征属性上的测试,对应的分支表示这个特征属性在某个值域上的输出。一个叶子结点存放一个类别,也就是说,带有分类标签的数据集合即为实例所属的分类。
文本情感分析根据文本大小可以划分为单词,句子级和篇章级,根据不同的分析目的,可以分为主客观分析(作者对客观事物的分析)和主观分析(作者自己的体验);根据处理方法的可以分为基于词典的情感分析和基于机器学习(SVM方法,神经网络和朴素贝叶斯方法)的情感分析;根据是否有人工参与,可以分为非监督和监督分类方法,区别在于是否需要人工情感标记。算法,主要的改进是通过依赖分析,围绕情感词,进行情感倾向性分析。
情感分析也被称为意见挖掘。情感分类涉及多个领域,如自然语音处理,人工智能,自动文本分类,文本挖掘,心理学等。它主要用来判别自然语言文字表达的观点,喜好以及感受和态度等相关的信息。
与其他的人工智能技术相比,情感分析(Sentiment Analysis)显得有些特殊,因为其他的领域都是根据客观的数据来进行分析和预测,但情感分析则带有强烈的个人主观因素。情感分析的目标是从文本中分析出人们对于实体及其属性所表达的情感倾向以及观点,这项技术最早的研究始于2003年Nasukawa和Yi两位学者的关于商品评论的论文。
随着推特等社交媒体以及电商平台的发展而产生大量带有观点的内容,给情感分析提供了所需的数据基础。时至今日,情感识别已经在多个领域被广泛的应用。例如在商品零售领域,用户的评价对于零售商和生产商都是非常重要的反馈信息,通过对海量用户的评价进行情感分析,可以量化用户对产品及其竞品的褒贬程度,从而了解用户对于产品的诉求以及自己产品与竞品的对比优劣。在社会舆情领域,通过分析大众对于社会热点事件的点评可以有效的掌握舆论的走向。在企业舆情方面,利用情感分析可以快速了解社会对企业的评价,为企业的战略规划提供决策依据,提升企业在市场中的竞争力。在金融交易领域,分析交易者对于股票及其他金融衍生品的态度,为行情交易提供辅助依据。
目前,绝大多数的人工智能开放平台都具备情感分析的能力,如图所示是玻森中文语义开放平台的情感分析功能演示,可以看出除了通用领域的情感分析外,还有汽车、厨具、餐饮、新闻和微博几个特定领域的分析。
那么到底什么是情感分析呢?从自然语言处理技术的角度来看,情感分析的任务是从评论的文本中提取出评论的实体,以及评论者对该实体所表达的情感倾向,自然语言所有的核心技术问题,例如:词汇语义,指代消解,此役小气,信息抽取,语义分析等都会在情感分析中用到。因此,情感分析被认为是一个自然语言处理的子任务,我们可以将人们对于某个实体目标的情感统一用一个五元组的格式来表示:(e,a,s,h,t)
以图为例,e是指某餐厅,a为该餐厅的性价比属性,s是对该餐厅的性价比表示了褒义的评价,h为发表评论者本人,t是19年7月27日。所以这条评论的情感分析可以表示为五元组(某餐厅,性价比,正向褒义,评论者,19年7月27日)。
情感分析根据处理文本颗粒度的不同,大致可以分为三个级别的任务,分别是篇章级、句子级和属性级。我们分别来看一下。
1 篇章级情感分析
篇章级情感分析的目标是判断整篇文档表达的是褒义还是贬义的情感,例如一篇书评,或者对某一个热点时事新闻发表的评论,只要待分析的文本超过了一句话的范畴,即可视为是篇章级的情感分析。
对于篇章级的情感分析而言有一个前提假设,那就是全篇章所表达的观点仅针对一个单独的实体e,且只包含一个观点持有者h的观点。这种做法将整个文档视为一个整体,不对篇章中包含的具体实体和实体属性进行研究,使得篇章级的情感分析在实际应用中比较局限,无法对一段文本中的多个实体进行单独分析,对于文本中多个观点持有者的观点也无法辨别。
例如评价的文本是:“我觉得这款手机很棒。”评价者表达的是对手机整体的褒义评价,但如果是:“我觉得这款手机拍照功能很不错,但信号不是很好”这样的句子,在同一个评论中出现了褒义词又出现了贬义词,篇章级的分析是无法分辨出来的,只能将其作为一个整体进行分析。
不过好在有很多的场景是不需要区分观点评价的实体和观点持有者,例如在商品评论的情感分析中,可以默认评论的对象是被评论的商品,评论的观点持有者也是评论者本人。当然,这个也需要看被评论的商品具体是什么东西,如果是亲子旅游这样的旅游服务,那么评论中就很有可能包含一个以上的观点持有者。
在实际工作中,篇章级的情感分析无法满足我们对于评价更细致,如果需要对评论进行更精确,更细致的分析,我们需要拆分篇章中的每一句话,这就是句子级的情感分析研究的问题。
2 句子级情感分析
与篇章级的情感分析类似,句子级的情感分析任务是判断一个句子表达的是褒义还是贬义的情感,虽然颗粒度到了句子层级,但是句子级分析与篇章级存在同样的前提假设是,那就是一个句子只表达了一个观点和一种情感,并且只有一个观点持有人。如果一个句子中包含了两种以上的评价或多个观点持有人的观点,句子级的分析是无法分辨的。好在现实生活中,绝大多数的句子都只表达了一种情感。
既然句子级的情感分析在局限性上与篇章级是一样的,那么进行句子级的情感分析意义何在呢?关于这个问题,需要先解释一下语言学上主观句与客观句的分别。在我们日常用语当中,根据语句中是否带有说话人的主观情感可以将句子分为主观句和客观句,例如:“我喜欢这款新手机。”就是一个主观句,表达了说话人内心的情感或观点,而:“这个APP昨天更新了新功能。”则是一个客观句,陈述的是一个客观事实性信息,并不包含说话人内心的主观情感。通过分辨一个句子是否是主观句,可以帮助我们过滤掉一部分不含情感的句子,让数据处理更有效率。
但是在实操过程中,我们会发现这样的分类方法似乎并不是特别准确,因为一个主观句也可能没有表达任何的情感信息,知识表达了期望或者猜测,例如:“我觉得他现在已经在回家的路上了。”这句话是一个主观句,表达了说话人的猜测,但是并没有表达出任何的情感。而客观句也有可能包含情感信息,表明说话者并不希望这个事实发生,例如:“昨天刚买的新车就被人刮花了。”这句话是一个客观句,但结合常识我们会发现,这句话中其实是包含了说话人的负面情感。
所以,仅仅对句子进行主客观的分类还不足以达到对数据进行过滤的要求,我们需要的是对句子是否含有情感信息进行分类,如果一个句子直接表达或隐含了情感信息,则认为这个句子是含有情感观点的,对于不含情感观点的句子则可以进行过滤。目前对于句子是否含有情感信息的分类技术大多都是采用有监督的学习算法,这种方法需要大量的人工标注数据,基于句子特征来对句子进行分类。
总之,我们可以将句子级的情感分析分成两步,第一步是判断待分析的句子是否含有观点信息,第二步则是针对这些含有观点信息的句子进行情感分析,发现其中情感的倾向性,判断是褒义还是贬义。关于分析情感倾向性的方法与篇章级类似,依然是可以采用监督学习或根据情感词词典的方法来处理,我们会在后续的小节详细讲解。
句子级的情感分析相较于篇章级而言,颗粒度更加细分,但同样只能判断整体的情感,忽略了对于被评价实体的属性。同时它也无法判断比较型的情感观点,例如:“A产品的用户体验比B产品好多了。”对于这样一句话中表达了多个情感的句子,我们不能将其简单的归类为褒义或贬义的情感,而是需要更进一步的细化颗粒度,对评价实体的属性进行抽取,并将属性与相关实体之间进行关联,这就是属性级情感分析。
3 属性级情感分析
上文介绍的篇章级和句子级的情感分析,都无法确切的知道评价者喜欢和不喜欢的具体是什么东西,同时也无法区分对某一个被评价实体的A属性持褒义倾向,对B属性却持贬义倾向的情况。但在实际的语言表达中,一个句子中可能包含了多个不同情感倾向的观点,例如:“我喜欢这家餐厅的装修风格,但菜的味道却很一般。”类似于这样的句子,很难通过篇章级和句子级的情感分析了解到对象的属性层面。
为了在句子级分析的基础上更加细化,我们需要从文本中发现或抽取评价的对象主体信息,并根据文本的上下文判断评价者针对每一个属性所表达的是褒义还是贬义的情感,这种就称之为属性级的情感分析。属性级的情感分析关注的是被评价实体及其属性,包括评价者以及评价时间,目标是挖掘与发现评论在实体及其属性上的观点信息,使之能够生成有关目标实体及其属性完整的五元组观点摘要。具体到技术层面来看,属性级的情感分析可以分为以下6个步骤:
关于文本中的实体抽取和指代消解问题,我们已经在知识图谱的相关章节中做了介绍,这里就不再赘述。针对篇章级、句子级、属性级这三种类型的情感分析任务,人们做了大量的研究并提出了很多分类的方法,这些方法大致可以分为基于词典和基于机器学习两种,下面我们进行详细的讲解。
做情感分析离不开情感词,情感词是承载情感信息最基本的单元,除了基本的词之外,一些包含了情感含义的短语和成语我们也将其统称为情感词。基于情感词典的情感分析方法,主要是基于一个包含了已标注的情感词和短语的词典,在这个词典中包括了情感词的情感倾向以及情感强度,一般将褒义的情感标注为正数,贬义的情感标注为负数。
具体的步骤如图所示,首先将待分析的文本先进行分词,并对分词后的结果做去除停用词和无用词等文本数据的预处理。然后将分词的结果与情感词典中的词进行匹配,并根据词典标注的情感分对文本进行加法计算,最终的计算结果如果为正则是褒义情感,如果为负则是贬义情感,如果为0或情感倾向不明显的得分则为中性情感或无情感。
情感词典是整个分析流程的核心,情感词标注数据的好坏直接决定了情感分类的结果,在这方面可以直接采用已有的开源情感词典,例如BosonNLP基于微博、新闻、论坛等数据来源构建的情感词典,知网(Hownet)情感词典,台湾大学简体中文情感极性词典(NTSUSD),snownlp框架的词典等,同时还可以使用哈工大整理的同义词词林拓展词典作为辅助,通过这个词典可以找到情感词的同义词,拓展情感词典的范围。
当然,我们也可以根据业务的需要来自己训练情感词典,目前主流的情感词词典有三种构建方法:人工方法、基于字典的方法和基于语料库的方法。对于情感词的情感赋值,最简单的方法是将所有的褒义情感词赋值为+1,贬义的情感词赋值为-1,最后进行相加得出情感分析的结果。
但是这种赋值方式显然不符合实际的需求,在实际的语言表达中,存在着非常多的表达方式可以改变情感的强度,最典型的就是程度副词。程度副词分为两种,一种是可以加强情感词原本的情感,这种称之为情感加强词,例如“很好”相较于“好”的情感程度会更强烈,“非常好”又比“很好”更强。另外一种是情感减弱词,例如“没那么好”虽然也是褒义倾向,但情感强度相较于“好”会弱很多。如果出现了增强词,则需要在原来的赋值基础上增加情感得分,如果出现了减弱词则需要减少相应的情感得分。
另一种需要注意的情况是否定词,否定词的出现一般会改变情感词原本的情感倾向,变为相反的情感,例如“不好”就是在“好”前面加上了否定词“不”,使之变成了贬义词。早期的研究会将否定词搭配的情感词直接取相反数,即如果“好”的情感倾向是+1,那么“不好”的情感倾向就是-1。但是这种简单粗暴的规则无法对应上真实的表达情感,例如“太好”是一个比“好”褒义倾向更强的词,如果“好”的值为+1,那么“太好”可以赋值为+3,加上否定词的“不太好”变成-3则显然有点过于贬义了,将其赋值为-1或者-05可能更合适。
基于这种情况,我们可以对否定词也添加上程度的赋值而不是简单的取相反数,对于表达强烈否定的词例如“不那么”赋值为±4,当遇到与褒义词的组合时褒义词则取负数,与贬义词的组合则取正数,例如贬义词“难听”的赋值是-3,加上否定词变成“不那么难听”的情感得分就会是(-3+4=1)。
第三种需要注意的情况是条件词,如果一个条件词出现在句子中,则这个句子很可能不适合用来做情感分析,例如“如果我明天可以去旅行,那么我一定会非常开心。”,在这句话中有明显的褒义情感词,但是因为存在条件词“如果”,使得这个句子的并没有表达观点持有者的真实情感,而是一种假设。
除了条件句之外,还有一种语言表达也是需要在数据预处理阶段进行排除的,那就是疑问句。例如“这个餐厅真的有你说的那么好吗?”,虽然句子中出现了很强烈的褒义情感词“那么好”,但依然不能将它分类为褒义句。疑问句通常会有固定的结尾词,例如“……吗?”或者“……么?”,但是也有的疑问句会省略掉结尾词,直接使用标点符号“?”,例如“你今天是不是不开心?”,这个句子中含有否定词和褒义词组成的“不开心”,但不能将其分类为贬义情感。
最后一种需要注意的情况是转折词,典型词是“但是”,出现在转折词之前的情感倾向通常与转折词之后的情感倾向相反,例如:“我上次在这家酒店的住宿体验非常好,但是这次却让我很失望。”在这个转折句中,转折词之前的“非常好”是一个很强的褒义词,但真实的情感表达却是转折词之后的“很失望”,最终应该将其分类为贬义情感。当然,也存在出现了转折词,但语句本身的情感并没有发生改变的情况,例如“你这次考试比上次有了很大的进步,但是我觉得你可以做得更好”,这里的转折词没有转折含义,而是一种递进含义。在实际操作中,我们所以需要先判断转折句真实的情感表达到底是哪个,才能进行正确的分析计算。
构建情感词典是一件比较耗费人工的事情,除了上述需要注意的问题外,还存在精准度不高,新词和网络用语难以快速收录进词典等问题。同时基于词典的分析方法也存在很多的局限性,例如一个句子可能出现了情感词,但并没有表达情感。或者一个句子不含任何情感词,但却蕴含了说话人的情感。以及部分情感词的含义会随着上下文语境的变化而变化的问题,例如“精明”这个词可以作为褒义词夸奖他人,也可以作为贬义词批评他人。
尽管目前存在诸多问题,但基于字典的情感分析方法也有着不可取代的优势,那就是这种分析方法通用性较强,大多数情况下无需特别的领域数据标注就可以分析文本所表达的情感,对于通用领域的情感分析可以将其作为首选的方案。
我们在机器学习算法的章节介绍过很多分类算法,例如逻辑回归、朴素贝叶斯、KNN等,这些算法都可以用于情感识别。具体的做法与机器学习一样需要分为两个步骤,第一步是根据训练数据构建算法模型,第二步是将测试数据输入到算法模型中输出对应的结果,接下来做具体的讲解。
首先,我们需要准备一些训练用的文本数据,并人工给这些数据做好情感分类的标注,通常的做法下,如果是褒义和贬义的两分类,则褒义标注为1,贬义标注为0,如果是褒义、贬义和中性三分类,则褒义标注为1,中性标注为0,贬义标注为-1
在这一环节中如果用纯人工方法来进行标注,可能会因为个人主观因素对标注的结果造成一定影响,为了避免人的因素带来的影响,也为了提高标注的效率,有一些其他取巧的方法来对数据进行自动标注。比如在电商领域中,商品的评论除了文本数据之外通常还会带有一个5星的等级评分,我们可以根据用户的5星评分作为标注依据,如果是1-2星则标注为贬义,如果是3星标注为中性,4-5星标注为褒义。又比如在社区领域中,很多社区会对帖子有赞和踩的功能,这一数据也可以作为情感标注的参考依据。
第二步是将标注好情感倾向的文本进行分词,并进行数据的预处理,前文已经对分词有了很多的介绍,这里就不再过多的赘述。第三步是从分词的结果中标注出具备情感特征的词,这里特别说一下,如果是对情感进行分类,可以参考情感词典进行标注,也可以采用TF-IDF算法自动抽取出文档的特征词进行标注。如果分析的是某个特定领域的,还需要标注出特定领域的词,例如做商品评价的情感分析,需要标注出商品名称,品类名称,属性名称等。第四步根据分词统计词频构建词袋模型,形成特征词矩阵,如表所示。在这一步可以根据业务需要给每个特征词赋予权重,并通过词频乘以权重得到特征词分数。最后一步就是根据分类算法,将特征词矩阵作为输入数据,得到最终的分类模型。
当训练好分类模型之后,就可以对测试集进行分类了,具体的流程与建模流程类似,先对测试的文本数据进行分词并做数据预处理,然后根据特征词矩阵抽取测试文本的特征词构建词袋矩阵,并将词袋矩阵的词频数据作为输入数据代入之前训练好的模型进行分类,得到分类的结果。
采用基于机器学习的方法进行情感分析有以下几个不足之处,第一是每一个应用领域之间的语言描述差异导致了训练得到的分类模型不能应用与其他的领域,需要单独构建。第二是最终的分类效果取决于训练文本的选择以及正确的情感标注,而人对于情感的理解带有主观性,如果标注出现偏差就会对最终的结果产生影响。
除了基于词典和基于机器学习的方法,也有一些学者将两者结合起来使用,弥补两种方法的缺点,比单独采用一种方法的分类效果要更好,另外,也有学者尝试使用基于LSTM等深度学习的方法对情感进行分析,相信在未来,情感分析会应用在更多的产品中,帮助我们更好的理解用户需求,提升用户使用智能产品的体验。
随着深度神经网络等算法的应用,情感分析的研究方向已经有了非常大的进展,但依然存在着一些难题是目前尚未解决的,在实操过程中需特别注意以下几种类型数据:
情绪轮在用户体验设计上被广泛的应用,很多情感化设计都是基于情绪轮进行的。但是在人工智能领域,将情绪进行多分类比情感分析的三分类任务要难得多,目前大多数分类方法的结果准确性都不到50%。这是因为情绪本身包含了太多的类别,而且不同的类别之间又可能具有相似性,一个情绪词在不同的语境下有可能表达的是不同的情绪类别,算法很难对其进行分类。即使是人工对文本进行情绪类别标注也往往效果不佳,因为情绪是非常主观性的,不同的人对不同的文本可能产生不同的理解,这使得人工标注情绪类比的过程异常困难。如何让机器可以理解真实的情绪目前还是一个未能攻克的难题。
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)