使用机器学习算法打造一个简单的“微博指数”
欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~
作者:林浩威
前言
随着人工智能的大热,越来越多的小伙伴们开始投身到机器学习的大潮中。作为其中的一员,我对此也是极有兴趣的。当然我更感兴趣的,是怎么利用这些有趣的算法,来实现脑海里各种奇奇怪怪的点子。写这篇文章的契机,是我在某天看完腾讯指数的推送后,突发奇想,想自己实现类似这样的一个东西,感觉蛮好玩的。然后就在上周末,利用了一些空余时间,写了一个简单的舆情监控系统。
思路
基于机器学习的舆情监控,这样的一个想法,其实可以有很大的想象空间,可以做很多有意思的事情。比如可以关注你喜欢的明星或电影的口碑情况,或者了解你所关注股票的舆论变化,甚至预测其未来的走向等等。但我决定先从最简单的例子入手:就是从新浪微博中,识别出关于腾讯的正面或负面的新闻。本文的论述也将围绕这个场景展开,不会涉及太多复杂难懂的东西,可以说是很简单的一个东西,请放心阅读。
技术上的实现,主要是用sklearn对采集到的微博文本做分类训练,关于sklearn就不需要介绍了,很有名的一个python机器学习工具,如果想详细地了解可以移步它的官网:http://scikit-learn.org。
下面是我们接下来需要做的所有工作:
环境
机器:mac
语言:python
第三方库:sklearn、jieba、pyquery 等
数据采集
数据采集是对我来说是最好做的一步,其实就是写爬虫从各大网站收集大量的信息,存起来,以便我们后续分析处理。如下图:
因为这只是一个试验性的兴趣项目,没办法花太多时间投入,所以我这次只打算从微博的搜索结果中,取1000条数据来分析。当然如果有可能的话,数据越多越好,训练出来的模型就越准确。
采集的页面是百度的微博搜索结果页:https://www.baidu.com/s?wd=腾讯&pn=0&tn=baiduwb&ie=utf-8&rtt=2
用python对该页面逐页抓取,然后用pyquery模块对抓取到的页面进行解析,得到一条条的微博文本。下面贴下这个页面的解析代码:
人工处理
这一步是最苦逼也是最花时间的一步,我们需要把采集到的数据,一条条精确地人工分类整理好,才能给后续的算法训练使用。如果你的场景在网上能找到现成的训练数据集,那么恭喜你已经节省了大把时间,但大多数情况还得自己来,所有脏活累活都在这了。而且人工分类的准确性,也决定了训练出来的模型的准确性,所以这一步的工作也是至关重要的。
我们的目标是把消息分为“正面”、“负面”和“中性”三个类别。首先我们要先给这三个类别下一个明确的定义,这样在分类的时候才不会迷茫。我个人给它们下的定义是:
正面:有利的新闻、积极正面的用户言论;
负面:不利的新闻、消极反面的用户言论;
中性:客观提及的新闻、不带感情色彩的用户言论。
按照上面的标准,我们把采集到的1000条微博一一分类标记好。
文本预处理
采集过来的微博文本,带有很多无效的信息,在开始训练之前,我们需要对这些文本做预处理,并保存为sklearn能接收的数据,主要工作包括:
1、去杂质,包括表情符号、特殊符号、短链接等无效信息,这里用正则过滤掉即可,不再详细描述;
2、保存为文本文件,因为sklearn要求训练数据以特定的格式存放在本地目录,所以我们需要用脚本对原数据进行处理,目录格式如下:
train:存放待训练的数据,子目录名称为分类名,子目录下存放训练文本文件,文件名随意,内容为单条微博文本;
test:存放带测试的数据,子目录名称随意,在子目录下存放测试文本文件。
建议训练集和测试集按8:2的比例划分,用python自动生成以上的本地文件。
3、分词,因为微博的数据大部分都是中文,所以推荐用jieba分词,对中文的支持比较给力,效果也很好。支持自定义词典,支持返回指定词性的分词结果,可以去除一些停用词和语气助词等。使用起来也很简单,这里不详细介绍,有需要可以访问它的github地址:https://github.com/fxsjy/jieba
算法选择
准备好训练数据之后,我们就可以开始训练了,为此我们需要选择一个合适的分类算法。但机器学习算法那么多,如果一个个去测试对比,将花费我们不少精力。幸好sklearn已经考虑到了这个问题,并提供了一个算法选择方案。通过把多个算法的运行结果进行图形化对比,可以很直观的看到哪个算法比较合适。
这个是官方提供的测试代码:http://scikit-learn.org/stable/auto_examples/text/document_classification_20newsgroups.html#example-text-document-classification-20newsgroups-py
把这个官方案例的数据输入部分替换成自己的即可。结果如下图:
综合运算效率和得分情况,我选择了LinearSVC算法(SVM)来作为我的训练算法。
训练
文本分类的训练主要有以下4个步骤:
这4个步骤 sklearn都已封装了相应的方法,所以使用起来极其方便。参考如下代码:
注:以上代码为了方便展示,把模块引入也放到方法内部了,仅作参考
应用
最后就是对训练好的模型进行测试和应用。
通过已有的模型,对新的数据进行预测,代码如下:
注:本代码只是展示用,仅作参考
打印出来的部分结果见下图:
经统计,预测的准确率为95%,该模型算出的当天腾讯相关的舆情如下:
结语
本文只是记录下我这两天的一些想法和试验过程,没有涉及太多代码实现或者其他高深的算法,相信不难看懂。如果有人感兴趣的话,后面我可以把源码整理完发布出来。
感谢阅读!
相关阅读
通过一个 kaggle 实例学习解决机器学习问题
机器学习之决策树与随机森林模型
一个框架解决几乎所有机器学习问题
此文已由作者授权腾讯云技术社区发布,转载请注明文章出处
原文链接:https://cloud.tencent.com/community/article/515228
使用机器学习算法打造一个简单的“微博指数”相关推荐
- 十大机器学习算法的一个小总结
在公众号看到来一篇不错的文章,讲解机器学习算法的,感觉挺好的,所以这里对常用的机器学习算法做一个小的总结, 然后根据学习李航老师的<统计学习方法>做得笔记,对这些算法进行补充. 简介 ...
- 用CSS和JS打造一个简单的图片编辑器
用CSS和JS打造一个简单的图片编辑器,本文主要是利用CSS的filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节. CSS filter 我们首先 ...
- python程序30行_30行Python代码,打造一个简单的微信群聊助手,简单方便
大家都知道,最近代码君迷上了Python,一直在研究这门语言,还是那句话,人生苦短,我学Python,今天代码君要教大家一个黑科技,30行代码实现自己定制的微信群聊助手,这个助手有什么用呐,就是用来活 ...
- 自己编写一个简单的微博爬虫
自己编写一个简单的微博爬虫 很多做社交媒体数据分析的同学需要采集一些新浪微博上的数据,新浪微博虽然有提供api,但免费的api对获取的数据项和获取的频率都有很大的限制,商业版api据说限制较少,但是作 ...
- python关于七巧板的代码_Css打造一个简单的静态七巧板
偶然在微博上看到用css写一个七巧板,正好也有一些源代码,于是就试着敲了敲. 主要是利用了css3的transform,实现平移,旋转,变形,直接用看到的代码敲出来之后有些问题,因为宽度上下面绿色的三 ...
- Css打造一个简单的静态七巧板
偶然在微博上看到用css写一个七巧板,正好也有一些源代码,于是就试着敲了敲. 主要是利用了css3的transform,实现平移,旋转,变形,直接用看到的代码敲出来之后有些问题,因为宽度上下面绿色的三 ...
- 运用HashMap和ArrayList打造一个简单的带文件的控制台学生管理系统(附上类及类方法的思维导图+控制台运行界面截图+源代码)
文章目录: 一.本文由来 二.适合人群 三.类及类方法思维导图 四.控制台运行界面截图 五.项目源代码链接 六.后记 七.再回首 一.本文由来 今天是2020年1月23日.因为在2019年上半学期Ja ...
- 标题相似度算法_一个简单的计算文章相似度功能!
在做文章系统的时候,很多时候需要为这篇文章推荐最相近的文章. 解决思路是:给文章设定关键词然后模糊查询进行匹配.找到包含这个关键词的标题,然后给显示出来,作为最接近的文章. 但是有问题:这样的文章,排 ...
- 好程序员web前端分享用CSS和JS打造一个简单的图片编辑器
本文主要是利用 CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节. CSS filter 我们首先来探讨一下 filter. 首先来说 ...
- [DIV/CSS] 用CSS和JS打造一个简单的图片编辑器
本文主要是利用CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节. CSS filter 我们首先来探讨一下filter. 首先来说明一 ...
最新文章
- 巴特沃斯滤波器应用场合_巴特沃斯数字低通滤波器设计及应用
- oracle 叠加代码写法,利用st_geometry进行图形叠加分析
- android 开源_Android开源如何使其成为移动市场的领导者
- 闪迪内存卡软件测试,闪迪存储卡怎么样
- 《Android移动应用基础教程》之川菜菜谱
- 普通人最应该具备的素质是什么,韧性
- 怎样修改电脑时间同步北京时间
- matlab里的subs,急询:Matlab中 subs(S)的应用疑问?
- Lucas-Kanade 20 Years On 正反向/累加/合成求解算法
- 百度地图定位不准的问题
- App工厂之痛:一个知识问答社区的死亡样本
- 松下A6伺服速度控制模式
- 女大学生出轨行为心理[组图]
- java 同比数据怎么算的_有当日数据和去年全年数据,如何通过公式做每日同比?...
- [统计学笔记] (八)分类数据分析
- python tornado异步_python tornado异步性能测试
- 3.16 使用历史纪录画笔工具 [原创Ps教程]
- Nero 7 Premium Reloaded 7.8.5.0
- compact紧凑算法思想
- Sicily 2500---看风景
热门文章
- 我用一根网线,制霸了宿舍的网络!
- vs2019专业版本 vtk安装
- 小白版教您如何使用SOLIDWORKS MBD
- 【安卓按键精灵自动取色(可用于比色,多点找色,找图实现)】
- html文本框显示当前时间,javascript 在文本框中显示系统当前日期(年-月-日 时:分:秒)...
- Python解析xml文件详解
- 反恐精英代码_CS:GO源代码泄露;腾讯6月举办游戏发布会;侍魂:晓同名主题曲公布...
- 【ajax】6.IE缓存问题解决
- 中国各省份中英文,Json格式
- 东芝服务器报错误代码维修,东芝复印机错误代码和维修代码