本次实验将加载两个数据,一个是已经标注好的用户评论数据,另外一个是用户评价主题句,通过标注过的用户评论数据进行基于集成模型的情感极性模型训练,然后利用模型对主题句进行情感极性推理,最后通过数据聚合可视化得出主题情感极性。
使用 Pandas 加载在线数据表格,并查看数据维度和前 5 行数据。
数据属性如下表所示
加载我们之前通过主题词典提取出来的主题句。
数据属性如下表所示
用户评论分词
jieba 分词器预热,第一次使用需要加载字典和缓存,通过结果看出返回的是分词的列表。
批量对用户评价进行分词,需要一些时间,并打印第一行情感极性训练集的分词结果。
批量对用户评价主题句进行分词,并打印第一句用户主题句分词结果。
依据统计学模型假设,假设用户评论中的词语之间相互独立,用户评价中的每一个词语都是一个特征,我们直接使用 TF-IDF 对用户评价提取特征,并对提取特征后的用户评价输入分类模型进行分类,将类别输出为积极的概率作为用户极性映射即可。
用户评论向量化
TF-IDF 是一种用于信息检索与数据挖掘的常用加权技术,当某个词在文章中的TF-IDF越大,那么一般而言这个词在这篇文章的重要性会越高,比较适合对用户评论中的关键词进行量化。
数据集合划分
按照训练集 8 成和测试集 2 成的比例对数据集进行划分,并检查划分之后的数据集数量。
我们在系列实验的开始使用朴素贝叶斯模型来训练情感分析模型,下面我们新增逻辑回归模型作为对比模型。逻辑回归(Logistic Regression)是一种用于解决二分类问题的机器学习方法,在线性回归的基础上,套用了一个 sigmod 函数,这个函数将线性结果映射到一个概率区间,并且通常以 05 分界线,这就使得数据的分类结果都趋向于在 0 和 1 两端,将用户评论进行向量化之后也可以用此方式预测用户情感。本实验直接对标注过的用户情感数据进行训练,并验证单一模型和集成模型在情感分析性能上的差异。
模型加载
通过传入原始的标签和预测的标签可以直接将分类器性能进行度量,利用常用的分类模型评价指标对训练好的模型进行模型评价,accuracy_score 评价被正确预测的样本占总样本的比例,Precision 是衡量模型精确率的指标,它是指模型识别出的文档数与识别的文档总数的比率,衡量的是模型的查准率。Recall 召回率也称为敏感度,它是指模型识别出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率,表示正样本在被正确划分样本中所占的比例,f1_score 值是精确率与召回率的调和平均数,是一个综合性的指数。
我们分别对不同模型使用相同的数据集进行训练和测试,以此来比较单模型之间的差异,并打印模型运行时间供大家参考,批量处理不同的模型需要一些时间进行计算,清耐心等待。
通过求得的指标进行模型评价,我们发现使用相同的数据进行模型训练,朴素贝叶斯模型和逻辑回归模型性能基本持平,相差很微弱,逻辑回归稍稍占一些优势。
Stacking 堆栈模型训练
集成学习是地结合来自两个或多个基本机器学习算法的优势,学习如何最好地结合来自多个性能良好的机器学习模型的预测结果,并作出比集成中的任何一个模型更好的预测。主要分为 Bagging, Boosting 和 Stacking,Stacking 堆栈模型是集成机器学习模型的一种,具体是将训练好的所有基模型对整个训练集进行预测,然后将每个模型输出的预测结果合并为新的特征,并加以训练。主要能降低模型的过拟合风险,提高模型的准确度。
开始对两个模型进行集成训练,训练的时间要比单一模型时间久一些,清耐心等待。
评测结果收集。
结果分析
将结果存入 Dataframe 进行结果分析,lr 表示逻辑回归,nb 表示朴素贝叶斯,model_stacking 将两个单模型集成后的模型。从结果来看集成模型准确度和 f1 值都是最高的,结合两个模型的优势,整体预测性能更好,鲁棒性更好。
样例测试
通过测试样例发现,分类器对正常的积极和消极判断比较好。但是当我们改变语义信息,情感模型则不能进行识别,模型鲁棒性较差。作为早期的文本分类模型,我们使用 TFIDF 的特征提取方式并不能很好的解决语义问题,自然语言是带有语序和语义的关联,其词语之间的关联关系影响整句话的情感极性,后续我们继续试验深度情感分析模型研究解决此类问题。
加载民宿主题数据。
模型预测
将情感分析模型推理的结果写入 DataFrame 中进行聚合。
单主题聚合分析
挑选一个主题进行主题情感分析。
对民宿“设施”进行描述统计,此次我们使用主题词典的出来的用户关于民宿“设施”主体的讨论条数为 4628 条,平均用户情感极性为 040 表示为整体呈现不满意的情况,有超过一半的关于“设施”的民宿评论中表现用户不满意的情况,重庆民宿需要在“设施”进行改善,以此提高用户满意度。
单主题情感极性可视化
我们开始进行“设置”主题下的用户主题情感进行可视化,首先加载画图模块。
对“设施”主题下的用户情感极性进行可视化,我们利用集成模型对主题句进行情感极性预测,如下所示。
情感分析(又称为观点挖掘或感情AI)是指使用自然语言处理、文本分析、计算语言学和生物特征识别来系统地识别、提取、量化和研究情感状态和主观信息。情感分析广泛应用于分析客户的心声,如评论和调查回复,在线和社交媒体,以及从市场营销到客户服务再到临床医学的保健材料。
情感分析的一个基本任务是在文档、句子或特征/方面级别对给定文本的极性进行分类,判断在文档、句子或实体特征/方面中表达的意见是积极的、消极的还是中性的。高级的“超越极性”情感分类着眼于诸如“愤怒”、“悲伤”和“快乐”等情绪状态。
进行情感分析的先驱包括“一般询问者”(General Inquirer),它提供了量化文本模式的线索,另外,还提供了基于对人的言语行为进行分析来检查一个人的心理状态的心理学研究。
这是计算机世界的一个尚未开发的前沿:将各种人类情感转化成实实在在的数据。
起源
虽然之前也有一些相关工作,但目前公认的情感分析比较系统的研究工作开始于(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微博消息传播的特点 2微博用户状态 3微博意见领袖 4微博传播模型 二、基于K-mea算法的微博舆情监测分析系统。
来源 | 雪晴数据网
利用机器学习可以很方便的做情感分析。本篇文章将介绍在R语言中如何利用机器学习方法来做情感分析。在R语言中,由Timothy PJurka开发的情感分析以及更一般的文本挖掘包已经得到了很好的发展。你可以查看下sentiment包以及梦幻般的RTextTools包。实际上,Timothy还写了一个针对低内存下多元Logistic回归(也称最大熵)的R包maxtent。
然而,RTextTools包中不包含朴素贝叶斯方法。e1071包可以很好的执行朴素贝叶斯方法。e1071是TU Wien(维也纳科技大学)统计系的一门课程。这个包的主要开发者是David Meyer。
我们仍然有必要了解文本分析方面的知识。用R语言来处理文本分析已经是公认的事实(详见R语言中的自然语言处理)。tm包算是其中成功的一部分:它是R语言在文本挖掘应用中的一个框架。它在文本清洗(词干提取,删除停用词等)以及将文本转换为词条-文档矩阵(dtm)方面做得很好。这里是对它的一个介绍。文本分析最重要的部分就是得到每个文档的特征向量,其中词语特征最重要的。当然,你也可以将单个词语特征扩展为双词组,三连词,n-连词等。在本篇文章,我们以单个词语特征为例做演示。
注意,在R中用ngram包来处理n-连词。在过去,Rweka包提供了函数来处理它,感兴趣的可以查看这个案例。现在,你可以设置RTextTools包中create_matrix函数的参数ngramLength来实现它。
第一步是读取数据:
创建词条-文档矩阵:
现在,我们可以用这个数据集来训练朴素贝叶斯模型。注意,e1071要求响应变量是数值型或因子型的。我们用下面的方法将字符串型数据转换成因子型:
测试结果准确度:
显然,这个结果跟python得到的结果是相同的(这篇文章是用python得到的结果)。
其它机器学习方法怎样呢?
下面我们使用RTextTools包来处理它。
首先,指定相应的数据:
其次,用多种机器学习算法训练模型:
现在,我们可以使用训练过的模型做测试集分类:
准确性如何呢?
得到模型的结果摘要(特别是结果的有效性):
结果的交叉验证:
结果可在我的Rpub页面找到。可以看到,maxent的准确性跟朴素贝叶斯是一样的,其它方法的结果准确性更差。这是可以理解的,因为我们给的是一个非常小的数据集。扩大训练集后,利用更复杂的方法我们对推文做的情感分析可以得到一个更好的结果。示例演示如下:
推文情感分析
数据来自victornep。victorneo展示的是用python对推文做情感分析。这里,我们用R来处理它:
读取数据:
首先,尝试下朴素贝叶斯
然后,尝试其他方法:
这里,我们也希望得到正式的测试结果。包括:
1analytics@algorithm_summary:包括精确度,召回率,准确率,F-scores的摘要
2analytics@label_summary:类标签摘要
3analytics@document_summary:所有数据和得分的原摘要
4analytics@ensemble_summary:所有 精确度/覆盖度 比值的摘要
现在让我们看看结果:
与朴素贝叶斯方法相比,其它算法的结果更好,召回精度高于095。结果可在Rpub查看
原文链接:http://wwwxueqingcc/cms/article/107
欢迎分享,转载请注明来源:浪漫分享网
评论列表(0条)