使用机器学习算法打造一个简单的“微博指数”

前言

随着人工智能的大热,越来越多的小伙伴们开始投身到机器学习的大潮中。作为其中的一员,我对此也是极有兴趣的。当然我更感兴趣的,是怎么利用这些有趣的算法,来实现脑海里各种奇奇怪怪的点子。写这篇文章的契机,是我在某天看完腾讯指数的推送后,突发奇想,想自己实现类似这样的一个东西,感觉蛮好玩的。然后就在上周末,利用了一些空余时间,写了一个简单的舆情监控系统。

思路

基于机器学习的舆情监控,这样的一个想法,其实可以有很大的想象空间,可以做很多有意思的事情。比如可以关注你喜欢的明星或电影的口碑情况,或者了解你所关注股票的舆论变化,甚至预测其未来的走向等等。但我决定先从最简单的例子入手:就是从新浪微博中,识别出关于腾讯的正面或负面的新闻。本文的论述也将围绕这个场景展开,不会涉及太多复杂难懂的东西,可以说是很简单的一个东西,请放心阅读。

技术上的实现,主要是用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%,该模型算出的当天腾讯相关的舆情如下:

结语

本文只是记录下我这两天的一些想法和试验过程,没有涉及太多代码实现或者其他高深的算法,相信不难看懂。如果有人感兴趣的话,后面我可以把源码整理完发布出来。

感谢阅读!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

林浩威的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏新智元

【Science】破解密码“AlphaGo”诞生,训练Gan破解27%LinkedIn测试集密码

【新智元导读】一项新的研究旨在使用生成对抗网络(GAN) 来加快密码破解的速度。斯蒂文斯理工学院的研究人员用类似“AlphaGo”的方法,利用超过 4300 万...

2756
来自专栏AI科技大本营的专栏

用好这几款炼丹利器,调参从此得心应手

来源:PaperWeekly ▌01. Live CV 实现显示结果的CV开发环境 Live CV 是一个用于实现显示结果的计算机视觉算法开发环境,基于 Qt...

4266
来自专栏服务端技术杂谈

双管齐下:同时设计 iOS 和 Anroid

不管你是在家,在公司,还是在设计师工作室工作,互联网企业都会找你去给他们设计 App。为了满足所有顾客的需要,这些企业通常需要同时开发运行在 Android 和...

3275
来自专栏DHUtoBUAA

基于电子海图的水面无人艇全局路径规划

Research and Implementation of Global Path Planning for Unmanned Surface Vehicle...

3035
来自专栏有趣的Python

1-机器学习启蒙- Python基础语法与工具

机器学习正在改变世界 以前的机器学习观点 ? 我为什么学习机器学习?机器人:人工智能应用。 ? 亚马逊零售推荐,Google广告。电影推荐,音乐推荐,社交推荐。...

2987
来自专栏应兆康的专栏

Andrew Ng - 《Machine Learning Yearning》 Chapter 15-19

2201
来自专栏腾讯大讲堂的专栏

设计狮与程序猿的“色色相惜”——空间配色大揭秘

作者:王德尉;勤劳的金牛男,作为视觉设计师,爱好除了上班之外还有自拍、画画。 故事是这样的 过去空间的配色很多,每次提取确实如同解密一样的充满“惊喜”。 亮瞎眼...

1919
来自专栏AI科技大本营的专栏

我们从250个机器学习开源项目中挑出了Top 10,Github平均star979

在过去一个月中, Mybridge 从 250 个机器学习开源项目中挑选出了 Top 10。Mybridge AI 比较了这期间发布的新项目和重大项目,然后依据...

793
来自专栏MixLab科技+设计实验室

从网易《初心》H5里学到的一些

这篇文章可以作为之前写的一篇《技能之H5》的补充知识。 1、拖放 HTML5 标准的组成部分。 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放。 ...

3226
来自专栏机器学习养成记

《无问西东》豆瓣短评分析

《无问西东》讲述了四代人清华人,在矛盾与期待中不断找寻自我、砥砺前行的故事。上映后得到了广泛的关注,也引发了强烈的讨论。本文首先通过爬虫技术,从豆瓣上获得相关短...

3389

扫码关注云+社区