spark 类别特征_怎样用Spark机器学习使“小情绪”可视化?

社交媒体、电子邮件、支持票据、聊天、产品评论和推荐的文本挖掘和分析已成为几乎所有行业研究数据模式的宝贵资源,以帮助企业了解客户,预测和增强客户体验,量身定制营销方案。

情绪分析使用机器学习算法来判断文本内容的好坏。情绪分析的例子用例包括:

  • 迅速理解客户评论的语气

了解客户对产品或服务的喜好

了解可能影响新客户购买决定的因素

提高企业的市场意识

尽早处理问题

  • 了解股票市场情绪,以预测金融信号
  • 决定人们如何看待客户支持
  • 社交媒体监测
  • 人气品牌/产品/公司/声誉感知监测
  • 不满意的客户检测、监视和警报
  • 营销活动监控/分析
  • 客户服务意见监控/分析
  • 品牌情感态度分析
  • 客户反馈分析
  • 竞争分析
  • 品牌影响力的监控

人工分析客户或潜在客户生成的大量文本非常耗时,机器学习会让效率更高。

本篇讨论将流数据与机器学习和快速存储相结合的数据管道的体系结构。在第一部分中,我们将探索使用Spark机器学习数据管道进行情感分析。我们将使用一个Amazon产品评论数据集,并构建一个机器学习模型来将评论分为正面和负面。

b2ff173c9f6d4265c62feb7fc4b64863.png

在这篇文章中,我们将讨论以下内容:

  • 分类和情感分析概念概述
  • 从文本文档构建特征向量
  • 训练机器学习模型,使用逻辑回归对正面和负面评论进行分类
  • 评估和保存机器学习模型

分类

分类是受监督的机器学习算法,其基于标记数据(诸如电子邮件主题和消息文本)来识别项目属于哪个类别(例如电子邮件是否是垃圾邮件)。 用于分类的一些常见用例包括信用卡欺诈检测,电子邮件垃圾邮件检测和情绪分析。

471c90b5b3a1aab3cf09e464204eecad.png

分类采用具有已知标签和预定特征的一组数据,并基于该信息学习如何标记新记录。可用于进行预测的属性。要构建分类器模型,您需要使用最有助于分类的功能。

9640edf8cf5b949e26558b51be7b90a7.png

让我们通过一个案例来分析正面或负面的文本分类。

  • 我们想要预测什么?

在此示例中,客户评论评级用于将评论标记为肯定评论。 4-5星的评论被认为是积极的评论,1-2星的评论被认为是负面评论。

  • 您可以使用哪些属性进行预测?

审核文本单词用作发现正面或负面相似性的功能,以便将客户文本情绪分类为正面或负面。

机器学习工作流程

1、使用机器学习是一个迭代过程,涉及:

  • 数据发现和模型创建
  • 分析历史数据
  • 根据格式、大小或结构确定传统分析或数据库没有使用的新数据源
  • 跨多个数据源收集,关联和分析数据
  • 了解并应用正确类型的机器学习算法以从数据中获取价值
  • 训练、测试和评估机器学习算法的结果以构建模型

2、在生产中使用模型进行预测

3、数据发掘和使用新数据更新模型

2627b4ddf7739c6227f78ddab9d5822f.png

特征提取

特征提取是数据中有趣的属性,可以用来进行预测。是将原始数据转换为机器学习算法的输入的过程。为了在Spark机器学习算法中得到应用,必须将特征放入特征向量中,特征向量是表示每个特征值的数字向量。要构建分类器模型,您需要提取和测试以找到对分类最有贡献的感兴趣的特性。

f6b8ab0d6854e41ee7b52ac99086d33a.png

Apache Spark用于文本特征提取

SparkMLlib中的TF-IDF(Term Frequency- reverse Document Frequency)特征提取器可用于将文本词转换为特征向量。与文档集合相比,TF-IDF计算单个文档中最重要的单词。对于文档集合中的每个单词,它计算:

  • 词频(TF),是一个单词在特定文档中出现的次数文档频率
  • 文档频率(DF),即一个单词在文档集合中出现的次数
  • Term Frequency- reverse Document Frequency (TF-IDF),衡量文档中某个单词的重要性(该单词在该文档中出现频率很高,但在文档集合中很少见)

例如,如果您有关于自行车配件的评论集合,那么评论中的“returned”一词对于该文档而言比“bike”这个词更重要。 在下面的简单示例中,有一个正面文本文档和一个负面文本文档,其中包含令牌“'love”,“bike”和“returned”(在过滤后删除无关紧要的单词,如“this”和“I”)。 显示了TF、DF和TF-IDF计算。 单词'bike'的TF为1:2文档(每个文档中的字数),文档频率为2(文档集中的字数),TF-IDF为½(TF除以DF)。

f85e48d43e9e688350cc99ee6ecf7906.png

逻辑回归

逻辑回归是预测二元响应的常用方法。这是广义线性模型的一个特例,它可以预测结果的概率。逻辑回归通过使用逻辑函数估计概率来测量Y“标签”和X“特征”之间的关系。该模型用于预测标签类。

8ee55d43bd1ae7a802f655c453d2f404.png

在我们的文本分类案例中,给定TF-IDF值的标签和特征向量,逻辑回归试图预测文本为正或负的概率。逻辑回归通过将每个TF-IDF特征乘以权重并将总和通过sigmoid函数来找到文本集合中每个单词的最佳拟合权重,该函数将输入x转换为输出y,即0到1之间的数字。换句话说,逻辑回归可以理解为找到最适合的参数:

a69b1c9570877b6c01ccf15fd8f949d1.png
d8a831977cffd61d541745e53a6e00f6.png

逻辑回归具有以下优点:

  • 可以处理散落数据
  • 快速训练
  • 权重可以解释

正权重将对应于积极的词

负权重将对应于否定的词

数据分析和特征提取

我们将使用亚马逊体育和户外产品评论数据的数据集,您可以在此处下载:http://jmcauley.ucsd.edu/data/amazon/。 数据集具有以下模式,我们将使用部分字段进行情绪分析:

reviewerID - 评论者的ID,例如,A2SUAM1J3GNN3B

asin - 产品的ID,例如,0000013714

reviewerName - 评论者的名称

有用性-评论的有用性评级,例如2/3

reviewText - 评论文本

overall - 产品评级

summary -审查摘要

unixReviewTime - 审查时间(Unix时间)

reviewTime - 审查时间(原始)

数据集具有以下JSON格式:

cae686b6aa7c38da75f4b31fcba0ada0.png

在这种情况下,我们将使用逻辑回归来预测正面或反面的标签,基于以下内容:

标签:

总体而言 - 产品评级4-5 = 1正面

总体而言 - 产品评级1-2 = 0否定

特征:

审查文本+评论摘要→TF-IDF特征

使用Spark ML包

Spark ML提供了一套基于数据框的统一高级API,旨在使机器学习变得简单易用。在数据框上构建ML API可以提供分区数据处理的可扩展性,并且易于使用SQL进行数据操作。

f6e6d5cce3bc1dee90d40ae19c9801c0.png

我们将使用ML 管道通过转换器传递数据以提取特征和估计器来生成模型。

转换器:转换器是一种将一个数据框转换为另一个数据框的算法。 我们将使用转换器来获取具有特征向量列的数据。

估算器:估算器是一种算法,可以适合数据框生成变压器。我们将使用估算器来训练模型,该模型可以转换输入数据以获得预测。

管道:管道将多个转换器和估算器链接在一起以指定ML工作流程。

将文件中的数据加载到数据框中

第一步是将数据加载到数据框中。 下面,我们指定数据源格式和加载到数据框的路径。 接下来,我们使用withColumn方法添加一个将审阅摘要与审阅文本相结合的列,然后删除不需要的列。

1fa3fc31d82286abd698da656c21c4b1.png

数据框架构显示模式:

64dbaa171b1b29fbd0b96df9e9be5005.png

该方法显示前20行或指定的行数:

7d47942a8ac2054196484970ea163333.png

摘要统计

Spark 数据框包含一些用于统计处理的内置函数。 describe()函数对所有数字列执行汇总统计和计算,并将它们作为数据框反馈。 下面,我们来分析产品评级整体:

5c81f1ff0adf954a6311da24bd2e9575.png

在下面的代码中,我们过滤中性评级(= 3),然后使用Spark Bucketizer将标签0/1列添加到数据集中为正面(总评级> = 4)而不是正数(总评级<4) )评论。然后,对显示结果进行总计数。通过标签列对数据进行分组并计算每个组中的实例数量表明,正样本的数量大约是非正样本的13倍。

093937d4d5d134df650884d8d945fc59.png

分层抽样

为了确保我们的模式对负样本敏感,我们可以使用分层抽样得出两个样品类型。数据框sampleBy()函数在提供要反馈的每个样本类型的分数时执行此操作。在这里,保留所有负面实例,但将负面实例采样10%,然后显示结果。

eedcdbd102df537ed6e47770bacca671.png

下面,数据被分成训练数据集和测试数据集:80%的数据用于训练模型,20%用于测试。

90ec5b027a773603738bb7bb738a843a.png

特征提取与管道

ML包需要将标签和特征向量作为列添加到输入数据框中。为了提取特征和标签,我们设置了一个管道将数据通过转换器传递。

正则表达式测试器接受一个输入文本列,并反馈一个数据框,其中包含一个附加的文本列,通过使用提供的正则模式将其拆分为一个单词数组。关键词过滤器过滤掉应该被排除的单词,因为这些单词经常出现但没有太多的含义。例如,“I”、“is”、“The”。

在下面的代码中,正则表达式测试器会将带有审查和摘要文本的列分割为一个包含单词数组的列,然后关键词过滤器会过滤该列:

9c10660f8700e33852a21ac7ab21afac.png

正则表达式测试器和关键词过滤器的结果示例如下:

8c873b02d3a1d613f3d3c11251351f53.png
4e4a5fea078228350e8d321fdc3283b0.png

计数向量程序用于将前一步骤中的单词标记数组转换为单词标记计数向量,执行TF-IDF特征提取的TF部分。

59e57f4b272075134f334279f5190b12.png

计数向量程序的结果示例,作为输入列检查命令并添加向量化单词计数的cvcolumn,如下所示。 在cv列中:56004是TF词汇词汇的大小; 第二个数组是词语词汇中词语的位置,该词汇词汇按语料库中的术语频率排序; 第三个数组是检查命令文本中单词(TF)的计数。

097dc1d4bd54de6a04c4cb6098f1e66e.png

下面的cv列,由计数向量程序(TF-IDF特征提取的TF一部分)创建,用于IDF输入。 IDF采用从计数向量和向下权重特征创建的特征向量,这些特征向量经常出现在文本集合中(TF-IDF特征提取的IDF部分)。 输出要素列是TF-IDF要素向量,逻辑回归函数将使用该向量。

de6d650e81f01c4252dd5b46a1f39758.png

以下示出了IDF的结果的示例,其作为输入列cv并且添加了矢量化TF-IDF的特征列。 在cv列中,56004是单词词汇的大小; 第二个数组是词语词汇中词语的位置,该词汇、按语料库中的术语频率排序; 第三个数组是检查命令文本中单词的TF-IDF。

a52c9349bc5a1b015c7029a38df2deaa.png

最后一个元素是估算器,一个逻辑回归分类器,它将训练标签和特征向量并返回(转换器)模型。

de29c2696e868eefeb5b8dc7d02c86de.png

下面,我们将测试器、计数向量程序、IDF和逻辑回归分类器放在管道中。 管道将多个变换器和估算器连接在一起,以指定用于训练和使用模型的ML工作流程。

3bb54ab715ad0d533c4325b832661fd1.png
bec747b797928ad1ab2b4b845aa64306.png

 训练模型

69c895f5c46d4ca2110f74bf27319cd3.png

接下来,我们用弹性网络正则化训练逻辑回归模型。通过在输入特性和与这些特性关联的标记输出之间建立关联来训练模型。用pipeline.fit方法返回一个拟合的管道模型。

53c1f8f237d7a2d79625d3136aec2d4a.png
ccc18faa6ae05af5dee301ddce01f134.png

注意:训练模型的另一个选项是使用网格搜索调优参数,并选择最佳模型,使用带有Spark交叉验证器和帕拉姆网格生成器的k-fold交叉验证,您可以在附带的MapR电子书《从Spark 2.x开始》中了解更多。

其次,我们可以从拟合的管道模型中得到计数向量和逻辑回归模型,以便打印出文本词汇表中单词的系数权重(单词特征重要性)。

1fb6a3ca04dda0741e2d0a9c0cd4b54c.png

回想一下,逻辑回归生成一个公式的系数权重,该公式用于预测特征x(在本例中是一个单词)出现的概率,以最大化结果Y、1或0的概率(在本例中是正面或负面的文本情绪)。权重可以解释为:

正权重将对应于正面单词

负权重对应于负面单词

下面,我们按降序排列权重,以显示最积极的单词。结果显示,“great”、“perfect”、“easy”、“works”和“excellent”是最重要的积极词汇。

e00f0656368c96b71db5007c9b839e0b.png

下面,我们按升序排列权重,以显示最负面的单词。结果显示,“return”、“poor”、“waste”和“useless”是最重要的负面词汇。

fb70f008f25c9febd845d7c9e5155fa1.png

预测和模型评估

可以使用尚未用于任何训练的测试数据集来确定模型的性能。我们将使用管道模型转换测试,管道模型将根据管道步骤传递测试数据,通过特征提取阶段,使用逻辑回归模型进行估计,然后将标签预测返回到新的列中。

dacb471db70ac3457ff2d2c5aa96b2ee.png
529403f20f0ecd0e4bb66c2ea0e99cfc.png

二进制分类评估器提供了一个度量标准来度量一个拟合模型对测试数据的处理效果。这个评估的默认指标是ROC曲线下的面积。该区域测量测试正确区分真阳性和假阳性的能力。随机预测值是5。值越接近1,它的预测就越好。

a086f8d3174b9d93140cddbef9171b40.png

下面,我们将预测数据框(具有原始预测列和标签列)传递给二进制分类评估器,后者输出内容为ROC曲线下的区域。

6d34eb9a161e774072e85cdfd01f1a51.png

下面,我们计算更多的指标。正面和负面预测的数据也很有用:

真正的积极因素是模型正确预测积极情绪的频率。

误报是模型错误地预测积极情绪的频率。

真实的否定表明模型正确预测负面情绪的频率。

错误的否定表示模型错误地预测负面情绪的频率。

111b719ceb30aed1dba88c576138a224.png
0e351be25d961bae35ea6e5ea44b614f.png

下面,我们打印出摘要并查看数据,其中负面情绪的概率最高:

d6bc5148873e736341b27a451768d706.png

下面,我们打印出摘要并审核具有正面情绪概率最高的评论数据:

8d3fd8457c2806e6f10b1c62b0976a0a.png

保存模型

我们现在可以将适合的管道模型保存到分布式文件存储中,以便以后在生产中使用。 这样可以在管道中保存特征提取阶段和逻辑回归模型。

b8396605b971fc313aa9284d12d52999.png

保存管道模型的结果是用于元数据的JSON文件和用于模型数据的Parquet文件。 我们可以使用load命令重新加载模型; 原始和重新加载的模型是相同的:

e1fc038415032a258d7c31fd92d88c9e.png

总结

有很多很棒的工具来构建分类模型。 Apache Spark提供了一个出色的框架,用于构建可以从大量分布式数据集中提取价值的业务问题的解决方案。

机器学习算法无法完美地回答所有问题。 但是,它们确实为人类在解释结果时提供了证据,假设首先要问正确的问题。

代码

使用Apache Spark训练模型并做出自己的结论的所有数据和代码都位于GitHub中, 有关运行代码的更多信息,请参阅GitHub“README”。GitHub - caroljmcdonald/mapr-sparkml-sentiment-classification

Zeppelin浏览器:

https//www.zepl.com/viewer/github/caroljmcdonald/mapr-sparkml-sentiment- classification/blob/master/notebooks/TextClassificationSentimentAnalysis.json

b13339585a8ae70f660c67c35507cfc1.png

张晓艺编译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值