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

欢迎你们前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~html

做者:林浩威 python

前言

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

思路

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

技术上的实现,主要是用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能接收的数据,主要工做包括:

一、去杂质,包括表情符号、特殊符号、短连接等无效信息,这里用正则过滤掉便可,再也不详细描述;
二、保存为文本文件,由于sklearn要求训练数据以特定的格式存放在本地目录,因此咱们须要用脚本对原数据进行处理,目录格式以下:

 

train:存放待训练的数据,子目录名称为分类名,子目录下存放训练文本文件,文件名随意,内容为单条微博文本;

test:存放带测试的数据,子目录名称随意,在子目录下存放测试文本文件。

建议训练集和测试集按8:2的比例划分,用python自动生成以上的本地文件。

三、分词,由于微博的数据大部分都是中文,因此推荐用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 实例学习解决机器学习问题

更快更准的异常检测?交给分布式的 Isolation Forest 吧

机器学习之决策树与随机森林模型

此文已由做者受权腾讯云技术社区发布,转载请注明文章出处 原文连接:https://cloud.tencent.com/community/article/515228

相关文章
相关标签/搜索