Twitter情感分析及其可视化

2018 年 3 月 20 日 数据挖掘入门与实战

 向AI转型的程序员都关注了这个号👇👇👇


大数据挖掘DT数据分析  公众号: datadw


本文 github 地址

在公众号 datadw 里 回复 推特 即可获取。


主要是基于twitter的内容有:

  • 实时热点话题检测

  • 情感分析

  • 结果可视化

  • Twitter数据挖掘平台的设计与实现


实时热点话题挖掘

Twitter的数据量是十分庞大的。为了能够了解Twitter上人们在谈论些什么,我们希望能够有一种有效的方 式来获取 Twitter 实时的热点话题。要求该方式:

  1. 能处理流数据并且对模型进行周期性的更新 。

  2. 产生的主题 与过去的 主题有关联 以便 观测话题的演变 。

  3. 资源占用稳定,不随时间增大而以便保证效率和对新话题的敏感 。

LDA模型

首先想到的就是主题模型。

2003年,D.Blei等人提出了广受欢迎的LDA(Latentdirichlet allocation)主题模型[8]。LDA除了进行主题的分析外,还可以运用于文本分类、推荐系统等方面。

LDA模型可以描述为一个“上帝掷骰子”的过程,首先,从主题库中随机抽取一个主题,该主题编号为K,接着从骰子库中拿出编号为K的骰子X,进行投掷,每投掷一次,就得到了一个词。不断的投掷它,直到到达预计的文本长度为止。简单的说,这一过程就是“随机的选择某个主题,然后从该主题中随机的选择词语”。按照之前的描述,一篇文档中词语生成的概率为:


可以用矩阵的乘法来表示上述的过程:

 

回到LDA模型来说,LDA模型的输入是一篇一篇用BOW(bag ofwords)表示的文档,即用该文档中无序的单词序列来表示该文档(忽略文档中的语法和词语的先后关系)。LDA的输出是每篇文档的主题分布矩阵和每个主题下的单词分布矩阵。简而言之,LDA主题模型的任务就是已知左边的矩阵,通过一些方法,得到右边两个小矩阵。这里的“一些方法”即为LDA采样的方法,目前最主要的有两种,一种是变分贝叶斯推断(variationalBayes, VB),另一种叫做吉布斯采样

(Gibbs Sampling),其中吉布斯采样也被称为蒙特卡洛马尔可夫 (Markov Chain MonteCarlo,MCMC)采样方法。


总的来说,MCMC实现起来更加简单方便,而VB的速度比MCMC来得快,研究表明他们具有差不多相同的效果。所以,对于大量的数据,采用VB是更为明智的选择。

Hoffman OLDA

虽然VB的速度相对而言比较快,但是对于巨大的数据来说,VB计算量仍十分巨大的,对此,Hoffman提出了Online variational Bayes (VB)算法(下面简称为OLDA),将数据集其分为一些小的batch, 然后更新,运算速度得到了巨大的提升。

 

WOLDA

虽然Hoffman提出的OLDA算法可以对后加进来的文档不断的更新,但是,该算法仍不能称得上是在线的算法。原因如下:

  1. 该算法采用静态词库(忽略不在词库中的词),而对于Twitter来说,新词不断涌现,缩写词、网络流行语、特殊事件人名、地名频繁出现,基本无法预测。即使我们拥有一个囊括了所有词的词库,那么这个词库也必然是巨大的,造成矩阵过于稀疏,运算效率低下。

  2. OLDA算法对旧话题“淡忘”速度越来越慢。如果一开始出现了所谓的“离题”(topic drift)现象,结果将会十分差劲,这不利于新话题的检测。

为此,改进的算法命名为WOLDA。

WOLDA采用动态的词库,(滑动时间窗口)

  • 时间分为一个个时间片

  • 只保留时间窗口L内的词 && 词频 > min_df(预设值)

对于1~L个时间片,对词频不小于min_df的词作为当前WOLDA的词库。

第L+1个时间片到来时,删除第1个时间片的文档,对第2个到第L+1个时间窗口内的文档重新计算词频,并将词频不小于min_df的词作为当前WOLDA的词库。

模型的更新方法为,对于新词,进行随机的初始化,而对于原本存在词库中的词有:

贡献因子C使得模型具有事件演变的能力,它将连续时间切片上的前后模型相结合。在具体的实现上,对于给定贡献因子C,我们只需要反解出OLDA中的更新次数t,将OLDA的更新次数重新设置为t即可,公式如下:



此外,还需要更新OLDA相应参数,如单词总数W和文档长度D。

算法描述如下:




最具有代表性的推文计算

运行WOLDA算法后,我们得到了每个主题下对应的主题词,主题词有时候对于主题的描述不够直观,为此我们希望从该主题下,能找到最具有代表性的推文,用来帮助解释和说明该主题的内容。本小节提出几种最具有代表性的推文的计算方法,并在之后的实验中加以对比。

KL-mean

KL散度(Kullback–Leibler divergence)又称为相对熵(relative entropy),它可以用来衡量两个概率分布的相似程度。对于离散型的随机变量,其概率分布P和Q的KL散度定义如下:


通常情况下KL散度是非对称的,因此这里采用KL-mean方式(求P和Q KL散度以及Q和P KL散度的均值)



使用KL-mean距离计算最具有代表性的推文伪代码如下:

余弦距离

余弦距离常常用来衡量相似度(通过计算两个向量夹角的余弦值)。其定义如下:



使用余弦距离计算最具有代表性的推文的方法与KL散度的方法过程类似,只不过最后采用了余弦距离来计算每条推文与其主题中心的距离。

最大熵

在信息学中,熵(Entropy)常常被用来衡量信息不确定度的大小,信息的不确定度,表明其信息量也越大,同时熵也越大。熵的计算公式如下:

 

情感分析

为什么要进行情感分析?Twitter的作为一个微博客服务,它的推文中又充斥着大量的观点见解,进行情感分析也同样具有广阔的应用场景,比如说以下的这个方面:

  1. 情感分析可以帮助用户做出是否购买的决策。例如,消费者在犹豫是否购买产品时,会很自然的去查看其他人对于该商品的评价。如果“好评”居多,该消费者可能就会进行购买;反之,如果“差评”占大多数,那么该消费者一般而言就不会进行购买了。如果能针对Twitter这种既有强时效性又有广泛话题领域的社交媒体进行情感分析,那将给用户带来更多的便利。

  2. 情感分析还可以帮助企业进行市场调研。企业在推出一款新的产品之后,可以通过情感分析来从大量的用户评价中得到有用的信息,如用户喜欢什么,不喜欢哪一方面,对公司的产品和服务有哪些正面或负面的影响。从而企业可以了解自身的优势和不足,可以更好的制定相应的措施进行服务的改进,从而在激烈的市场竞争中占据主动地位。

  3. 舆情监控。由于用户可以在社交媒体上相对自由的发表自己的观点,这使得社交媒体成为了舆情话题产生和传播的重要方式。通过对社交媒体的情感分析,可以为政府了解民意、引导舆论提供有效的工具。对于负面的消息,可以较为及时的安抚好民众的情绪,避免事态进一步恶化。同时,政府也可以制定相应的策略来改善现有的服务。

  4. 事件预测。随着互联网发展,越来越多的民众愿意到网上发表自己对某一事件的看法,无论是在诸如Twitter、新浪微博这样的微博客,还是在贴吧、知乎等站点上。一个典型的例子就是最近阿里人工智能运用神经网络、情绪感知等技术对《我是歌手》第四季总决赛的歌王进行了成功的预测。此外,Twitter这一个平台也常常被拿来预测选举、股票等。

情感分析方法

本文采用的情感分析可以说是一个标准的机器学习的分类问题。

目标是给定一条推文,将其分为正向情感、负向情感、中性情感。

预处理

  • POS标注

    • CMU ArkTweetNLP

  • 字母连续三个相同

    • 替换 “coooooooool”=>“coool”

  • 删除非英文单词

  • 删除URL

  • 删除@

    • 删除用户的提及@username

  • 删除介词、停止词

  • 否定展开

    • 将以”n’t”结尾的单词进行拆分,如”don’t” 拆分为”do not”,这里需要注意对一些词进行特殊处理,如”can’t”拆分完之后的结果为”can not”,而不是”ca not”。

  • 否定处理

    • 从否定词(如shouldn’t)开始到这个否定词后的第一个标点(.,?!)之间的单词,均加入_NEG后缀。如perfect_NEG。 “NEG”后缀

特征提取

  • 文本特征

    • 否定词出现后,句子的极性可能会发生翻转。为此,把整个句子否定的个数作为一个特征

    • 这是在预处理中对字母重复三次以上单词进行的计数。字母重复往往表达了一定的情感。

    • 在句子中的感叹号和问号,往往含有一定的情感。为此,将它作为特征。

    • 1~3元模型

    • 使用出现的次数而非频率来表示。不仅是因为使用是否出现来表示特征有更好的效果[16],还因为Twitter的文本本身较短,一个短语不太可能在一条推文中重复出现。

    • N-grams

    • 感叹号问号个数

    • 字母重复的单词个数

    • 否定的个数

    • 缩写词个数等

    • POS 标注为[‘N’, ‘V’, ‘R’, ‘O’, ‘A’] 个数(名词、动词、副词、代词、形容词)

  • 词典特征(本文使用的情感词典有:Bing Lius词库[39]、MPQA词库[40]、NRC Hashtag词库和Sentiment140词库[42]、以及相应的经过否定处理的词库[45]

    • 推文中的单词在情感字典个数 (即有极性的单词个数)

    • 推文的 总情感得分:把每个存在于当前字典单词数相加,到推文的 总情感得分:把每个存在于当前字典单词数相加,到推文的 总情感得分:把每个存在于当前字典单词数相加,到推文总分,这个数作为一特征。

    • 推文中单词最大的正向情感得分和负。

    • 推文中所有正向情感的单词分数 和以及 所有负向情感单词的分数和。

    • 最后一个词的分数

  • 表情特征

    • 推文中正向 情感 和负向的表情个数

    • 最后一个表情的极性是 否为正向

特征选择

本文 特征选择主要是针对于 N-grams 特征 的,采用方法如下:

上述算法中滤除了低频的词,因为这可能是一些拼写错误的词语;并且,删除了一些极性不那么明显的词,有效的降低了维度。

分类器选择

在本文中,使用两个分类器进行对比,他们均使用sklearn提供的接口 。第一个分类器选用SVM线性核分类器,参数设置方面,C = 0.0021,其余均为默认值。第二个分类器是Logistic Regression分类器,其中,设置参数C=0.01105。

在特征选择上,min_df=5, threshold=0.6。

实验

  • SemEval(国际上的一个情感分析比赛)训练数据和测试数据

  • 评价方法采用F-score

  • 对比SemEval2016结果如下

测试集名 SVM(F-score/Rank) Logistic Regression(F-score/Rank)
2013 Tweet 0.701 / 5 0.714 / 3
2013 SMS 0.719 / 1 0.722 / 1
2014 Tweet 0.693 / 8 0.692 / 8
2014 Tweet sarcasm 0.478 / 6 0.478 / 6
2014 Live Journal 0.712 / 4 0.726 / 2

 

本文来自 微信公众号 datadw  【大数据挖掘DT数据分析】


数据可视化

为什么要进行数据可视化呢?因为可以更快速、更轻松的提取出数据的含义。例如

  • 将3标注为红色容易找出所有的3

    •   

  • 画柱状图容易找数组【 321, 564, 1391, 245, 641, 798,871 】中的最大值

简单的统计结果可视化

Hashtag统计

由于Hashtag是用户手动添加的、用来表明当前发表的推文的主题。因此对其进行统计,然后进行可视化也是具有一定意义的。简单的说,进行hashtag统计的可以有柱状图、饼状图、趋势图三种方法。

 

地理位置信息的可视化

Twitter的API返回字段中,有几个字段是和地理位置相关的,用来表示该推文的发表位置,或者某地点和该推文相关。我们可以对地理位置信息进行统计计数。一个可视化的办法就是在地图上根据经纬度坐标画一个个的点,但是当有多个点再一个小区域的时候可读性较差,因此本文使用的是热力图。一个样例图如下:

 

话题结果可视化

在LDA主题模型中,输出结果有两个矩阵,其中一个是主题-单词矩阵,这也是本小节要探讨的可视化内容。

为了能够很好的表示出主题以及对应的单词,本文提出可以使用矩形树图(TreeMap)、气泡图(Bubble)、以及旭日图(Sunburst)来表示LDA的结果。

矩形树图

矩形树图是由一个个矩形递归组成的。

同一个颜色表示同一主题,而矩形大小表示概率大小。

在图形交互方面,矩形树图支持点击后放大查看。

 

气泡图

同一个主题同一个圈,同一个圈内的圆大小表示概率的大小。

在图形交互方面,气泡图支持点击后放大查看某一主题下的内容。

 

旭日图

旭日图它可以说是饼状图的升级版。在最内圈的数据为每个主题,同时,用不同的颜色加以区分,内圈所占的大小就反映了主题的热度。接着,对于每个主题,向外延伸出对应的主题词,每个主题词占的面积大小就反映了其概率的大小。此外,本文做出了特殊的处理,将主题词中更重要的主题词在加一层显示。

最重要的主题词计算方法为:按主题的概率从大到小排序,然后,从大到小进行遍历,对概率和进行累加,当对某一项i累加后的和大于0.4,则从第一个主题词到第i个主题词为该主题的最重要的主题词。

旭日图的用户交互为,点击某一块区域,则图形变化为某主题下的单词概率分布饼图。

 

情感分析的可视化

针对于情感分析,我们的任务是对于给定一些推文,判断其实情感类别。在分类结果完成后,我们可以对分类的结果进行统计。可以采用类似于对Hashtag的统计结果进行可视化的方法,如柱状图、饼状图,这里不再赘述。此外,还可以用“仪表盘”的方式来进行可视化。

https://www.hrwhisper.me/twitter-data-mining-and-visualization/


人工智能大数据与深度学习

搜索添加微信公众号:weic2c

长按图片,识别二维码,点关注



大数据挖掘DT数据分析

搜索添加微信公众号:datadw


教你机器学习,教你数据挖掘

长按图片,识别二维码,点关注



登录查看更多
22

相关内容

【ICML2020-西电】用于语言生成的递归层次主题引导RNN
专知会员服务
21+阅读 · 2020年6月30日
【2020新书】从Excel中学习数据挖掘,223页pdf
专知会员服务
90+阅读 · 2020年6月28日
【ICML2020】持续终身学习的神经主题建模
专知会员服务
37+阅读 · 2020年6月22日
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
288+阅读 · 2020年6月3日
和积网络综述论文,Sum-product networks: A survey,24页pdf
专知会员服务
23+阅读 · 2020年4月3日
数据标注研究综述,软件学报,19页pdf
专知会员服务
89+阅读 · 2020年2月20日
R语言自然语言处理:情感分析
R语言中文社区
16+阅读 · 2019年4月16日
文本分析与可视化
Python程序员
9+阅读 · 2019年2月28日
情感分析的新方法,使用word2vec对微博文本进行情感分析和分类
数据挖掘入门与实战
22+阅读 · 2018年1月6日
情感分析:数据采集与词向量构造方法
北京思腾合力科技有限公司
29+阅读 · 2017年12月20日
LibRec 每周算法:LDA主题模型
LibRec智能推荐
29+阅读 · 2017年12月4日
现代情感分析方法
Python开发者
13+阅读 · 2017年7月9日
基于LDA的主题模型实践(一)
机器学习深度学习实战原创交流
20+阅读 · 2015年9月9日
A Survey on Bayesian Deep Learning
Arxiv
63+阅读 · 2020年7月2日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
136+阅读 · 2018年10月8日
Arxiv
8+阅读 · 2018年4月12日
Arxiv
3+阅读 · 2018年3月21日
Arxiv
7+阅读 · 2018年1月30日
Arxiv
5+阅读 · 2015年9月14日
VIP会员
相关VIP内容
【ICML2020-西电】用于语言生成的递归层次主题引导RNN
专知会员服务
21+阅读 · 2020年6月30日
【2020新书】从Excel中学习数据挖掘,223页pdf
专知会员服务
90+阅读 · 2020年6月28日
【ICML2020】持续终身学习的神经主题建模
专知会员服务
37+阅读 · 2020年6月22日
【干货书】用于概率、统计和机器学习的Python,288页pdf
专知会员服务
288+阅读 · 2020年6月3日
和积网络综述论文,Sum-product networks: A survey,24页pdf
专知会员服务
23+阅读 · 2020年4月3日
数据标注研究综述,软件学报,19页pdf
专知会员服务
89+阅读 · 2020年2月20日
相关资讯
R语言自然语言处理:情感分析
R语言中文社区
16+阅读 · 2019年4月16日
文本分析与可视化
Python程序员
9+阅读 · 2019年2月28日
情感分析的新方法,使用word2vec对微博文本进行情感分析和分类
数据挖掘入门与实战
22+阅读 · 2018年1月6日
情感分析:数据采集与词向量构造方法
北京思腾合力科技有限公司
29+阅读 · 2017年12月20日
LibRec 每周算法:LDA主题模型
LibRec智能推荐
29+阅读 · 2017年12月4日
现代情感分析方法
Python开发者
13+阅读 · 2017年7月9日
基于LDA的主题模型实践(一)
机器学习深度学习实战原创交流
20+阅读 · 2015年9月9日
相关论文
A Survey on Bayesian Deep Learning
Arxiv
63+阅读 · 2020年7月2日
Arxiv
35+阅读 · 2019年11月7日
Arxiv
136+阅读 · 2018年10月8日
Arxiv
8+阅读 · 2018年4月12日
Arxiv
3+阅读 · 2018年3月21日
Arxiv
7+阅读 · 2018年1月30日
Arxiv
5+阅读 · 2015年9月14日
Top
微信扫码咨询专知VIP会员