使用机器学习算法创建简单的“微博索引”
优采云 发布时间: 2020-08-07 14:37欢迎来到腾讯云技术社区,以获取更多腾讯的*敏*感*词*技术实践干货〜
作者: 林浩伟简介
随着人工智能的普及,越来越多的朋友开始致力于机器学习的浪潮. 作为其中之一,我对此也非常感兴趣. 当然,我对如何使用这些有趣的算法来实现各种奇怪的想法更感兴趣. 写这篇文章的机会是,有一天,在阅读了腾讯指数的推动力之后,我一时兴起,想自己实现这样的事情. 感觉很有趣. 然后就在上周末,我用一些业余时间编写了一个简单的民意监测系统.
思考
基于机器学习的舆论监督,这样的想法实际上可以有很大的想象空间,并且可以做很多有趣的事情. 例如,您可以关注自己喜欢的明星或电影的声誉,或者了解所关注股票的舆论变化,甚至可以预测其未来发展方向. 但我决定从最简单的例子开始: 从新浪微博确定腾讯的正面或负面消息. 本文中的讨论也将围绕这一场景. 它不会涉及太多复杂和困难的事情. 可以说是一件很简单的事情. 请随时阅读.
技术实现主要是使用sklearn对采集到的微博文本进行分类. 无需介绍sklearn. 它是一个著名的python机器学习工具. 如果您想了解更多有关它的信息,可以继续阅读. 官方网站: .
这是我们接下来需要做的所有工作:
环境
机器: mac
语言: python
第三方库: sklearn,jieba,pyquery等.
数据采集
数据采集对我来说是最好的步骤. 实际上,编写爬虫程序是从主要网站采集大量信息,并将其存储以供我们后续分析和处理. 如下图所示:
因为这只是一个有趣的实验项目,所以没有办法花费太多时间,所以这次我只打算从微博搜索结果中提取1,000个数据进行分析. 当然,如果可能的话,数据越多越好,训练后的模型将越准确.
采集的页面是百度的微博搜索结果页面: Tencent&pn = 0&tn = baiduwb&ie = utf-8&rtt = 2
使用python逐页获取页面,然后使用pyquery模块解析获取的页面以获得一段微博文本. 在下面粘贴此页面的解析代码:
手动处理
此步骤是最困难且最耗时的步骤. 在将采集到的数据用于后续算法训练之前,我们需要对采集到的数据进行逐个手动分类. 如果可以在Internet上找到适合您的场景的现成的训练数据集,那么可以节省很多时间,但是在大多数情况下,您必须自己动手做. 所有肮脏的工作都在这里. 而且,人工分类的准确性也决定了训练模型的准确性,因此这一步骤也非常重要.
我们的目标是将消息分为三类: “积极”,“消极”和“中立”. 首先,我们必须首先对这三个类别给出明确的定义,以免在对它们进行分类时感到困惑. 我对它们的个人定义是:
正面: 有利的消息,正面的用户评论;
负面: 负面新闻,负面用户评论;
中性: 客观提及新闻,非情感用户评论.
根据上述标准,我们对采集的1,000个微博进行了逐一分类和标记.
文本预处理
采集到的微博文本收录很多无效信息. 在开始培训之前,我们需要对这些文本进行预处理,并将它们另存为sklearn可以接收的数据. 主要任务包括:
1. 删除包括表情符号,特殊符号,短链接和其他无效信息在内的杂质,这些杂质可以按常规规则过滤掉,因此将不进行详细描述;
2. 另存为文本文件. 由于sklearn需要将训练数据以特定格式存储在本地目录中,因此我们需要使用脚本来处理原创数据. 目录格式如下:
train: 存储要训练的数据,子目录名称为类别名称,训练文本文件存储在子目录中,文件名称为任意,内容为单个微博文本;
test: 存储测试数据,子目录的名称是任意的,并且测试文本文件存储在子目录中.
建议将训练集和测试集以8: 2的比例划分,并使用python自动生成上述本地文件.
3. 分词. 由于有关微博的大部分数据都是中文,因此建议使用解霸词分割. 对中文的支持比较强,效果很好. 支持自定义词典,支持返回指定词性的分割结果,并可以删除一些停用词和模态辅助词. 使用起来也非常简单. 我将不在这里详细介绍. 如有必要,您可以访问其github地址: / fxsjy / jieba
算法选择
准备好训练数据后,我们就可以开始训练了. 为此,我们需要选择合适的分类算法. 但是,由于拥有如此众多的机器学习算法,我们将花费大量精力进行逐一测试和比较. 幸运的是,sklearn考虑了此问题并提供了算法选择. 通过图形比较多种算法的运行结果,可以直观地看出哪种算法更合适.
这是官方测试代码: /stable/auto_examples/text/document_classification_20newsgroups.html#example-text-document-classification-20newsgroups-py
用您自己的这个官方案例的数据输入部分替换. 结果如下:
综合计算效率和评分情况,我选择了LinearSVC算法(SVM)作为训练算法.
培训
文本分类训练主要包括以下四个步骤:
Sklearn在这四个步骤中封装了相应的方法,因此使用起来非常方便. 请参考以下代码:
注意: 为了方便显示以上代码,模块被引入并放置在方法内部,仅供参考
应用
最后一步是测试并应用经过训练的模型.
使用现有模型预测新数据,代码如下:
注意: 此代码仅用于显示和参考
部分打印结果如下图所示:
根据统计,预测准确率是95%. 该模型当天计算的与腾讯有关的舆论如下:
结论
本文仅记录了过去两天我的一些想法和实验. 它不需要太多的代码实现或其他高级算法. 我相信这并不难理解. 如果有人感兴趣,我可以整理源代码并在以后发布.
感谢阅读!