刘策 李贞 颜明会
摘 要:随着移动互联网技术的发展,网络文本信息量迅速增长。现有的情感分析库snownlp,多用于对购物评论的情感分析。鉴于snownlp在美食评价中对情感分析不理想,以大众点评网评论为例,运用jieba分词、Bag of words模型和多项式朴素贝叶斯方法构造出一种基于朴素贝叶斯模型的情感分类构造器。通过对评论文本数据集的训练和测试可知,该构造器的情感分析效果明显优于snownlp,为消费者了解美食在大众心目中的口碑提供了帮助。
关键词:朴素贝叶斯算法;情感分析;snownlp;大众点评网
中图分类号:TP181;TP317.2 文献标识码:A文章编号:2096-4706(2021)19-0037-03
Research on Text Emotion Analysis for Comments on Public Comments Network
LIU Ce, LI Zhen, YAN Minghui
(North China Institute of Aerospace Engineering, Langfang 065000, China)
Abstract: With the development of mobile internet technology, the amount of network text information increases rapidly. The existing emotional analysis library snownlp is mostly used for emotional analysis of shopping reviews. In view of snownlps unsatisfactory emotion analysis in food evaluation, taking the comments on public comment network as an example, an emotion classification constructor based on Naive Bayes model is constructed by using Jieba word segmentation, Bag of words model and polynomial naive Bayes method. Through the training and testing of the comment text data set, it can be seen that the emotional analysis effect of the constructor is significantly better than snownlp, which provides help for consumers to understand the reputation of delicious food in the eyes of the public.
Keywords: Naive Bayes algorithm; emotion analysis; snownlp; public comment network
0 引 言
随着互联网的飞速发展,人们可以通过各种各样的方式来表达自己的喜好、观点和建议,主要的方式有微博、朋友圈、影评、大众点评、直播弹幕,等等。大量包含用户情感的信息可以在这类文本数据中呈现。通过对这类体现情感数据的分析,政府等机构可以实现对舆情等数据的监控。对一些重要信息进行预测,还可以帮助大部分消费者了解某些美食、酒店、电影等在大众心目中的口碑,避免踩坑。本文使用的数据主要来源于大众点评网,大众点评网是中国领先的本地生活信息及交易平台,也是全球最早建立的第三方消费点评网站[1],用户在使用过程中会产生大量的评论文本信息,利用情感分析能从中获取所需的情感信息。
目前比較常见的文本情感分析方法有三种:基于情感词典的文本情感分析、基于机器学习的文本情感分析和基于深度学习的文本情感分析[2]。基于机器学习的情感分析方法主要是指使用提前区分好的积极情感文本和消极情感文本,根据实验需求采用不同的特征处理和提取公式对所提取的文本数据进行分析[3],然后用机器学习的方法对数据进行训练,得到文本情感模型,用该模型对实验中的文本数据进行分类处理。本文首先使用snownlp对大众点评网上的评论文字进行情感分析,并计算打分的准确率,然后使用朴素贝叶斯模型,对同样的数据进行情感分析,做以比较。
1 基于snownlp的情感分析
1.1 snownlp的介绍
大部分自然语言处理的库都是用于对英文文本的分析,用于中文文本分析的库较少。在这样的背景下,受TextBlob的启发,Snownlp应运而生。它是Python中的一个类库,snownlp中所有的算法都是自己实现的,而且其自身有一些训练好的字典,主要的功能包括对中文分词、词性标注、情感分析、文本分类、汉字转化成拼音、繁体字转成简体字、提取文本的关键词、提取文本的摘要等[4]。
1.2 snownlp样例分析
对snownlp的一些主要功能进行测试分析,其运行效果如图1所示,主要代码为:
#encoding=utf-8
from snownlp import SnowNLP
text=你站在桥上看风景,看风景的人在楼上看你。
text1 = ‘这部电影真心棒,全程无尿点
text2 = ‘这部电影简直烂到爆
s=SnowNLP(text)
s1 = SnowNLP(text1)
s2 = SnowNLP(text2)
print(‘****显示分词****)
print(“,”.join(s1.words))
print(“,”.join(s2.words))
print(‘****显示断句****)
print(s.sentences)
print(‘****显示情感分析****)
print(text1, s1.sentiments)
print(text2, s2.sentiments)
1.3 snownlp情感分析流程
对大众点评网的评论文字和打分数据进行读取,将打分小于3的视为消极,记为0,打分大于3的视为积极,记为1,将结果写入一个新列sentiment中。使用snownlp库中的方法对评论文字进行情感分析,其中分析结果大于0.6的视为积极评论,记为1,分析结果小于0.6的视为消极评论,记为0,将结果写入新列snlp_sentiment。统计来自同一客户的sentiment和snlp_sentiment相同的情况,用该值除以样本总数,即为使用snownlp进行情感分析的准确度。
1.4 snownlp情感分析结论
通过对大众点评网的评论数据集进行实验得出,基于snownlp的情感分析结果为76.35%。由此可知,不同场景下文本的语言表达方式是不同的,snownlp在处理大众点评网的美食评论上准确度一般。
2 基于朴素贝叶斯的情感分析
2.1 数据预处理
在开始实验之前,需要先将文本数据处理成所需的格式,这个过程包括以下5个步骤:
(1)分词。中文文本与英文不同,一句话中没有空格,分界形式只体现在句子与句子之间,所需的包含情感的词语无法直接获得,因此对评论文本数据进行分词处理就成了实验前必不可少的环节。本文采用jieba分词系统,通过jieba对大众点评网中的美食评论文本comment列进行切割,将切割后的结果写到新列cut_comment中。
(2)去停用词。本实验采用的是来源于哈尔滨工业大学的去停用词表,用来去除虚词、冠词、助词等。
(3)去除关键词。文本评论中包含有较多的无效评论,这些评论会影响分析的效果,本实验去除了一些超过一定比例的关键词和低于一定比例的关键词。
(4)构建词向量。本文采用Bag of words模型,该模型在分析文本时,对文本中词语的顺序、语法和句法等因素都忽略不计,把每一个词当作是一个单独的个体来看待。
(5)划分数据集。在对朴素贝叶斯模型进行训练前,首先需要区分本实验所需的X和Y,本文将使用jieba分词得到的cut_comment设置为X,将sentiment设置为Y,采用sklearn中的train_test_split函数将整个数据集按照4:1的比例分为训练集x_train和测试集x_test。
2.2 训练模型阶段
贝叶斯算法是一种统计学中概率分类的算法,其算法原理是借助贝叶斯公式,利用数据中某特征的先验概率,推算出其后延的概率,然后选择最大可能的后延概率,作为该特征所属的类。朴素贝叶斯算法是贝叶斯算法中的一种。在整个算法过程中,朴素贝叶斯所使用的是最原始、最简单的假设,这也是它被称为朴素贝叶斯的原因所在。
在sklearn中,朴素贝叶斯算法有三种,分别是高斯朴素贝叶斯(GaussianNB)、多项式朴素贝叶斯(MultinomialNB)和伯努利朴素贝叶斯(BernoulliNB)[5]。
GaussianNB算法是假设每个标签的数据都服从高斯分布(正态分布),是一种先验为高斯分布的朴素贝叶斯算法,高斯分布的概率密度函数计算公式为:
其中,Ck为Y的第k个类别,?k和σ2k为第k类样本在第i个属性上取值的均值和方差。
MultinomialNB算法是假设每个标签的数据特征是通过一个多项式分布生成的,是一种先验为多项式分布的朴素贝叶斯算法。多项式分布可以用于计算各种类型样本数据出现的概率,因此该模型适用于对文本进行分析,其中分布式的公式为:
其中,Nyi为特征i在类别y的样本中发生的次数,Ny为类别y的样本中所有特征发生的次数,n为特征数量,a为平滑系数。
BernoulliNB算法是假设数据集中每个数据的特征为二元伯努利分布,是一种先验为伯努利分布的朴素贝叶斯算法[6],伯努利分布公式为:
本文采用的是多项式朴素贝叶斯(MultinomialNB)算法,它的核心算法是执行计数的工作,本实验训练MultinomialNB朴素贝叶斯的步骤为:
(1)在已经完成文本预处理的基础上,開始对文本数据进行训练,使用fit_transform()函数对训练集数据x_train进行处理,fit_transform()函数可以看作是fit()函数和transform ()函数的结合,它的功能既包括训练又包括转换,通过学习训练数据集中的部分数据,找到该数据集的规则,然后根据规则对数据进行转换,从而实现数据集的标准化、归一化。
(2)在完成训练数据集归一化的基础上,通过fit()函数,建立本实验所需的模型——多项式朴素贝叶斯模型。
(3)在所建立MultinomialNB模型的基础上,通过调用score()函数,对大众点评网文本评论的情感分析的准确率进行求解,结果为90.62%,该结果与使用snownlp进行情感分析的结果相比,准确率较高。
2.3 测试模型阶段
本阶段主要是针对已经训练好的模型,其主要步骤及效果为:
使用transform()函数从测试集数据x_test中提取一些数据的词频,将其转换成词频矩阵,将结果与测试数据集y_test放到训练好的朴素贝叶斯模型中,计算本实验的测试数据集在朴素贝叶斯模型下的准确率,结果为83.75%。本文利用snownlp和朴素贝叶斯两种不同的方法对同一文本集进行了情感分析,两种方法的准确率对比如表1所示。
完成测试数据集准确率的计算后,再次使用transform()函数,从全部评论数据cut_comment中提取词频,转换成词频矩阵,将结果传到训练好模型下的predict()函数中,使用本实验的朴素贝叶斯模型对全部的点评文本进行情感预测分析,其效果如图2所示,主要代码为:
#测试数据
x_test_vect = vect.transform(x_test)
print(nb.score(x_test_vect, y_test))
#将结果放到data数据中
x_vec = vect.transform(x)
nb_result = nb.predict(x_vec)
data[‘nb_result] = nb_result
print(data)
3 结 论
通过效果对比可以发现,在美食评论数据方面,朴素贝叶斯算法的情感分析效果明显高于snownlp,但是在处理不同领域的评论文本时,分类器的效果不同,具有一定的局限性。虽然本实验所提出的朴素贝叶斯模型准确率相对较高,但是本实验的训练集较少,受样本中评论文本和打分情况的影响较大,没有进行交叉验证。基于机器学习的文本情感分析有一些弊端,所需的人力物力成本较高,当前比较流行的深度学习在文本情感分析领域的效果较好,现在的目标就是在今后的工作中,多多接触一些基于深度学习的情感分析案例,以做进一步的探索。
参考文献:
[1] 付华.电子优惠券顾客使用意愿影响因素分析 [J].全国商情,2016(32):3-4.
[2] 王俊.基于跳转和多注意力神经网络的文本情感分析 [D].重庆:重庆邮电大学,2020.
[3] 赵刚,徐赞.基于机器学习的商品评论情感分析模型研究 [J].信息安全研究,2017,3(2):166-170.
[4] 王欣,周文龍.基于Python的微博情感分析系统设计 [J].信息与电脑(理论版),2019(6):76-77+80.
[5] 余华鸿,周凤艳,陈毛毛.基于机器学习的KDD-CUP99网络入侵检测数据集的分析[J].计算机工程与科学,2019,41(S1):91-97.
[6] 葛霓琳,凡甲甲.基于朴素贝叶斯和支持向量机的评论情感分析 [J].计算机与数字工程,2020,48(7):1700-1704.
作者简介:刘策(1998—),男,汉族,河北保定人,硕士研究生在读,研究方向:人工智能与大数据分析;李贞(1997—),女,汉族,河南洛阳人,硕士研究生在读,研究方向:人工智能与大数据分析;颜明会(1997—),男,汉族,江苏盐城人,硕士研究生在读,研究方向:软件测试、数据分析与大数据处理。