大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
新浪微博舆情分析系统
摘要
随着互联网的迅速发展,互联网上信息也在飞速增加。 如何在广泛信息中总体把握舆情,
是一个很重要的问题。本系统实现了基于新浪微博的舆情分析,提供了相关话题获得、关注
度曲线绘制、情感取向分析等功能;并对“复旦”关键词进行了跨越一年的舆情分析的实验。
关键词
中文信息处理; 舆情分析; 情感分析
1. 引言
随着 Web2.0 时代的到来,所有的互联网用户都在产生着大量的信息。依靠人工去阅读
所有信息显得不大现实。而对于舆情分析又是无论对于一个企业实体还是政府部门都是一个
很重要的课题。然而舆情分析有着很多的困难,主要是:
·大量信息:根据中国互联网络信息中心(CNNIC)发布的《第 27 次中国互联网络发
展状况报告》显示,中国网民人数在 2010 年达到 4.57 亿。这些网民不仅访问着信息,更在
Web2.0 时代创造着大量信息。而新浪微博作为中国最大的微博,在 2010年 7 月总微博数超
过 9000 万,每天产生微博超 300 万,平均每秒有 40 条。
·自然语言:大量的信息要求我们必须要使用计算机来协助分析舆论。然而,应用计算
机处理的最大困难在于,这些自然语言难以被计算机所理解。对于中文来说,问题变得进一
步复杂,这主要是因为中文信息的处理有这样几个问题:不像英语那样可以按照空格分词;
字或词有丰富的内容,不同的解释;同一个词既有褒义又有贬义;在微博上的贬义倾向通常
以反讽的特点出现。
计算机通过技术和设备的提升可以解决大量信息的问题。自然语言的问题需要我们提供
更好的算法来改善。在中文信息处理方面,已经有两届 COAE中文倾向性分析评测。评测内
容包括情感词识别分类、情感句分类、主客观分析、主题对象抽取等。此外值得一提的是,
武汉大学的沈阳教授较为成功的开发了 ROST 系统,该系统能够分析聊天记录以及各大新闻
网站的新闻,并提供舆情分析。
本文的结构如下:第 2节提出了系统设计的主要框架;第3 节分析了关注度和话题获取
的几个方法; 第 4 节分析了情感取向分析的几个算法;第 5 节粗略的介绍了系统的主要实现;
第 6 节针对“复旦”关键词进行了实验;最后总结了本文,并提出若干不足和修改方法。 2
2. 系统设计
本系统主要通过微博数据的爬取来实现话题识别和情感分析两个任务。
简要方法就如下:
第一步 输入关键词,开始时间,结束时间。
第二步 枚举每一天
第三步 获得该天微博条目
第四步 该天关注度为微博数量
第五步 计算该天微博情感取向为每条微博情感取向加和
第六步 重复第二到第五步
第七步 计算所有微博的话题
图 1 微博舆情分析流程图
获得微博条目
关注度 = 微博数量
情感取向 = Σ 每条微博情感取向
获得话题
输入关键词、开始、结束时间
结束
开始
结束
枚举每一天
Yes
No 3
3. 关注度和话题获取
3.1 关注度获得
关注度获得很简单,直接获取某天得到的微博数目即可。
3.2 文本聚类
话题获取的一个很自然的想法是利用文本聚类的方法,将所有微博聚成若干类。每
一类的中心就是所关注的话题。
文本聚类一个比较重要的概念是 TF/IDF。TF即“文本词汇频率” (Term Frequency) 。
其值为某条微博内的某个词语除以微博词语总数。 IDF 即“逆文本频率”(Inverse Document
Frequency) ,计算方法为 log(D/Dw),其中 D 为所有的条目总数,Dw 为词语出现的条目
数。
item appeared #
item total #
log
item in words total #
word the of frequency #
/ IDF TF IDF TF
值得注意的是,分词之后会有类似于“的”,“我们”之类对主题没有意义的词,这
类被称作“停用词”。通过停用词表,我们可以去除这些词语。
计算每个词语在每个条目上的 TF/IDF 之后,我们可以构成一个向量空间。然而,我
们可以发现一个很重要的问题,就是我们可能会有上万的词语,那么这个向量会有上万
维。这不仅意味着大量的空间消耗,而且意味着潜在的时间开销。
在计算得到 TF/IDF 的向量空间上,我们可以进行 K-means 算法来聚类。其方法是考
虑 K 个质心,将所有的 N 个文本聚类到这 K 个质心上,求得新的质心之后再迭代计算。
但是这样的算法时间复杂度在我们处理的规模上会变得比较大。
其中距离或者说相似度的定义为向量空间上两个向量的余弦值:
n
k
jk
n
k
ik
n
k
jk ik
j i
W W
W W
d d S
1
2
1
2
1
) , (
那么 K-means算法如下:
第一步:随机选取 K 个文本作为质心;
第二步:对于这 K 个文本,计算每篇文档到这 K 个质心的 S(x,dk),并归到最近的类;
第三步:重新计算每个类的质心;
第四步:反复执行第二步到第三步,直到迭代结束。
4
3.3 朴素的计算
然而对于一个实用系统,过于复杂的算法使得计算代价过高。基于同学实施的对于“人
人网”的好友“状态”的聚类分析的实验表明,对于 500 个平均长度为 20000 个词语的文本
的统计和聚类时间花费在小时级别。这显然是无法忍受的。
此外,TF/IDF 对于长时间跨度的微博话题聚类有良好的解决,但是当问题限定在一个特
定时间内,比如该时间段内只有一个话题,很可能发生话题丢失的情况。
此外,如果我们用余弦来计算两个向量之间相似性的话。由于每个向量都是很稀疏的,
其中含有大量的 0,最终余弦计算的值只会与这两个向量都存在的若干词语相关。而这样的
值通常是两个向量共同存在的词语的个数而已。
这样的话,前文所述的算法尽管有学术意义,也有比较好的表现,但是在实际应用中还
存在诸多问题。如果直接用分词之后的词语统计的方法,来获取讨论最多的词语的方法。由
后文的实验可以看出,并不会得到太差的效果。
4. 情感取向分析
4.1 情感词获得
要计算机具备识别情感的能力,从人类认知角度出发,获得句子中的情感词是第一步。
只有能够正确识别句子中某些重要词语的情感,才能够获得句子的褒贬色彩。
情感词的获得主要有两大类方法:
·人工录入
·机器学习
人工录入虽然是一个很“土”的方法,但毫无疑问,这是已知的最准确,也最灵活的方
式。通过人工录入,不仅能够获得情感词在不同词性或语境下的褒贬值,还能够打出分数,
体现某一个词的褒贬的程度。
机器学习的方法主要有三类[1]:
·由已有的词库扩展生成情感倾向词典:中文词语方面,可以在 HowNet 词典里,
将未知新词与存在的若干词计算相似性,推断情感倾向[2]。
·无监督机器学习方法:无监督的机器学习方法是通过根据词语在语料库中的同现
情况来判断紧密程度,如 Turney 利用搜索引擎计算词语之间互信息的方法[3]。
·基于人工标注语料库的学习:首先对语料库进行手工标注,利用词语共现关系、
搭配关系或者语义关系来判断词语情感倾向性。如利用词语搭配模式发现在主观性文本
中的倾向性词语和搭配关系[4]。
5
4.2 句子的情感分析
考虑到微博的特点,大多都是一句话的形式呈现,因此我们只需要考虑句子级别的情感
分析即可。此外,传统的句子情感分析通常首先要进行主客观分类。由于微博通常是个人抒
发见解的场所,所以这里默认所有的句子都是主观的。
在进行句子的情感分析的时候,一方面可以基于情感词来进行判定;一方面可以用机器
学习的方法来,如利用机器学习的方法对训练集学习得到特征集,并用来对测试文档进行分
类。[5]
4.2.1 基于句法分析树的情感分析
从人类认知情感的角度考虑,情感的识别首先是句意的识别。比如一个否定句式中的情
感词需要取反,如果只是依靠情感词识别,这样的计算会出现完全错误的结果。
基于句法分析树的方法是通过构建句法分析树,然后从树的叶子节点出发,向根节点倒
推。每个节点都会有一个情感取向值。计算的规则如下:
当节点为叶子节点:从词典中取得节点的情感值
当节点为否定结构:情感值为孩子情感值平均后取反
当节点为偏正结构:情感值为被修饰部分情感值乘以修饰程度
当节点为转折结构:只取后面分句
图 2 句法分析树 6
如图所示的句法分析树,我们在“新”附情感值为+1,这样“新中国”为+1, “伟大”
附情感值为+1,那么“新中国的伟大篇章”为+2。之前没有否定结构,也没有偏正结构、转
折结构,这个情感值就依次传递上去,得到情感值为+2。
该方法具有比较好的扩展性。当问题变得复杂时,比如说分类为“喜”,“怒”,“哀”,
“惧”。可以用模糊数学的方法,将情感值定义为一个模糊值(a,b,c,d)分别表示归属于四个类
别的隶属度。当遇到修饰限定词或者否定词时,用(ka,kb,kc,kd)来表示。当遇到多个情感词
重叠时,用模糊数学的与运算来计算合成的情感值。
在实现时,情感词的获得简单的使用了 HowNet 情感词表。
COAE2008 对于情感倾向评测没有句子粒度,而 COAE2009 的句子粒度的情感倾向分为
了四类。这里采用 COAE2008 的语料库 40000 篇文档中的一部分进行评测。
处理的方法是对每一个文档取第一句进行计算情感值,情感值为 0 的为客观,正为褒义,
负为贬义。人工标记作为参照。
计算得到的
P@100 在 0.32,在 COAE2008 文本粒度的评测中处于中游水平。
其中褒义句、贬义句、客观句的详细测试结果如下:
表 1 基于句法分析树的句子倾向性测试结果
Precision Recall F1
褒义 0.382 0.406 0.394
贬义 0.102 0.131 0.115
客观 0.284 0.633 0.392
可以看到其中贬义的结果非常差,主要原因是因为很少发现贬义词出现在贬义句中。甚
至有些贬义句中会使用褒义词来起到反讽的效果。 这也与中文特点有关, 尤其在测试语料中,
很少有直白的贬义。但是在后文基于微博的实验中,这样的情况会稍好一些。
4.2.2 朴素的情感分析
然而基于句法分析树的方法有很大的缺陷,首先时间开销非常大。对于这样小规模的评
测耗时达小时级别。这也是无法应用到该系统的主要缺陷。
其次,由于中文语法并不是非常严格,很多时候呈现一种弱语法的现象。尤其在微博领
域,这些口头语很难进行语法分析。即使语法分析完成,由于中文弱语法特点,所定义的规
则也很少被使用,最后这个方法就直接退化成了正负向情感词的计数方法。
那么我们不妨就直接进行正负向情感词的记数。其中正负向情感词表由 HowNet 提供。
包括 3116 个负向评价词;1254 个负向情感词;3730 个正向评价词;836 个正向情感词。
7
5. 系统实现
开发环境:JDK 6
第三方插件:FudanNLP 0.95, HttpClient 3.1, JFreeChart 1.0.13
本系统主要功能分为三部分:网络信息爬取;话题识别;情感分析。
系统结构简单的分为 UI 和 Kernel 两层。其中 UI 层提供用户友好的可视化界面。Kernel
层实现了信息爬取、话题识别、情感分析的算法。
新浪微博对于搜索只开放了有限的功能。对于未登录用户,只有在限定的几个关键词下
搜索,并且只能获得第一页的少量几条微博。这对于系统产生了严重的影响。主要体现在:
有限的关键词使系统功能受限;少量的微博使得话题获取和情感识别的精度变低。比如“复
旦黄山门”事件中,大量的微博都含有黄山字样,但是直接爬取到的十条里面,只有两条含
有该词。
尽管技术上存在缺陷,但系统依然是可以实施的。通过 HttpClient 可以模拟浏览器下载
页面,之后对于获得的 HTML 代码进行分析,获得含有条目数的内容,以及条目内容。利用
正则表达式剔除微博内容中的 HTML 标签和链接。
在话题识别方面,首先利用 FudanNLP的分词功能对句子分词,去除停用词之后,将词
语加入到字典中,遇到已加入的计数器加一。最后取出出现频率最高的词。以此实现话题识
别。这样的问题是会出现很多频繁出现的词。比如输入“复旦”会出现“大学”、“学生”等。
但是如果使用 TF/IDF 在某些事件爆发时,在小时间段搜索时,会失去很多关键词。如“黄
山门”事件爆发时,这段时间几乎所有微博都含有“黄山”。
需要注意的是,在测试过程中,我发现很多单字被作为话题,如“张宁海”被错误分词
之后出现的“张” ,成为复旦黄山门事件中的话题。还有诸如“想”等单字,这些字是无法
被理解的,因此在话题识别中,我将单字全部去掉。
最后利用查询情感词表对情感值进行简单加和的方法来获得句子的情感值, 情感词表使
用的是 HowNet 情感词表。这主要是基于快速求解问题的效率考虑。虽然这样的方法精度比
较低,但是也能在后面的实验中一定程度的反应客观褒贬性。尽管有一些小的错误,但是效
率却是最高的。
8
6. 实验
针对关键词“复旦”,以下是限定不同时间段得到的实验结果。
图 3 复旦-2010-12-10~2010-12-30 微博数量变化
图 4 复旦-2010-12-10~2010-12-30 情感倾向变化 9
这段期间,复旦发生了“黄山门”时间,18 个驴友在黄山被困,一名民警张宁海营救
时不幸牺牲。在话题识别时,成功识别出黄山、民警、18 等关键词。此外由于本系统过滤
了单字,观察中间结果可以发现,“张”也有很高的重复率。这说明“张宁海”在分词过程
中被分成了两个词。可以看出本系统对于话题识别还是有一定能力的。不足的是,一些词语
例如“大学”、“学生”、 “新闻”、“同学”、“大学生”、“觉得”、“中国”并未能提供有效信息。
从关注度变化观察,12月 14 日到12 月 19 日,微博数量非常高,也体现了社会事件的
一般关注期为一周左右。这期间的情感趋向在 12 月 14 日到 12 月 21 日除两天之外,均为
负值。但是这两天为正值的原因是,中文在表否定时常用的反讽,比如“复旦又出名了” ,
这个句子被判定为正向情感句。
图 5 复旦-2010-09-20~2010-10-10 微博数量变化
10
图 6 复旦-2010-09-20~2010-10-10 情感倾向变化
这段时间,复旦大学陈果老师走红,关键词“老师”、“教师”、“魅力”、“商课”等显示
了这一点。“商课”其实是“情商课”被分词错误的结果。另外“陈果”未出现,估计是因
为“陈果”被拆分为两个词。情感倾向大多为正,少量几个负值的原因并非陈果事件;而是
其他诸如“再多的困难也能克服”之类的微博条目。
图 7 复旦-2010-01-01~2011-01-15 微博数量变化 11
图 8 复旦-2010-01-01~2011-01-15 情感倾向变化
可以看到除去“黄山门”这段时间,复旦的关注度略微上升,这可能主要因为新浪微博
的用户数量增加,另外“街旁网”使用人数增多。 “街旁网”是在微博前标注自己的所处位
置的网站,这也是增加问题复杂性的一个因素, 因为这些含有“复旦”的微博并不在讨论“复
旦”,只是因为增加了这条标签而已。
“黄山门”使复旦关注度激增,这也显示了该事件的严重影响,比起复旦其他事件的影
响,这一条坏消息更给人更深的印象。
7. 结论
作为一个用于舆情分析的系统,该系统能够完成微博信息抓取,话题获得,关注度曲线
绘制,情感倾向曲线绘制的功能。其中话题获得和情感倾向计算采用了最朴素的算法,在前
文已经分析了为什么采用最简单的算法。事实上,这最朴素的算法能够很大程度上实现我们
所需要的功能,在实验中也验证了这点。
本系统能够较好的完成一些简单的任务,并且在情感分析方面有一定的正确性。然而,
作为一个实用系统还差得很远。主要有以下几个问题:
12
·新浪微博提供的搜索服务有限:
在未登录情况下,直接使用新浪微博搜索只能限定在有限的几个关键词内,而且一
次只能访问一页。尽管新浪微博提供了相关搜索功能的 API,但这只对少量合作者开放。
作为一个学生,无法获得这个 API 权限是限制该系统功能的主要原因。
·话题获取功能不完善:
这主要是三个原因,一是普通权限能获得的微博数量有限,如果能获得全部微博并
进行统计归类,一定能获得很好的效果;二是 FudanNLP 的分词功能不尽如人意,例如
标点或者符号会与汉字分作一个词、人名不能很好识别等;三是算法需要再进行调整,
如利用 FudanNLP的实体名识别 NER功能,只对实体名称进行统计,但我未能找到有效
使用 NER功能的方法。
·情感识别的问题:
最主要原因是情感词词典不理想。HowNet 提供的词典中,有大量的情感词人工就
无法判定,如“和”作为褒义词。其次,HowNet 词典只提供了笼统的正负向情感,并
未对程度进行评级,精度不够高。通过前文所述的获取情感词的方法,或许能够改善这
方面的问题。
参考文献
[1] 黄萱菁,赵军.中文文本情感分析.中国计算机学会通讯.2008:第 4 卷第 2 期
[2] 朱嫣岚,闵锦,周雅倩,黄萱菁,吴立德.基于 HowNet 的词汇语义倾向计算.中文信息学
报,2006 年第 1 期
[3] Turney P. Thumbs up Or Thumbs Down? Semantic Orientation Applied to Unsupervised
Classification of Reviews. In: Proceedings of ACL-2002. 2002. 417–424.
[4] J. Wiebe, J. M. A corpus study of evaluative and speculative language. In Proceedings of the
2nd ACL SIG on Dialogue Workshop on Discourse and Dialogue (Aalborg, Denmark)
[5] Pang. B, L. Lee, and S. Vaithyanathan. Thumbs up? Sentiment. Classification using Machine
Learning Techniques. In: Proceedings of EMNLP 2002
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191607.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...