情感挖掘算法
⑴ 数据挖掘十大经典算法之朴素贝叶斯
朴素贝叶斯,它是一种简单但极为强大的预测建模算法。之所以称为朴素贝叶斯,**是因为它假设每个输入变量是独立的。**这个假设很硬,现实生活中根本不满足,但是这项技术对于绝大部分的复杂问题仍然非常有效。
贝叶斯原理、贝叶斯分类和朴素贝叶斯这三者之间是有区别的。
贝叶斯原理是最大的概念,它解决了概率论中“逆向概率”的问题,在这个理论基础上,人们设计出了贝叶斯分类器,朴素贝叶斯分类是贝叶斯分类器中的一种,也是最简单,最常用的分类器。朴素贝叶斯之所以朴素是因为它假设属性是相互独立的,因此对实际情况有所约束,**如果属性之间存在关联,分类准确率会降低。**不过好在对于大部分情况下,朴素贝叶斯的分类效果都不错。
朴素贝叶斯分类器依靠精确的自然概率模型,在有监督学习的样本集中能获取得非常好的分类效果。在许多实际应用中,朴素贝叶斯模型参数估计使用最大似然估计方法,换而言之朴素贝叶斯模型能工作并没有用到贝叶斯概率或者任何贝叶斯模型。
朴素贝叶斯分类 常用于文本分类 ,尤其是对于英文等语言来说,分类效果很好。它常用于垃圾文本过滤、情感预测、推荐系统等。
1、 需要知道先验概率
先验概率是计算后验概率的基础。在传统的概率理论中,先验概率可以由大量的重复实验所获得的各类样本出现的频率来近似获得,其基础是“大数定律”,这一思想称为“频率主义”。而在称为“贝叶斯主义”的数理统计学派中,他们认为时间是单向的,许多事件的发生不具有可重复性,因此先验概率只能根据对置信度的主观判定来给出,也可以说由“信仰”来确定。
2、按照获得的信息对先验概率进行修正
在没有获得任何信息的时候,如果要进行分类判别,只能依据各类存在的先验概率,将样本划分到先验概率大的一类中。而在获得了更多关于样本特征的信息后,可以依照贝叶斯公式对先验概率进行修正,得到后验概率,提高分类决策的准确性和置信度。
3、分类决策存在错误率
由于贝叶斯分类是在样本取得某特征值时对它属于各类的概率进行推测,并无法获得样本真实的类别归属情况,所以分类决策一定存在错误率,即使错误率很低,分类错误的情况也可能发生。
第一阶段:准备阶段
在这个阶段我们需要确定特征属性,同时明确预测值是什么。并对每个特征属性进行适当划分,然后由人工对一部分数据进行分类,形成训练样本。
第二阶段:训练阶段
这个阶段就是生成分类器,主要工作是 计算每个类别在训练样本中的出现频率 及 每个特征属性划分对每个类别的条件概率。
第三阶段:应用阶段
这个阶段是使用分类器对新数据进行分类。
优点:
(1)朴素贝叶斯模型发源于古典数学理论,有稳定的分类效率。
(2)对小规模的数据表现很好,能个处理多分类任务,适合增量式训练,尤其是数据量超出内存时,我们可以一批批的去增量训练。
(3)对缺失数据不太敏感,算法也比较简单,常用于文本分类。
缺点:
(1)理论上,朴素贝叶斯模型与其他分类方法相比具有最小的误差率。但是实际上并非总是如此,这是因为朴素贝叶斯模型给定输出类别的情况下,假设属性之间相互独立,这个假设在实际应用中往往是不成立的,在属性个数比较多或者属性之间相关性较大时,分类效果不好。而在属性相关性较小时,朴素贝叶斯性能最为良好。对于这一点,有半朴素贝叶斯之类的算法通过考虑部分关联性适度改进。
(2)需要知道先验概率,且先验概率很多时候取决于假设,假设的模型可以有很多种,因此在某些时候会由于假设的先验模型的原因导致预测效果不佳。
(3)由于我们是通过先验和数据来决定后验的概率从而决定分类,所以分类决策存在一定的错误率。
(4)对输入数据的表达形式很敏感。
参考:
https://blog.csdn.net/qiu__liao/article/details/90671932
https://blog.csdn.net/u011067360/article/details/24368085
⑵ 情感分析之TF-IDF算法
http://mini.eastday.com/bdmip/180414224336264.html
在这篇文章中,主要介绍的内容有:
1、将单词转换为特征向量
2、TF-IDF计算单词关联度
文本的预处理和分词。
如何将单词等分类数据转成为数值格式,以方便我们后面使用机器学习来训练模型。
一、将单词转换为特征向量
词袋模型(bag-of-words model):将文本以数值特征向量的形式来表示。主要通过两个步骤来实现词袋模型:
1、为整个文档集(包含了许多的文档)上的每个单词创建一个唯一的标记。
2、为每个文档构建一个特征向量,主要包含每个单词在文档上的出现次数。
注意:由于每个文档中出现的单词数量只是整个文档集中很少的一部分,因此会有很多的单词没有出现过,就会被标记为0。所以,特征向量中大多数的元素就会为0,就会产生稀疏矩阵。
下面通过sklearn的CountVectorizer来实现一个词袋模型,将文档转换成为特征向量
通过count.vocabulary_我们可以看出每个单词所对应的索引位置,每一个句子都是由一个6维的特征向量所组成。其中,第一列的索引为0,对应单词"and","and"在第一和二条句子中没有出现过,所以为0,在第三条句子中出现过一些,所以为1。特征向量中的值也被称为原始词频(raw term frequency)简写为tf(t,d),表示在文档d中词汇t的出现次数。
注意:在上面词袋模型中,我们是使用单个的单词来构建词向量,这样的序列被称为1元组(1-gram)或单元组(unigram)模型。除了一元组以外,我们还可以构建n元组(n-gram)。n元组模型中的n取值与特定的应用场景有关,如在反垃圾邮件中,n的值为3或4的n元组可以获得比较好的效果。下面举例说明一下n元组,如在"the weather is sweet"这句话中,
1元组:"the"、"weather"、"is"、"sweet"。
2元组:"the weather"、"weather is"、"is sweet"。
在sklearn中,可以设置CountVecorizer中的ngram_range参数来构建不同的n元组模型,默认ngram_range=(1,1)。
sklearn通过CountVecorizer构建2元组
二、TF-IDF计算单词关联度
在使用上面的方法来构建词向量的时候可能会遇到一个问题:一个单词在不同类型的文档中都出现,这种类型的单词其实是不具备文档类型的区分能力。我们通过TF-IDF算法来构建词向量,从而来克服这个问题。
词频-逆文档频率(TF-IDF,term frequency-inverse document frequency):tf-idf可以定义为词频×逆文档频率
其中tf(t,d)表示单词t在文档d中的出现次数,idf(t,d)为逆文档频率,计算公式如下
其中,nd表示文档的总数,df(t,d)表示包含单词t的文档d的数量。分母中加入常数1,是为了防止df(t,d)=0的情况,导致分母为0。取log的目的是保证当df(t,d)很小的时候,不会导致idf(t,d)过大。
通过sklearn的TfidfTransformer和CountVectorizer来计算tf-idf
可以发现"is"(第二列)和"the"(第六列),它们在三个句子中都出现过,它们对于文档的分类所提供的信息并不会很多,所以它们的tf-idf的值相对来说都是比较小的。
注意:sklearn中的TfidfTransformer的TF-IDF的计算与我们上面所定义TF-IDF的公式有所不同,sklearn的TF-IDF计算公式
通常在计算TF-IDF之前,会对原始词频tf(t,d)做归一化处理,TfidfTransformer是直接对tf-idf做归一化。TfidfTransformer默认使用L2归一化,它通过与一个未归一化特征向量L2范数的比值,使得返回向量的长度为1,计算公式如下:
下面通过一个例子来说明sklearn中的TfidfTransformer的tf-idf的计算过程,以上面的第一句话"The sun is shining"为例子
1、计算原始词频
a、单词所对应的下标
b、计算第三句话的原始词频tf(t,d)
c、计算逆文档频率idf(t,d)
注意:其他的词在计算tf-idf都是0,因为原始词频为0,所以就不需要计算idf了,log是以自然数e为底。
d、计算tf-idf
所以,第一个句子的tf-idf特征向量为[0,1,1.29,1.29,0,1,0]
e、tf-idf的L2归一化
⑶ 怎样通过句法分析分析句子情感算法例子
怎样通过句法分析分析句子情感算法例子?现阶段主要的情感分析方法主要有两类:
基于词典的方法
基于机器学习的方法
基于词典的方法主要通过制定一系列的情感词典和规则,对文本进行段落拆借、句法分析,计算情感值,最后通过情感值来作为文本的情感倾向依据。
基于机器学习的方法大多将这个问题转化为一个分类问题来看待,对于情感极性的判断,将目标情感分类2类:正、负。对训练文本进行人工标标注,然后进行有监督的机器学习过程。例如想在较为常见的基于大规模语料库的机器学习等。
⑷ 情感分析器的研究方法
监督学习
目前,基于监督学习的情感分析仍然是主流,除了(Li et al.,2009)基于非负矩阵三分解(Non-negative Matrix Tri-factorization),(Abbasi et al.,2008)基于遗传算法(Genetic Algorithm)的情感分析之外,使用的最多的监督学习算法是朴素贝叶斯,k最近邻(k-Nearest Neighbor,k-NN),最大熵和支持向量机的。而对于算法的改进主要在对文本的预处理阶段。
基于规则/无监督学习
和基于监督学习的情感分析相比,基于规则和无监督学习方面的研究不是很多。除了(Turney,2002)之外,(朱嫣岚 et al.,2002)利用HowNet对中文词语语义的进行了情感倾向计算。(娄德成 et al.,2006)利用句法结构和依存关系对中文句子语义进行了情感分析,(Hiroshi et al.,2004)通过改造一个基于规则的机器翻译器实现日文短语级情感分析,(Zagibalov et al.,2008)在(Turney,2002)的SO-PMI算法的基础上通过对于中文文本特征的深入分析以及引入迭代机制从而在很大程度上提高了无监督学习情感分析的准确率。
跨领域情感分析
跨领域情感分析在情感分析中是一个新兴的领域,目前在这方面的研究不是很多,主要原因是目前的研究还没有很好的解决如何寻找两个领域之间的一种映射关系,或者说如何寻找两个领域之间特征权值之间的平衡关系。对于跨领域情感分析的研究开始于(Blitzer et al.,2007)将结构对应学习(Structural Correspondence Learning,SCL)引入跨领域情感分析,SCL是一种应用范围很广的跨领域文本分析算法,SCL的目的是将训练集上的特征尽量对应到测试集中。(Tan et al.,2009)将SCL引入了中文跨领域情感分析中。(Tan2 et al.,2009)提出将朴素贝叶斯和EM算法的一种半监督学习方法应用到了跨领域的情感分析中。(Wu et al.,2009)将基于EM的思想将图排序(Graph Ranking)算法应用到跨领域的情感分析中,图排序算法可以认为是一种迭代的k-NN