解读:案例 | 以《疯狂动物城》为例,教你如何做基于 Spark 的文本情感分析
优采云 发布时间: 2022-11-03 23:18解读:案例 | 以《疯狂动物城》为例,教你如何做基于 Spark 的文本情感分析
微信加CDA为好友(ID:joinlearn),拉你进入500人数据分析师交流群。点击阅读原文,查看CDA数据分析师交流群的规范和好处。期待你的到来~本文介绍一个基于Spark的认证系统。知识系统:一种文本情感分析系统,用于分析和理解来自社交论坛的非结构化文本数据。
基于 Spark 的文本情感分析
文本情感分析是指对带有人类主观情感色彩的文本素材进行处理、分析和推理的过程。文本情感分析的主要应用场景是对用户对某个话题的评论文本进行处理和分析。例如,人们在计划看电影之前,通常会先阅读豆瓣电影版块的用户评论,然后再决定是否看电影。另一方面,电影制作人将通过分析专业论坛上的用户评论来了解电影的整体市场反馈。本文文本分析的对象是在线短评,即非正式场合的短文本语料库。在只考虑正负倾向的情况下,实现了文本倾向的分类。
文本情感分析主要涉及以下四个技术环节。
为什么使用 Spark
传统的单节点计算已经难以满足用户对海量数据的处理和分析需求。例如,在豆瓣网站 上有 111,421 条关于电影《疯狂动物城》的短评。如果需要同时处理多个专业网站的所有电影的影评,单台服务器的计算能力和存储容量难以满足需求。这时就需要考虑引入分布式计算技术,让计算能力和存储容量线性扩展。
Spark 是一个快速、通用的集群计算平台,是业界非常流行的开源分布式技术。Spark 围绕 RDD(弹性分布式数据集)弹性分布式数据集扩展了广泛使用的 MapReduce [5] 计算模型。与 Hadoop [6] 的 MapReduce 计算框架相比,Spark 更高效、更灵活。Spark的主要特点如下:
内存计算:可以在内存中进行计算。会优先使用各个计算节点的内存作为存储,只有在内存不足时才考虑使用磁盘,大大降低了磁盘I/O,提高了效率。
懒惰评估:RDD丰富的计算操作可以分为两类,变换操作和动作操作。当程序调用RDD的变换操作(如数据读取、Map、Filter)时,Spark不会立即开始计算,而是会记下需要执行的操作,并尽可能结合一些变换操作。减少计算数据的步骤。只有当一个action操作(如获取数据的行数Count)被调用时,才会读取数据,转换操作,action操作,得到结果。
接口丰富:Spark提供Scala、Java、Python、R四种编程语言接口,可以满足不同技术背景工程师的需求。它可以与其他大数据工具紧密合作。例如,Spark 可以运行在 Hadoop 之上,并且可以访问所有支持 Hadoop 的数据源(例如 HDFS、Cassandra、Hbase)。
本文以Spark的Python接口为例,介绍如何搭建文本情感分析系统。作者使用 Python 3.5.0 和 Spark1.6.1 作为开发环境,使用 Jupyter Notebook [7] 编写代码。Jupyter Notebook 是 IPython Notebook 的演变,它是一个基于 Web 的交互式环境,允许您将代码、代码执行、数学函数、丰富的文档、绘图和其他元素集成到单个文件中。在运行pyspark之前,需要指定pyspark的运行环境,如下:
清单 1. 为 pyspark 指定 ipython notebook 运行时环境
接下来,您可以在 Jupyter Notebook 中编写代码。
如何搭建基于Spark的文本情感分析系统
本文第一章介绍了文本情感分析涉及的四个主要技术环节。基于Spark的文本分类系统的技术流程也是如此。在*敏*感*词*文本数据的情况下,区别在于文本的特征维度一般都非常大。试想一下,汉字字数有多少,再加上其他语言和网上能查到的所有文字,那么文字数据按照文字的维度就可以轻松超过几十万上百万的维度,所以有必要寻找一种方法来处理非常大维度的文本数据。
在本文的后续章节中,我们将讨论基于 Spark 的数据预处理、文本建模、特征提取、训练分类模型以及实现待输入文本分类。系统的上下文图如图1所示,系统的功能架构图如图2所示。
图 1. 基于 Spark 的文本情感分析系统的上下文
图 2. 基于 Spark 的文本情感分析系统功能架构图
爬取数据说明
为了说明文本分类系统的构建过程,作者在豆瓣网()上爬取了《疯狂动物城》的短评和评分。示例数据如下所示:
表 1. 样本数据
表格中每一行收录一条评论数据,按照“评分、评论文本”排列,中间有标签,范围从1到5。总共有116567条这样的数据。
数据预处理
本文的这一部分将解释如何使用 Spark 来清理和提取数据。该子系统的输入是爬虫的数据,输出是收录相同数量的正面和负面评论的 Saprk 弹性分布式数据集。
Spark数据处理主要围绕RDD(Resilient Distributed Datasets)弹性分布式数据集对象展开。本文首先将爬虫数据加载到 Spark 系统中,并将其抽象为 RDD。可以使用 distinct 方法对数据进行重复数据删除。数据转换主要使用map方法,它接受传入的数据转换方法逐行执行该方法,从而实现转换操作。它只需要使用一个函数来映射输入和输出,就可以完成转换。数据过滤使用filter方法,保留条件为真的数据。您可以使用以下语句将每一行文本变成一个列表,并只保留长度为 2 的数据。
清单 2. 用于数据预处理的 Spark
清单 3. 统计基本信息
本文共有5个点的数据30447条,4点、3点、2点和1点的数据分别为11711条,123条和70条。五分的分数无疑是正面评价;考虑到不同人对评分的偏好不同,对于一个四分数据,本文无法判断是好评还是差评;三分及以下是差评。
接下来,可以将带有评分的数据转换为正面数据和差评数据。为了提高计算效率,本文对其进行了重新分区。
清单 4. 合并负样本数据
根据计算,正面评价30447条,负面评价2238条,属于不平衡样本的机器模型训练。本文只取部分正面数据,正面和负面评论数量相同,使训练的正负样本平衡。最后将正负样本放在一起,将分类标签和文本分开,形成训练数据集
清单 5. 生成训练数据集
文本的向量表示和文本特征提取
本节主要介绍如何进行文本分割,以及如何使用 TF-IDF 算法提取文本特征。将输入的文本数据转换成向量,以便计算“读取”文本。
要解决文本分类问题,最重要的是使文本可计算并以合适的方式表示文本。其中的核心是找到文本的特征和特征值。与英文相比,中文多了一个分词过程。本文首先使用jieba tokenizer对文本进行分词,使得每个词都可以作为文本的一个特征。jieba分词器具有三种分词模式:
这里本文使用搜索引擎模型将每条评论转化为一个词。
清单 6. 分词
考虑到*敏*感*词*数据的计算需求,spark的词频计算是使用特征哈希(HashingTF)来计算的。特征哈希是一种处理高维数据的技术,通常应用于文本和分类数据集。普通的 1/k 特征编码需要维护可能的特征值及其到向量中下标的映射,而构建这种映射的每个过程都需要遍历数据集本身。这不适用于几千万甚至更多维度的特征处理。
特征哈希通过哈希方程给特征分配向量下标,所以在不同的情况下,相同的特征可以得到相同的向量下标,所以不需要维护一个特征值的向量和下表。
要使用特征散列处理文本,您需要实例化一个 HashingTF 对象以将单词转换为词频。为了高效计算,本文将缓存词频,稍后会重复使用。
清单 7. 训练词频矩阵
默认情况下,实例化的 HashingTF 特征维度 numFeatures 采用 220 次方维度。在spark源码中可以看到,HashingTF的过程就是对每个单词进行一次hash,取特征维度的余数。单词的位置,然后计算单词出现的次数。因此,不需要像传统方法那样每次都维护一个词汇表,使用HashingTF可以很容易地得到该词对应的向量元素的位置。当然,这样做的代价是向量的维数会很大。好在spark可以支持稀疏向量,所以计算开销并不大。
图 3. HashingTF 源代码
词频是一种提取特征的方法,但它仍然存在很多问题。比如这句话“这几天天气真好,项目组老师打算组织大家去春游”。与“project”相比,“group”更容易出现在人们的语言中,而“of”和“project group”也只出现一次,但project group对于这句话来说更重要。
本文采用TF-IDF作为特征提取方法,其权重与特征项在文档中的评价率正相关,与该特征项出现在整个语料库中的文档负相关。下面是根据tf计算逆词频idf,计算TF-IDF
清单 8. 计算 TF-IDF 矩阵
至此,本文已经提取了文本的特征,并用向量表示了文本。
训练分类模型
在本小节中,本文将介绍如何使用 Spark 训练朴素贝叶斯分类模型。这个过程的输入是文本的特征向量和标记的分类标签。本文在这里得到的是分类模型和文本分类的正确率。
现在有了文本的特征项和特征值,以及分类标签,就需要使用RDD的zip算子将两部分数据连接起来,转换成分类模型中的LabeledPoint类型。并将数据随机分为训练集和测试集,60%作为训练集,40%作为测试集。
清单 9. 生成训练集和测试集
本文使用训练数据训练贝叶斯模型,得到NBmodel模型来预测测试集的文本特征向量,并计算每个模型的正确率。该模型的正确率为74.83%。
清单 10. 训练贝叶斯分类模型
可以看出,贝叶斯模型的最终预测模型并不高,但是基于本文采集有限的数据资源,特征提取过程还是比较简单直接的。因此,还有很大的优化空间。在第 4 章中,本文将介绍提高准确性的方法。
分类未标记的文档
本文训练的模型现在可用于对未标记的文本进行分类。过程是获取用户输入的评论,然后对输入的评论文本进行token化,转换成tf-idf特征向量,然后使用3.4节训练的分类模型。分类。
清单 11. 分类未分类的文本
当节目进入评论被归类:“这部电影很无聊,剧情老套,很无聊,看了很后悔”
程序输出是“NaiveBayes 模型预测:0.0”。
节目进入评论归类:“精彩,讲了一个梦的故事,剧情反转,制作非常好。”
程序输出是“NaiveBayes 模型预测:1.0”。
至此,最简单的文本情感分类系统就完成了。
提高准确性的方法
第三章介绍了构建文本分类系统的方法,但正确率只有74.83%。在本章中,本文将描述文本分类正确率低的原因以及如何改进它。
文本分类准确率低的主要原因是:
本文分别从以下四个方面进行处理,并对模型进行了优化。
从数据预处理中删除停用词
停用词是指在所有文档中出现多次的常用词,例如“的”、“的”、“是”等。这些噪声可以在提取特征时去除。
首先,你需要统计词频,看看哪些词被使用最多,然后定义一个停用词列表,在构造向量之前去除这些词。本文首先进行词频统计,看看哪些词最常用。
清单 12. 计算词频
通过观察,选择出现频率较高但对文本情感表达没有意义的词作为停用词,并建立停用词列表。然后定义一个过滤函数,如果该词在停用词列表中,则该词需要被过滤掉。
清单 13. 删除停用词
尝试不同的分词模式
本文在分词时使用的搜索引擎分词模式,在这种模式下只提取重要的关键词,可能会忽略一些可能的特征词。可以将分词模式切换为全分词模式,尽量不要漏掉特征词。同样的模型训练会提高1%到2%的准确率。
清单 14. 全分词模式分词
改变训练模型方法
在没有深度优化的情况下,SVM 往往比其他分类模型具有更好的分类性能。相同条件下,使用SVM模型进行训练,最终准确率为78.59%。
清单 15. 使用支持向量机训练分类模型
训练数据的问题
本文只是为了演示如何搭建这个系统,所以爬取的数据量并不多,获取的文本数据也没有人工检查正确性。如果这篇文章能有更丰富和权威的数据源,模型的准确率会大大提高。
作者对中国科学院大学谭松波教授发表的酒店产品评论文本进行了分类系统测试。该数据集被大多数学者认可和使用。用 SVM 训练的模型正确率为 87.59%。
总结
本文详细介绍了使用Spark构建文本情感分类系统的过程。从数据清洗和转换来看,Spark 的 RDD 有 Filter 和 Map 方法,可以轻松胜任;对于文本特征的提取,Spark对*敏*感*词*数据的处理不仅在计算模型和算法优化上都有优化。采用哈希特征算法实现TF-IDF,可支持千万维度的模型训练;对于分类模型的选择,Spark也实现了常用的分类模型。, 打电话很方便。最后希望这篇文章可以对大家学习spark和文本分类有所帮助。
参考
一、IBM认知业务新时代简介
2.jieba分词的项目主页
3. TF-IDF算法介绍
%E2%80%93idf&cm_mc_uid=555979257447&cm_mc_sid_50200000=1465287280
4. Spark项目官网
5. MapReduce算法介绍
6.Hadoop项目主页
7. Jupyter Notebook 项目主页
在 developerWorks 认知计算专区 () 了解有关认知计算、访问技术文档、操作方法 文章、培训、下载、产品信息和其他资源的更多信息。
在 developerWorks() 大数据和分析部分了解有关大数据的更多信息、获取技术文档、操作方法 文章、培训、下载、产品信息和其他资源。
文 | 姜婉,北京邮电大学*敏*感*词*,北京邮电大学迎春,软件服务团队架构师,IBM原创链接:
总结:使用帮站SEO刷点击工具快速提升关键词排名的方法
提升关键词关键词在百度搜索引擎中的排名,在站长圈已经不是什么秘密了。许多新网站使用点击工具来快速获得排名。在SEO站长中,相信每个人都有自己喜欢的排名软件,峰峰就是用SEO工具帮站的。
帮助站SEO排名工具介绍
帮站的主要目的是帮助站长做好网站,解决网站的优化问题,通过平台快速提升网站的权重,提高关键词排名,提升百度指数,为站长免费提供安全、快速、稳定的工具平台。
帮站SEO刷关键词排名方法
需要积分来帮助网站刷新排名。免费赚取积分相对较慢。小康的朋友可以充值换积分。操作也比较简单,直接登录帮助网站后台,创建百度任务,做基础设置:关键词、域名、自然排名、点击深度、任务总数等.、打开任务自动刷新百度关键词排名。
使用SEO工具的注意事项
1、百度排名任务用于提升网站百度关键词的排名,请添加百度排名前50的关键词!为提高手机排名,请使用手机百度功能。
2.任务总数代表该任务总共可以完成多少次,每天的次数代表每天可以完成的任务数量。
3、每日推荐次数为关键词索引的十分之一左右,具体数量可根据排名适当增减。
4、百度排名功能需要长时间使用才能生效。如果只是偶尔使用,效果很小。
排名工具确实好用,但不是所有词都能用。从上面的注释可以看出,排名还有一些硬指标关键词:关键词排名至少应该在百度页面前5,进入前5页也证明了你的话被百度认可了,剩下的就是百度搜索引擎通过用户点击反馈用户体验来判断页面的价值,并给出排名,所以网站还需要做基础优化。
关于网站滑动点击有惩罚吗?
如果过去有人问过这个问题,我认为十个网站管理员中有九个会回答不可能的问题。如果您滑动点击,您将受到搜索引擎的惩罚。许多竞争对手会故意使用刷卡工具来攻击他们的竞争对手。网站,让他们关键词排名下降确实有意义。但现在不同了。百度搜索资源平台正式上线“雷霆算法”,旨在打击点击作弊行为。
根据百度站长平台官方公布的消息,迅雷算法将于11月底上线,但风峰觉得迅雷算法现在已经开始行动了。因为峰峰目前在做站群SEO,目前管理着近40个网站,其中大部分是单页网站,也有一部分被拿出来刷新排名。这两天同事发现网站首页的第一位置有一个关键词排名。不知道是巧合还是什么。滑动和点击的方法可能会暂时停止。
结论:帮助网站SEO刷点击软件对网站关键词的排名还是有帮助的,但是在目前的形式下,百度SEO的站长们还是比较谨慎的,在风头下切不可被大量使用。因为百度对网站排名的攻击力度未知,测试前一段时间相关数据会流出。
但是,从搜索引擎的角度来看,峰峰支持打击黑帽SEO行为。对广大网友来说,净化搜索引擎也是一个好消息。我们暂时拭目以待。,SEO优化可以走的路越来越少,站长的痛苦只有他们自己最清楚。最后,祝广大站长越走越远!