乐于分享
好东西不私藏

AI笔记7-机器学习项目实战-外卖点评情感预测

AI笔记7-机器学习项目实战-外卖点评情感预测

大家好,我是AI小白,上节课我们学到了PCA降维、SVD分解、聚类算法和集成学习,今天我们继续学习机器学习项目实战外卖点评情感预,下面是我的学习过程,欢迎大家一起讨论、学习。
大纲主题
  • 项目的目的
  • 数据集的介绍
  • 实战预测的步骤
  • 内容小结
一、项目的目的
对外卖评论数据集,通过机器学习的算法后,针对新的评论内容进行情感预测,这个评论是积极的还是消极的,是正面的还是负面的,对商家是好评还是差评的预测。
二、数据集的介绍
  • 下载地址:

http://idatascience.cn/dataset-detail?table_id=429

  • 字段介绍
字段英文名称
字段类型
字段说明
label
整形
情感标签:1为正面,0为负面
review
字符型
评论内容
  • 数据样例-下载的csv文件:
三、实战预测的步骤
  • 第一步:解决输入/输出
通过分析,本次项目我们要解决的问题:给定一段中文评论,判断其是正面评论还是负面评论,积极的还是消极的,是正面的还是负面的,对商家是好评还是差评

该问题是一个典型的分类问题,分析相关输入/输出如下:

输入:一段中文评论
输出:1为正面,0为负面
  • 第二步:构建数据集

通过分析上述的数据集,可以看到该数据集基本满足上述特点,但是仍然存在一个比较大的问题:数据集是汉字,机器无法处理(因为机器学习底层是对数字的处理),所以我们首先需要对数据数字化(也叫汉字向量化)。

汉字向量化:

在机器学习中,汉字向量化是将汉字表示为计算机可识别的数值形式的过程。常用的方法有:

1.One-Hot 编码:

这是传统机器学习中常用的一种向量化方法。在这种方法中,每个汉字被表示为一个固定长度的向量,向量的大小等于字典的大小,每个条目对应于预定义单词字典中的一个单词,其中只有一个位置是1,其余为0。

2.词袋模型:

在词袋模型中,文本中的每个汉字被看作是独立的,没有关联性,然后根据字典统计单词出现的频数。这种方法虽然简单,但在文本向量化中具有一定的实用性。

以词袋模型为例:

如果将文本”方便,快捷,味道可口,快递给力”以字为单位进行切分,并使用词袋模型进行向量化,向量化过程如下:   

构建字汇表:首先,将文本中的所有不重复的字作为字汇表。在这个例子中,字汇表为[“方”, “便”, “,”, “快”, “捷”, “味”, “道”, “可”, “口”, “快”, “递”, “给”, “力”]。   

向量化过程:对于每个文本,统计字汇表中每个字在文本中出现的次数,形成一个向量表示。   

在这个例子中,”方便,快捷,味道可口,快递给力”的向量表示如下:

“方”出现1次 

“便”出现1次 

“,”出现3次 

“快”出现2次 

“捷”出现1次 

“味”出现1次 

“道”出现1次 

“可”出现1次 

“口”出现1次 

“递”出现1次 

“给”出现1次 

“力”出现1次 

因此,根据字汇表的顺序,该文本的词袋模型向量化结果为: 1,1,3,2,1,1,1,1,1,1,1,1

代码设计思路:

1、读取csv文件并且将标签和特征数据切分出来。

2、如何将汉字转换为数字编码这个问题。

3、通过与GPT沟通词袋模型,我们了解到需要构建一个词汇表,然后根据词汇表数个数,所以这个问题可以分解为两个子问题:如何将数据集汉字建立成字典?和如何根据字典数文字出现的个数?

4、如何将数据集汉字建立成字典?可以使用一个双层循环,逐行逐字遍历数据集,然后把字加入到一个set变量中。(因为set数据类型有滤重功能)。

5、对于如何根据字典数文字出现的个数?需要下面几个小步骤:

–生成一个长度为字典长度,内容都为0的bow_vector。

–将原始的文本数据,以字的维度转成二维数组vector。
–根据上面②生成的vector,继续使用双层循环遍历,在字典vocab中找当前遍历的字地索引值
–根据索引值,在bow_vector同样的位置进行计数+1
代码实现如下:
第一步:读CSV文件
输出:
第二步:切分标签和数据
输出:
第三步:生成词汇表
输出:
第四步:向量化数据
输出:
第五步:生成一个长度为字典长度,内容都为0的bow_vector;遍历vector,在vocab字典中找到当前遍历字符的index,然后在bow_vector的同样index位置进行+1计数
输出:
以上就是一个简单的预处理的过程:
1、我们需要对上面的过程封装为一个function,然后将示例代码中的data替换为从文件读取切分出来的n_data,详细过程不再赘述。

2、最终生成的向量化数据,可以保存在内存中,在下面的运行模型中直接使用;也可以将向量化数据保存到本地文件,然后在模型方法中读取后使用。我使用的方法是保存到本地后,在下面的decision_tree来读取使用。处理后的数据保存在vectorized_data.csv文件,其内容如下:

label为标签
x0~xn为特征数据
  • 第三步:实验算法
我们通过决策树来验证数据集,代码如下:
  • 第四步:工程优化

通过上述验证数据集已经可以使用,整体流程已经没有问题。接下来我们对代码进行重构:

1、将整体代码使用面向对象封装为类实现

2、在汉字向量化处理中使用jieba的分词方式

3、在模型预测部分加入KNN、贝叶斯、线性回归、随机森林、SVC向量机的方式

由于重构的代码内容较多,本篇文章不再赘述,详情请见Github仓库

  • 第五步:遴选算法

通过运行上述工程优化后的代码,执行结果如下:

通过对比准确率,线性回归、SVC、随机森林的准确率较高。
通过分析日志中的执行时间,SVC在使用jieba分词时的训练时间大概有9分钟,训练速度比较慢。
因此,综合下来线性回归和随机森林是较为合适的机器学习模型。
四、内容小结
1.数据是汉字,机器是无法处理的,其底层都是处理数字,我们需要将汉字向量化为数字。
2.汉字的向量化方法一般来说有OneHot编码和词袋模型。
以上就是我用“外卖点评情感预测”这个实战项目,主要讲解了情感预测的五个执行步骤,在项目实战的过程也遇到一些坑,下节课我们继续来进行项目实战,欢迎来围观、吐槽、一起填坑,点个关注,下期自习室见。