基于机器学习的舆情分析系统

2020-06-29 20:36许诺王德广赵煜王宇
微型电脑应用 2020年5期
关键词:情感分析爬虫机器学习

许诺 王德广 赵煜 王宇

摘 要:随着网络时代的全面到来,如何从大数据的角度去了解和管理网络舆情已经成为一个重要话题。针对这一重要话题,提出一个新的思路:从新闻本身的被关注度和新闻下的评论两方面同时入手,将舆情分析分为两个部分,即“热点事件抓取”和“网民评论情感倾向性分析”。热点事件的抓取通过分布式爬虫实现,网民评论情感分析通过词向量配合训练LSTM神经网络实现。通过这两部分的配合,找出有较高关注度且网民对其有强烈情感的热点事件新闻,从而达到了舆情监控的目的。

关键词:爬虫;机器学习;舆情分析;情感分析

Abstract:With the arrival of the Internet era, how to understand and manage network public opinion from the perspective of big data has become an important topic. In response to this important topic, this article opens up a new way of thinking. Starting from the attention of the news itself and the comments under the news, the analysis of the public opinion is divided into two parts, i.e., “hot spot capture” and “emotional polarity analysis of netizens comments”. The crawling of hot events is realized by distributed crawlers, and the sentiment analysis of netizens' comments is carried out by using the word vector to train the LSTM neural network. Through the cooperation of these two parts, we can find out the news of hot events with high attention and strong emotional sentiment of netizens which helps to achieve the purpose of public opinion monitoring.

Key words:crawler;machine learning;public opinion analysis;sentiment analysis

0 引言

随着Web2.0时代的到来,互联网社交已然成为了人们生活的一部分,越来越多的人在各类互联网社交平台上表达自己的立场、态度和观点。这些通过互联网表达和传播的, 公众对自己关心或与自身利益紧密相关的各种公共事务所持有的多种情绪、态度和意见交错的总和称为网络舆情[1]。在网络高度融入生活的今天,如何去分析和引导网络舆情已经成为了一个重要的话题。

1 相关研究

在舆情分析这个方向上,我国的起步比较晚,并且作为一个交叉学科,其发展也不是一蹴而就的。这其中经历了“单一文本关键词提取与倾向分析、群體文本热点话题提取与倾向分析、网络舆情分析”这样的发展过程[2]。在传统的工作中,热点话题的发现一般采用聚类算法,其中Single-Pass算法因为其速度快,原理简单,尤为受到欢迎。格桑多吉等人利用改进的Single-Pass算法来发现网络热点话题,通过对Web文本不同位置特征项进行加权处理,仅需计算新文档与同类别种子文档间的相似度,就达到了降低漏检率和错检率的目的[3]。但是格桑多吉等人设计的算法有两个缺点:聚类质心不唯一、算法聚类中心随机性较强。针对这两个不足,马国栋等人提出了改进的Single-Pass算法,他们的解决方案是设定唯一聚类质心、不断优化聚类中心[4]。根据其实验结果来看,该算法虽然有一定的改进,但是仍然没有从根本上解决Single-Pass具有输入次序依赖的特性,即如果按照不同的次序输入,将会使得聚类结果不同。除Single-pass外,还有曾子明等人的融合演化特征的舆情分析方式[5]以及马哲坤等人的基于知识图谱的舆情分析方式[6],但是融合演化特征的舆情分析方式过于依赖词典的领域性与适应性;基于知识图谱的舆情分析仅仅实现了对舆情的静态描述,不能对舆情的演化进程进行很好的描述。因此,本文将另辟蹊径,从“新闻的热度和新闻下的评论”两方面入手,结合分布式爬虫技术和机器学习,实现热点话题的发现与分析。

2 相关技术

2.1 分布式爬虫

网络爬虫是一种自动化提取网页信息的程序,可以自动下载网络上的资源,还可以模拟用户的动作完成指定操作。而分布式爬虫则是将几个爬虫分别部署在几个不同的服务器上,并发运行爬取信息,加快爬取速度。

2.2 词向量

词向量表示法有两种:One-Hot表示法(One-Hot Representation)和分布式表示法(Distributed Representation)。假设词典包含N个词语,One-Hot表示法用一个包含N-1个0和1个1的长度为N的向量表示,其中1的位置对应该词在词典中的位置。但是One-Hot表示法有两个缺点:① 向量的维度的大小取决于整个词典的大小,词的数量越多,向量维度越大。② 无法展现词语之间的相似性。而分布式表示法将每一个词语用一个固定长度的向量表示,并将所有的词向量放在一起形成向量空间,同时引入“距离”的概念,通过计算词向量之间的空间距离可以判断出词语之间的相似性。

2.3 Word2Vec

Word2Vec[7]是由Google公司于2013年开源推出的一个分布式词向量训练工具。其中提供了两种训练模型:Continuous Skip-gram Model(简称为Skip-gram) 和 Continuous Bag-Of-Words Model(简称为CBOW)。Skip-gram模型和CBOW模型都是通过统计词语的“共现”情况来生成词向量。不同的是Skip-gram模型是给定了中心词预测背景词的出现概率,而CBOW是给定了背景词预测中心词的出现概率。利用Word2Vec训练词向量的过程从本质上说是在训练一个浅层神经网络,输入的是词语的One-Hot向量表示,输出的是词语共现的概率。当训练完成时,浅层神经网络的权重矩阵即为词向量。

2.4 LSTM神经网络

深度学习[8]作为机器学习领域中一个重要的分支,通过组合低层特征形成更加抽象的高层表示( 属性类别或特征) ,以发现数据的分布式特征表示[9]。而LSTM[10](Long Short-Term Memory)作为 RNN[11] (Recurrent Neural Networks)的一种改进算法,在深度学习领域,特别是在有关自然语言处理的深度学习领域有重要地位。传统的RNN神经网络,在t时刻,它的隐藏层状态为式(1)。

这样一来就相当于引入了一个二元的开关,要么选择遗忘,要么选择记忆,避免了例如0.3,0.4这样的中间值,从而避免了RNN中梯度消失的问题。

3 系统设计

整个系统可以分为两个部分:“热点事件的抓取”和“网民评论的情感倾向性分析”。第一部分通过配置了IP池和Cookie池等反爬手段的分布式爬虫实现。第二部分通过LSTM神经网络配合词向量实现。

3.1 分布式爬虫的设计

为加快对数据的爬取进度,本系统中设计了分布式爬虫。其主要分为中央控制台、URL队列、爬虫、信息存储、数据处理、代理池、Cookie池七大模块。中央控制台本身为一个广度优先的爬虫,启动后会生成一个URL链接队列。在爬取工作结束前,控制台会一直负责维护这个URL队列。如果此模块是首次工作,会先加载代理池和Cookie池作为反爬手段。信息获取模块从URL队列中依此拿取URL地址,以深度优先的方式进行爬取。爬取的数据由爬虫服务器上的数据处理程序进行数据清洗,并将处理好的数据存入数据库,等待下一步使用。分布式爬虫架构示意图,如图1所示。

爬虫启动后首先爬取百度的搜索关键词统计页面和微博的热搜展示页面,将两者的交集事件作为爬取的目标,爬取相关新闻的发布数量、转载数量、评论数量和搜索量。然后将这些数据按照一定的权重求和,求出事件的热度值,将其按照时间顺序存储并绘制热度变化图,表现出事件热度的变化情况。热度计算式,如式(13)所示。

其中,H表示此事件的热度, P为相关新闻的发布数量,T为转载数量,R为评论数量,S为事件的搜索量。作为舆情分析和预警系统,本系统更看重热度和扩散度,因此分别将系数a,b,c,d设定为:0.1,0.4,0.3,0.2。

3.2 情感分析模块的设计

利用文本材料训练出词向量,再将经过预处理和词向量化处理后的训练集放入LSTM神经网络中进行训练,得到情感分类模型。LSTM神经网络训练模型流程,如图2所示。

4 系统实现

4.1 分布式爬蟲的实现

将待爬取的URL加入URL队列,Spider执行具体的数据爬取任务。主机同时有一组心跳线程包,对主机中的Cookies池和代理池进行周期性检查。如果检测到资源失效,将降低失效资源在资源池中的权值(每次失效权值降低1),如果成功,将提高权值(每次成功权值提高20,满分100),如果资源池中的资源权值降为0,此资源将被从资源池中删除。同时线程包中有新的Cookies和代理不断加入到资源池中。

Spider实现对每个微博的具体信息包括正文、评论等信息进行详细爬取,并将爬取的结果存储到远程数据库中。Spider中有一组心跳线程包,对Spider中当前的Cookies和代理的有效性进行周期性检测,一旦发现URL失效,则删除资源池中对应的资源。

数据库使用MongoDB,但其在多线程高并发的时候会产生一些问题,因此采用消息队列。Spider将爬取到的数据添加到队列中,在数据库服务器中添加守护线程。一旦检测到队列不为空,则开始进行存储操作,直至队列为空。随后主线程休眠,等待守护线程唤醒。

4.2 情感分析模块的实现

首先利用Word2Vec工具训练词向量,方法如图3所示。

参数1是训练材料的路径。参数2是基准词频,小于这个词频数的词语会被剔除掉。参数3是神经网络的隐藏层参数,也是训练出来的词向量的维度。由于想训练出优秀的词向量需要的语料库过于庞大,本系统中使用的词向量文件是取自于GitHub上的开源词向量模型[10]。

对情感分析训练集做预处理。① 分词,即将一整句话分成若干个词语。使用的分词工具是“jieba分词”。jieba分词后的结果是一个生成器,需要手动转换成一个list,这样可以方便后来的操作。② 去停用词,目的是减少计算量的同时提高模型的泛化能力。③ 索引化,即将训练文本中的词语用词向量词典中对应词语的序列表示。由于训练集中的文本长度不统一,索引化后长度也不同。为了方便模型的训练,需将所有文本的长度统一。通过观察文本长度分布的对数的图像,如图4所示。

可以发现文本长度的对数的分布几乎成正态分布。因此假设其符合正态分布并根据正态分布的性质来计算出一个长度,使得这个长度可以覆盖95%的训练样本。

通过计算,这个长度是236,计算过程如图5所示。

验证结果是否覆盖了95%的样本,验证结果如图6所示。

从结果中可以看出236这个长度确实覆盖了95%的文本长度,说明之前的假设——“训练文本长度是符合正态分布的”是合理的。

对于长度超过236的文本需要剪裁,而对于长度不足236的训练文本需要填充。本文中采用的填充方法是“前填充”。填充并索引化后的效果,如图7所示。

训练LSTM模型。准备一个矩阵做词向量矩阵,矩阵大小为250 000*300,250 000表示选定使用词向量词典中前250 000个词语。300是词向量的维度,即每个词语的特征是用一个含有300列的1*300的稠密(Dense)矩阵所表示。这个过程称作词嵌入(Emmbedding)。在本次实验中共准备了正面情感训练材料7 122条,负面情感训练材料3 176条,总计10 298条训练材料,按照9:1的比例分为训练集和测试集。将Embedding作为一层加入到模型当中。

经测试,训练后的LSTM模型做训练相关文本倾向性预测的正确率可以达到85.73%。测试结果如图8所示。

5 测试

5.1 数据的爬取

利用设计好的分布式爬虫,以微博为入口,对8条热点新闻进行为期一周的跟踪爬取,利用式(13)热度计算公式跟踪计算每一条新闻的每一天的热度值,绘制出热度变化图,如图9所示。

5.2 网民情感倾向性分析

加载训练好的词向量模型和LSTM神经网络模型,對要进行情感倾向判断的文本做预处理,即分词,去停用词,索引化。网民评论的情感倾向性分析结果,如表1所示。

用“coef”代表模型输出的预测值:0.00.5时为积极情感,coef<0.5时为消极情感,且|coef-0.5|越大,情感越强烈。

6 总结

本文所描述的舆情分析系统使用分布式爬虫大量爬取社会各类新闻,根据热度计算公式从众多新闻中筛选出关注度较高的新闻,然后从其评论入手,使用训练好的神经网络模型对这些热点新闻的相关评论进行情感倾向性分类,进而找出关注度高并且网民对其有较强烈情感的新闻。达到了帮助舆情监控者找出想要重点了解的新闻关键字和主题的目的。

参考文献

[1] 刘毅.略论网络舆情的概念、特点、表达与传播[J].理论界,2007(1):11-12.

[2] 孙培星. 基于情感倾向性的网络舆情分析及演化预测研究[D].长春:吉林大学,2016.

[3] 格桑多吉, 乔少杰, 韩楠, 等. 基于Single-Pass的网络舆情热点发现算法[J]. 电子科技大学学报, 2015, 44(4):599-604.

[4] 马国栋,李慧. 基于改进Single-Pass算法的BBS热点话题发现[J]. 首都师范大学学报(自然科学版),2014,35(6):13-17.

[5] 曾子明,万品玉.融合演化特征的公共安全事件微博情感分析[J].情报科学,2018,36(12):3-8.

[6] 马哲坤,涂艳.基于知识图谱的网络舆情突发话题内容监测研究[J].情报科学,2019,37(2):33-39.

[7] Mikolov T, Chen K, Corrado G, et al. Efficient estimation of word representations in vector space[J]. arXiv preprint arXiv:1301.3781, 2013.

[8] Hinton G E, Salakhutdinov R R. Reducing the dimensionality of data with neural networks[J]. Science, 2006, 313(5786):504-507.

[9] BENGIO Y,DELALLEAU O. On the expressive power of deep archi- tectures[C]/ /Proc of the 14th International Conference on Discovery Science. Berlin:Springer-Verlag,2011:18-36.

[10] Hochreiter, Jurgen Schmidhuber. Long Short-Term Memory[J]. Neural Computation, 1997, 9(8):1735-1780.

[11] Elman J L. Finding structure in time[J]. Cognitive science, 1990, 14(2):179-211.

(收稿日期:2019.09.14)

猜你喜欢
情感分析爬虫机器学习
基于Python的网络爬虫和反爬虫技术研究
Python反爬虫设计
基于Scrapy框架的分布式网络爬虫的研究与实现
谁抢走了低价机票
基于SVM的产品评论情感分析系统的设计与实现
基于词典与机器学习的中文微博情感分析
在线评论情感属性的动态变化
基于网络搜索数据的平遥旅游客流量预测分析
前缀字母为特征在维吾尔语文本情感分类中的研究
基于支持向量机的金融数据分析研究