NLP实战之–螺蛳粉评论情感分析和建模分类

写在前面:

本文首发于我的微信公众号。新文章首发都会在微信公众号上。

自然语言处理(Natural Language Processing)是目前人工智能的大方向之一。上一篇文章提到的两大方向,计算机视觉(CV)和自然语言处理(NLP)。啥是自然语言?人们日常使用的语言就是自然语言呐,比如汉语,英语。那为啥要对自然语言做处理呢?当然是为了让计算机“智能化”啦。计算机可不认得什么英语、汉语的,你对着计算机喊一声,它肯定不理你。所以才要把自然语言处理成计算机认得的语言。

那什么样的语言,计算机才认得?答:二进制。因为计算机只能读取并且储存0和1。所以,自然语言处理(NLP),就是把咱们人类的语言(例如汉语、英语),处理成为计算机认得的语言。处理完之后能做啥?这就涉及到NLP的应用了,这个应用范围是在是太广范了。有文本分类、机器翻译、情感分析、问答系统、对话系统、知识图谱等等。

硬核实战:

为啥选择螺蛳粉评论做分析?因为最近的一个多月螺蛳粉吃得有点上头,每天都要吃一顿,不吃不舒服。干脆,索性整点好玩的,做一下这个螺蛳粉评论。

还记得,上一篇文章的机器学习流程,跟西红柿炒番茄,啊不,是西红柿炒鸡蛋流程一样的。

机器学习: 数据采集—>数据清洗—>特征工程—>数据建模。

西红柿炒鸡蛋:采集西红柿和鸡蛋—>清洗—>切西红柿、将蛋搅拌—>开炒

第一步,采集数据。

采集数据,最简单粗暴的办法,上百度找,去一些竞赛网搜,比如kaggle、和鲸社区、阿里天池。果不其然,真的有。

点进去,一看,竟然才只有两千条数据。这也太少了吧…

那我再重新去淘宝复制一些(手动复制是不可能的,当然得用爬虫啊)。干脆选一样的店铺把,我就进去李子柒淘宝店铺里面找了个螺蛳粉的,往下拉,直接看到了总评数:200万条评论。这么多,我只要一万就肯定够用了!

很快,我终于知道为什么别人的那个数据集只有两千条了。因为淘宝只能展示最近的两千条评论。也就是说,你最多只能复制最新的2千条。

好吧,新爬下来的两千加上下载的两千,总共4千条,勉强能用吧。

第二步,数据清洗。

清洗数据,没啥操作,就是删除一些重复的、缺失的评论。删完了之后大概还有3960条。

第三步,情感分析

这里跟上边提到的机器学习步骤不太一样。不过没关系,问题不大。

情感分析简单理解就是在文中找到具有各种感情色彩属性的词,统计每个属性的词的个数,哪个类多,这段话就属于哪个属性。这个情感分析部分主要是从以下七个角度对评论进行分析:品牌、物流、包装、产品原料、食用口感、保质期、性价比。具体思路就是,用一个新表格,对情感正负面打分并且把得分存进来。从上述几个角度分析,每个角度都建一个情感词库,遍历每个词库,找到评论中含有该词就进行打分。

1.创建情感词库

词库是啥?词库可以简单理解为一个个“词”的表格。表格里面存的是一些带有情感色彩的词,例如正面情感的属性词“好吃”,负面情感的属性词“太臭”。

2.创建角度词库

为什么要用角度的词库?因为淘宝的评论是有类别的,比如说,评论里面提到了“快递”这个词,就把它分为物流那一类。里面的评论,大致可以分为以下的几个角度。

3.遍历词库,找出相应的词进行打分。

先从角度词库,找到属于这个角度的评论,再从情感词库里面,把正负面情感词的次数统计出来。最后进行汇总。统计出来的大概就是这样。

4.数据可视化

数据都在一个表格,不直观,那就把数据,处理一下,做个可视化的图形。

然后做成了下边这个样子。

显然,比表格好看多了。这先大概放两张图吧

5.情感分析结论

把结论写出来,基本上就做完了情感分析了。

这里数据通过的分析得出,螺蛳粉,真的好吃!而且好评占大部分。当然消费者最关心的就是口感和原料,最为看重。

第四步,数据打标签

先对上面打分表的数据打上标签。标签,1代表好评,0代表差评。有了标签,计算机才能更精准的认识哪些是好评和差评。那么问题是,怎么打标签?怎么判断好评差评?上面的打分表格里面的角度有物流、包装、产品原料、食用口感、保质期、性价比。刚好6个方面,当每一条评论的正面情感总得分比负面情感总得分大,那就是正面>负面,也就好评。反之则为差评。因为初始的数据集,没有标签,所以得要自己打上标签。

第五步,样本均衡

什么是样本均衡?为什么要进行样本均衡?

首先我们看一下这个有标签的数据,就是已经分好了好评和差的数据。

图中的标签1是好评,0是差评。这比例,极其不均衡。先是找数据的时候,数据集不够,自己又爬了2千条,然后数据标签还要打,现在发现了,样本比例又不均衡,还得做样本均衡处理。此刻心情复杂。

不做样本均衡的结果会咋样呢?后边再做解释。可以想象一下,假如你是人工验钞员,每天都是100元的真钞,大概一天几千张,假钞特别少,大概一天遇到几张,然后做了10天,第十一天的时候,突然加进来一半的假钞,这个时候你会按照往常的思维,认为假钞也是很少,这个时候你分的真钞里面就会多了那些你自以为是真钞的假钞。(当然,现实中做这种事可不能马虎)这不就出大错乱了吗?

样本均衡的操作,过采样和欠采样。这里的欠采样是指减少正例的数量,使得数据平衡,再进一步分类。而过采样是指增加反例的数目平衡数据,再分类。

终于,做好了样本均衡,新的数据集分类两个。欠采样数据集总共2000条,过采样数据集总共3000条。

第六步,特征工程

对,这个步骤终于来咯。前面的打标签,样本均衡,是一些其他的意外情况的小步骤。一般的机器学习步骤里面,并不需要这些的。

特征工程,顾名思义,是对原始数据进行一系列工程处理,将其提炼为特征,作为输入,供算法和模型使用。实际上进行特征工程,目的就是将文本数据,变成0,1,让计算机能看懂。

1.切分数据集

在这之前,进行切分数据集。就是分好用来训练,和用来测试的数都有多少。我选择的是,75%做训练集和25%做测试集。训练集,那就是作为训练的,测试集,放进训练好的模型进行评测,看看模型的正确率咋样。严格上来说,切分数据集可以在特征工程之后进行,也就是建立模型之前。在这篇文章,我只讲述我的做法流程。

2.词向量转换

前面说过,计算机只能认0,1的数据。所以要将文本,转化为0,1的数据。这里采用TF-IDF方案。TF-IDF是对每个词进行处理得到的是一个概率向量。

3.特征筛选,降维

特征筛选,就是舍弃一些无用的特征。比如猫,特征有尾巴,爪子,毛色,还有猫年龄。然而,猫年龄对判断它是不是猫,对结果影响不大,一年是猫,十年也是猫。这个时候就可以把猫龄去掉。

降维,目的是减少计算量。特征维度太高,处理起来计算时间长,所以选择降维处理。在经过降维处理后,原来是3200个维度,降到了400维度。(降到1000维度太大,计算时间长,降到100维度,太小,可能误差大,影响结果)

第七步,建立模型

建模步骤,终于到了!采用逻辑回归和XGBoost模型。先分别建模,结果不好就进行模型融合(两种模型结合)。逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法。XGBoost(eXtreme Gradient Boosting)极致梯度提升,是基于GBDT的一种算法。GBDT,梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是一种基于boosting集成思想的加法模型。Boosting算法通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能。简答点理解,就是XGBoost是多个弱的分类器结合的,形成一个强的分类器。

1.训练模型

分别将两个数据集(过采样和欠采样的数据集)作为训练,搭建LR(逻辑回归)和XGBoost模型

2.模型评估

将测试集放入模型检测。结果如下,这种图,也称ROC曲线图。怎么看这个图?ROC曲线越靠拢(0,1)点,越偏离45度对角线越好。(曲线与x轴形成的面积越大,表示模型越好)

至于结果咋样,那必然是3000条数据的样本最好呀。

3.模型融合

模型融合,是比较常见的优化模型方法。因为单个模型的效果,也许不如几个模型融合之后的效果。这里采用XGBoost+LR策略。顾名思义,先将已有特征训练XGBoost模型,然后利用XGBoost模型学习到的树来构造新特征,最后将新的特征扔到LR模型进行训练。

具体融合过程如下:

图中x为输入特征,经过两棵树后走到叶子节点。图中左边的树有三个叶子节点,右边的树有两个叶子节点,因此对于输入x,假设其在左子树落在第一个节点,在右子树落在第二个节点,那么在左子树的one-hot编码为[1,0,0],在右子树的one-hot编码为[0,1],最终的特征为两个one-hot编码的组合[1,0,0,0,1]。最后将转化后的特征输入到线性分类器,即可训练的到一个基于组合特征的线性模型。补充一下,one-hot编码,也称独热编码,是一种将分类变量转换为数值向量格式的方法。每个类别在数值向量中都有自己的列或特征,并被转换为0和1的数值向量。

最终来看一下模型效果对比。

显而易见,模型融合的精确度是最高的(虽然在这提升不大,但是当你在十几万条数据上,提升1%的效果,那相当客观了)。精确度,就是正确的分类个数/总的样本数。

写在最后:

源码放GitHub,附上GitHub链接:https://github.com/zhuhui710/NLP-luosifen

实际上情感分析的难度并不大,难处在于数据的处理和情感词的提取。而模型搭建的效果并不是很好,也许是降维时候的维度数没选好,也可能是模型的参数,没能选到最优参数。特征工程,是决定算法模型上限,特征处理得好了,准确度就高一些。调参,是建模里面最费时的,因此机器学习和深度学习,也称为“炼丹”。(炼丹,参考太上老君炼丹,经过不断调整火候,最终成丹)。实际上这么几千条数据做分析并没有多大用处,这里就当学习了,毕竟我也是一边摸索一边学。

NLP实战之–螺蛳粉评论情感分析和建模分类相关推荐

  1. 【NLP】从整体视角了解情感分析、文本分类!

    作者:太子长琴,算法工程师,Datawhale成员 文本分类是自然语言处理(NLP)最基础核心的任务,或者换句话说,几乎所有NLP任务都是「分类」任务,或者涉及到「分类」概念.比如分词.词性标注.命名 ...

  2. 【自然语言处理NLP】中文语料整理【情感分析、文本分类、摘要、实体分析】

    中文NLP语料整理 新闻文本分类语料 情感分析语料 实体分析语料 垃圾分类语料 个人开发在做很多NLP相关任务的时候,语料的寻找十分头疼. 有很多公开的语料,被他人收费,或要积分下载等等. 对平时开发 ...

  3. 利用LSTM+CNN+glove词向量预训练模型进行微博评论情感分析(二分类)

    先上代码和数据集 https://pan.baidu.com/s/1tpEKb0nCun2oxlBXGlPvxA 提取码:cryy 里面所需要的,都在文件里, 数据是微博评论(共12万,没记错的话,0 ...

  4. python电影评论情感分析_NLP文本分类问题-电影评论的情感分析

    从头开始学习嵌入 import pandas as pd import numpy as np #读取csv文件 train = pd.read_csv('/kaggle/input/imdb-dat ...

  5. Python实现某站热门评论情感分析----NLP自然语言处理

    文章目录 前言 准备工作 总体思路 开始动手 Python 爬取热门视频评论信息 Baidu AI 分析所得评论的情感信息 Excel 自动写入所有评论情感信息 主函数(开始执行) 运行结果 Exce ...

  6. 【Python自然语言处理】使用逻辑回归(logistic)对电影评论情感分析实战(超详细 附源码)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一.舆情分析 舆情分析很多情况下涉及到用户的情感分析,或者亦称为观点挖掘,是指用自然语言处理技术.文本挖掘以及计算机语言学等方法来正确识别和提取文 ...

  7. MOOC网深度学习应用开发3——Deep Dream、电影评论情感分析

    Deep Dream:随机噪点图向目标图转换的过程 经典卷积神经网络 电影评论情感分析 自然语言处理基础知识1 自然语言处理基础知识2--分词 自然语言处理基础知识3--词的数字化表示方法和词嵌入 电 ...

  8. Pytorch+Text-CNN+Word2vec+电影评论情感分析实战

    文章目录 0.前言 1.电影评论数据集 2.数据读取 3.数据预处理 4.准备训练和测试集 5.加载词向量模型Word2vec 6.定义网络 7.训练网络 8.测试网络和可视化 9.总结 0.前言 很 ...

  9. 自然语言处理NLP-100例 | 第二篇:在线课程评论情感分析-本科毕设实战案例

    大家好,我是K同学啊~ 春去秋来,时间就这样嘀嗒嘀嗒的过去,不知道大家的毕设做得怎么样了呢 K同学就今天和大家分享一篇关于在线课程评论情感分析的实战案例,帮助大家找找灵感. 数据用的是一份公开的在线课 ...

最新文章

  1. 一名算法工程师,对流量和时代红利的思考
  2. JavaScript获取浏览器、元素、屏幕的宽高尺寸
  3. SNMP在windows linux router上的配置笔记
  4. linux中负载值为多少正常_linux 查看负载和使用情况 top
  5. Linux排障必备命令
  6. 再战FGM!Tensorflow2.0 自定义模型训练实现NLP中的FGM对抗训练 代码实现
  7. 【数据结构与算法】之深入解析“键盘行”的求解思路与算法示例
  8. ELK学习总结(1-1)ELK是什么
  9. Android ViewStub
  10. 鸿蒙卡片-物联网DTU污水液位计卡片
  11. 小程序中曾经遇到的坑(1)----canvas画布
  12. mysql8 :客户端连接caching-sha2-password问题
  13. 【路径规划】基于matlab A_star算法求解机器人栅格地图最短路径规划问题【含Matlab源码 1388期】
  14. TDengine 入坑
  15. 【bp靶场portswigger-服务端2】身份认证漏洞-16个实验(全)
  16. windows环境下安装python安装pygame安装
  17. Java计算器编程代码
  18. js数字转字符串和字符串转数字的方法
  19. 郑州轻工业大学软件学院计算机网络期末复习
  20. 数据库和HTML的使用

热门文章

  1. 若依 springboot 使用freemarker生成word文件,并导出下载
  2. 中国“芯”崛起 安防产业链格局是否将改变?
  3. java基于springboot的人民医院体检预约系统(java+springboot+vue+mysql)
  4. java阶乘和的算法_java_4种阶乘算法
  5. SAP中外协加工收货与反冲消耗数量不一致的产生原因分析和解决案例二
  6. 论文解读:PeSTo:用于精确预测蛋白质结合界面的无参数几何深度学习
  7. fingerGgesture
  8. bindService流程
  9. 如何使用CSDN中的Markdown写博客——纯小白篇
  10. 数据库分片教程mysql_MySQL数据库架构全系列新手入门教程