目录

  • 1、基于词典的方法
  • 2、基于词袋或 Word2Vec 的方法
    • 2.1 词袋模型
    • 2.2 Word2Vec
  • 3、案例:用户评论情绪分析
    • 3.1 数据读取
    • 3.2 语料库分词处理
    • 3.3 Word2Vec 处理
    • 3.4 训练情绪分类模型
    • 3.5 对评论数据进行情绪判断

目的:去判断一段文本、评论的情绪偏向
在这里,我们针对文本进行情绪分析时,只处理两种情绪状态:积极和消极。

针对文本情绪分析的方法有两种,一种基于词典,另一种基于机器学习方法。

1、基于词典的方法

概括来讲,首先有一个人工标注好的词典。词典中的每一个词都对应着消极或积极的标签。

这个词典可能有上万条或者几十万条,当然是越多越好。
情绪分析流程:
1,收到评论:”这门课程很好啊!“
2,分词:”[‘这门’, ‘课程’, ‘很’, ‘好’, ‘啊’, ‘!’]“
3,拿分好的词依次去匹配词典。匹配的方法很简单:

  • 如果词典中存在该词且为积极标签,那么我们记 +1+1;
  • 如果词典中存在该词且为消极标签,那么我们记 -1−1;
  • 如果词典中不存在该词,我们记 00。

4,匹配完一个句子之后,我们就可以计算整个句子的得分。总得分 >0>0 表示该句子情绪为积极,总得分小于零代表该句子为消极,总得分 =0=0 表示无法判断情绪。

此方法优点:简单,
缺点1:往往需要一个很大的词典,且不断更新。这对人力物力都是极大的考验。
缺点2:该方法还有无法通过扩充词典解决的情绪判断问题。
例如,当我们人类在判断一句话的清晰时,我们会往往更偏向于从整体把握(语言环境),尤其是在乎一些语气助词对情绪的影响。而基于词典进行情绪分析的方法就做不到这一点,将句子拆成词,就会影响句子的整体情绪表达。
缺点3:准确率并不高

目前,针对中文做情绪标注的词典少之又少。比较常用的有:

  • 台湾大学 NTUSD 情绪词典。
  • 《知网》情绪分析用 词语集。

以《知网》情绪词典举例,它包含有 5 个文件,分别列述了正面与负面的情绪词语以及程度词汇。

“正面情感”词语,如:爱,赞赏,快乐,感同身受,好奇,喝彩,魂牵梦萦,嘉许 …
“负面情感”词语,如:哀伤,半信半疑,鄙视,不满意,不是滋味儿,后悔,大失所望 …
“正面评价”词语,如:不可或缺,部优,才高八斗,沉鱼落雁,催人奋进,动听,对劲儿 …
“负面评价”词语,如:丑,苦,超标,华而不实,荒凉,混浊,畸轻畸重,价高,空洞无物 …
“程度级别”词语,
“主张”词语

2、基于词袋或 Word2Vec 的方法

2.1 词袋模型

词袋不再将一句话看做是单个词汇构成,而是当作一个 1 \times N1×N 的向量。
举例
我们现在有两句话需要处理,分别是:

我爱你,我非常爱你。 我喜欢你,我非常喜欢你。

我们针对这两句话进行分词之后,去重处理为一个词袋:

[‘我’, ‘爱’, ‘喜欢’, ‘你’, ‘非常’]

然后,根据词袋,我们对原句子进行向量转换。其中,向量的长度 N 为词袋的长度,而向量中每一个数值依次为词袋中的词出现在该句子中的次数。

我爱你,我非常爱你。 → [2, 2, 0, 2, 1]
我喜欢你,我非常喜欢你。 → [2, 0, 2, 2, 1]

有了词袋,有了已经人工标注好的句子,就组成了我们的训练数据。再根据机器学习方法来构建分类预测模型。从而判断新输入句子的情绪。

词袋模型和独热编码非常相似。其实这里就是将之前独热编码里的词变成了句子而已。

词袋模型固然比简单的词典对比方法更好,但独热编码无法度量上下文之间的距离,也就无法结合上下文进行情绪判断。引入词向量的 Word2Vec 处理方法,来克服这个缺点。

2.2 Word2Vec

Word2Vec,故名思意就是将句子转换为向量,也就是词向量。它是由浅层神经网络组成的词向量转换模型。

Word2Vec 的输入一般为规模庞大的语料库,输出为向量空间。Word2Vec 的特点在于,语料库中的每个词都对应了向量空间中的一个向量,拥有上下文关系的词,映射到向量空间中的距离会更加接近。

Word2Vec 的主要结构是 CBOW(Continuous Bag-of-Words Model)模型和 Skip-gram(Continuous Skip-gram)模型结合在一起。简单来讲,二者都是想通过上下文得到一个词出现的概率。

CBOW 模型通过一个词的上下文(各 N 个词)预测当前词。而 Skip-gram 则恰好相反,他是用一个词预测其上下文,得到了当前词上下文的很多样本,因此可用于更大的数据集。

CBOW(N=2)和 Skip-gram 的结构如下图所示:

图中 w(t)w(t) 表示当前的词汇,而 w(t−n)w(t−n),w(t+n)w(t+n) 等则用来表示上下文词汇。

3、案例:用户评论情绪分析

方法: Word2Vec 结合决策树的文本情绪分析方法
思路:需要使用 Word2Vec 来建立向量空间,之后再使用决策树训练文本情绪分类模型。

3.1 数据读取

由于我们未人工针对案例评论数据进行语料库标注,所以这里需要选择其他的已标注语料库进行模型训练。这里,我们选用了网友苏剑林提供的语料库。该语料库整合了书籍、计算机等 7 个领域的评论数据。

获取数据:

!wget -nc "http://labfile.oss.aliyuncs.com/courses/764/data_09.zip"
!unzip -o "data_09.zip"

三个数据文本预览:

import pandas as pd
#消极情绪文本 neg.xls 共有 10428 行。
pd.read_excel("data_09/data/neg.xls", header=None).head()
#积极情绪文本 pos.xls 共有 10679 行
pd.read_excel("data_09/data/pos.xls", header=None).head()
#用户评论文本 comments.csv 共有 12377 行。
pd.read_csv("data_09/comments.csv").head()

3.2 语料库分词处理

在使用 Word2Vec 之前,我们需要先对训练语料库进行分词处理。这里使用 jieba 分词。

import jieba
import numpy as np# 加载语料库文件,并导入数据
neg = pd.read_excel('data_09/data/neg.xls', header=None, index=None)
pos = pd.read_excel('data_09/data/pos.xls', header=None, index=None)# jieba 分词def word_cut(x): return jieba.lcut(x)pos['words'] = pos[0].apply(word_cut)
neg['words'] = neg[0].apply(word_cut)# 使用 1 表示积极情绪,0 表示消极情绪,并完成数组拼接
x = np.concatenate((pos['words'], neg['words']))
y = np.concatenate((np.ones(len(pos)), np.zeros(len(neg))))# 将 Ndarray 保存为二进制文件备用
np.save('X_train.npy', x)
np.save('y_train.npy', y)print('done.')

预览一下数组的形状,以 x 为例:

np.load('X_train.npy', allow_pickle=True)

3.3 Word2Vec 处理

有了分词之后的数组,我们就可以开始 Word2Vec 处理,将其转换为词向量了。
目前,很多开源工具都提供了 Word2Vec 方法,比如 Gensim,TensorFlow,PaddlePaddle 等。这里我们使用 Gensim。

from gensim.models.word2vec import Word2Vec
import warnings
warnings.filterwarnings('ignore')  # 忽略警告# 导入上面保存的分词数组
X_train = np.load('X_train.npy', allow_pickle=True)# 训练 Word2Vec 浅层神经网络模型
w2v = Word2Vec(size=300, min_count=10)
w2v.build_vocab(X_train)
w2v.train(X_train, total_examples=w2v.corpus_count, epochs=w2v.epochs)def sum_vec(text):# 对每个句子的词向量进行求和计算vec = np.zeros(300).reshape((1, 300))for word in text:try:vec += w2v[word].reshape((1, 300))except KeyError:continuereturn vec# 将词向量保存为 Ndarray
train_vec = np.concatenate([sum_vec(z) for z in X_train])
# 保存 Word2Vec 模型及词向量
w2v.save('w2v_model.pkl')
np.save('X_train_vec.npy', train_vec)
print('done.')

3.4 训练情绪分类模型

有了词向量,我们就有了机器学习模型的输入,那么就可以训练情绪分类模型。
选择速度较快的决策树方法,并使用 scikit-learn 完成。

from sklearn.externals import joblib
from sklearn.tree import DecisionTreeClassifier# 导入词向量为训练特征
X = np.load('X_train_vec.npy')
# 导入情绪分类作为目标特征
y = np.load('y_train.npy')
# 构建支持向量机分类模型
model = DecisionTreeClassifier()
# 训练模型
model.fit(X, y)
# 保存模型为二进制文件
joblib.dump(model, 'dt_model.pkl')

3.5 对评论数据进行情绪判断

# 读取 Word2Vec 并对新输入进行词向量计算
def sum_vec(words):# 读取 Word2Vec 模型w2v = Word2Vec.load('w2v_model.pkl')vec = np.zeros(300).reshape((1, 300))for word in words:try:vec += w2v[word].reshape((1, 300))except KeyError:continuereturn vec
# 读取蓝桥云课评论
df = pd.read_csv("data_09/comments.csv", header=0)
comment_sentiment = []
for string in df['评论内容']:# 对评论分词words = jieba.lcut(str(string))words_vec = sum_vec(words)# 读取支持向量机模型model = joblib.load('dt_model.pkl')result = model.predict(words_vec)comment_sentiment.append(result[0])# 实时返回积极或消极结果if int(result[0]) == 1:print(string, '[积极]')else:print(string, '[消极]')# 将情绪结果合并到原数据文件中
merged = pd.concat([df, pd.Series(comment_sentiment, name='用户情绪')], axis=1)
pd.DataFrame.to_csv(merged, 'comment_sentiment.csv')  # 储存文件以备后用

饼状图看一下蓝桥云课用户的情绪分布。总体看来,73% 都为积极评论:

实战项目-用户评论数据情绪分析相关推荐

  1. 我的实战项目——用户评分数据探索

    项目简介 -此数据集为一商品网站大约16万用户在4年内对网站商品的评分数据,每条评分记录都有时间戳(隐匿了具体时间,只保证顺序不变),评分分为5级,1分最低,5分最高. DataExploration ...

  2. 数据分析实战项目--天猫交易数据可视化分析

    导语:"学习的价值不在于记住多少,而在于应用多少",这是笔者两天前浏览博客时看见的一句话,深有感触.相信有不少uu们正处于头绪繁多,却又不知从何下手的状态.想起之前在数据分析中踽踽 ...

  3. 【项目实战】Python实现基于LDA主题模型进行电商产品评论数据情感分析

    说明:这是一个机器学习.数据挖掘实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 视频: Python实现基于LDA模型进行电商产品评论数据情感分析 ...

  4. 数据挖掘实战—电商产品评论数据情感分析

    文章目录 引言 一.评论预处理 1.评论去重 2.数据清洗 二.评论分词 1.分词.词性标注.去除停用词 2.提取含名词的评论 3.绘制词云查看分词效果 三.构建模型 1.评论数据情感倾向分析 1.1 ...

  5. 数据分析与挖掘实战-电商产品评论数据情感分析

    电商产品评论数据情感分析 背景 随着网上购物越来越流行,人们对于网上购物的需求越来越高,这让京东.淘宝等电商平台得到了很大的发展机遇.但是,这种需求也推动了更多的电商平台的崛起,引发了激烈的竞争.在这 ...

  6. 《Python数据分析与挖掘实战》第15章 ——电商产品评论数据情感分析(LED)

    文章目录 1.挖掘背景与目标 2.2 数据探索与预处理 2.1 数据筛选 2.2 数据去重 2.3 删除前缀评分 2.4 jieba分词 3 基于LDA 模型的主题分析 4.权重 5.如何在主题空间比 ...

  7. python根据频率画出词云_利用pandas+python制作100G亚马逊用户评论数据词云

    原标题:利用pandas+python制作100G亚马逊用户评论数据词云 数据挖掘入门与实战 公众号: datadw 我们手里面有一个差不多100G的亚马逊用户在购买商品后留下的评论数据(数据格式为j ...

  8. TableauBDP,哪个才是最适合中国用户的数据可视化分析工具?

    作者:pledge 本人数据分析师一枚,除了工作所需,自己对数据分析.数据可视化的产品工具都比较感兴趣,喜欢混迹于各种数据论坛,也发现和使用了不少数据工具,也积累了很多亲身经历.这两年数据可视化在国内 ...

  9. 利用Python爬取基于AES对称加密算法的网易云音乐用户评论数据

    本文利用Python2.7根据网易云音乐歌曲ID爬取了该歌曲的所有用户评论数据.以id是28875120的歌曲<小岁月太着急>为示例,通过Chrome的DevTools工具获取已加密评论数 ...

最新文章

  1. decfloat转换成oracle种类型,Oracle GoldenGate 19.1新特性
  2. 股票实时行情数据大全
  3. poj 1716 差分约束
  4. NFS服务器是什么?(Network File System 网络文件系统)(远程主机间 mount 挂载目录)(ubuntu:nfs-kernel-server)
  5. docker-compose部署nginx,挂载外置配置文件及项目
  6. SQL语句之left join、right join、inner join的区别
  7. unzipping/Users/xq/.gradle/wrapper /dists/gradle-3.3-all/55gk2rcmfc6p2dg9u9ohc3hw9/gradle-3.3-all.zi
  8. 国嵌c语言深度,国嵌C语言3部全
  9. 二维码图像去噪文献调研(1)--Real Image Denoising with Feature Attention
  10. java 和mysql做Android_基于Android和Java后台的朋友圈的设计和实现
  11. Amazon Silk 你所不知道的在Kindle背后的大数据
  12. ASML、光刻机小文预告
  13. 数据库系统实践 III 查询语句
  14. 能否用计算机证明数学定理大全,那些教材中未给出证明的定理,到底能否使用?...
  15. From Nand to Tetris Week2 2021 超详细笔记
  16. 微软相关网站和软件无法上网的解决办法
  17. 更新again:微机原理与汇编语言-练习题
  18. python自走棋_GitHub - pumpkye/AutoChess: 自走棋战斗模拟器,搭配双方阵容然后模拟战斗,得到战斗结果,希望借此探索更加平衡的棋子设定...
  19. matlab数组保存envi,MATLAB 读取envi img格式
  20. 牛客_美团点评2020校招前端笔试题(仅个人学习记录)

热门文章

  1. 三星android分屏视图怎么关闭,三星S9/S9+分屏窗口设置及使用教程
  2. 用什么样的语言就有什么样的公司
  3. 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'
  4. 将视频分割成多段,并将视频中的音频进行单独保存
  5. Adobe 官方公布的RTMP规范
  6. 绘制三角形lisp源码分享如下
  7. (16年)井底一只青蛙,已知井深M米,青蛙白天每天能向上爬N米,晚上休息,但重力导致向下滑K米,输出第几天能爬出来,累积爬了多少米,下滑了多少米
  8. html5扫码plusready子添加剂,HTML5+ API plusready兼容相关问题
  9. mysql存储微信昵称使用的数据类型
  10. crmeb单商户pro1.5一键换色