手把手|教你打造一个曲风分类机器人(附视频教程)

大数据文摘作品,转载要求见文末

作者 | 张皓添@稀牛学院数据科学实训营

Music是永不落伍的话题。

每个人一定都有自己心仪又不单一的音乐风格:rap、古典、流行,那么如何管理自己的歌单呢?难道真的要自己手动一个一个去给歌曲设置类别吗(耗时耗力,真的好累!)?

不如挽起袖子撸一波代码,让AI去替我们完成这些费力不讨好的任务。

人工智能似乎总是与众多或复杂或简单的算法及或深或浅相的数学知识相挂钩,但是好在勤劳的工程师们已经为我们铺好了通天大路,sklearn,tensorflow,caffe等一系列的机器学习框架已经相当的成熟并投入使用。我们也将使用这些开源的框架来完成一次AI流程。

目标:实现歌曲风格的分类,输入一段歌词,给出所属的分类标签。

工具:Python、Scrapy、Selenium、PhantomJS、Sklearn、WordCloud、Matplotlib 、jieba。

那么我们给出机器学习的流程图:

一套完整的机器学习模型构架加预测的都是基于这个流程图的。那么我们就根据步骤一步一步来处理我们的问题。

附上教程供各位参考,时常30分钟,无法及时看到视频的读者可以直接下拉看文字版步骤。

视频内容

1.数据提取

我们的目标是对歌曲进行风格的识别,那么最最重要的一问题就是 数据从何而来? 没有数据就没有模型的地基。考虑了几个主流的音乐播放器的平台(网易、QQ、Kugou),选择了歌单分类比较清晰的网易云音乐歌单。使用爬虫去对歌单信息进行摘取。

可以看到风格分类还是蛮多的,那么我们现在要做到的就是在每个分类目录,拿到属于该风格的歌单,再从歌单中获得歌单中所包含的所有歌曲。现在就到了爬虫展现神威的时刻了,我们通过 scrapy 这个框架来实现,那么我们要怎么做恩?

① 首先先把需要的包都import进来。

import library

② 对爬虫添加请求头,其中的User-Agent使用faker去模拟。设置起始url。

headers

start_urls

③ 现在呢,我们需要的就是获得到底有哪些 分类标签

啊(Tag:流行、爵士...)通过xpath拿到标签的列表,这里我们为了节省爬取的时间只选择了3个标签。分别为 [ 古风,英伦,乡村 ]

解析标签

④ 我们浏览实际网页的时候发现

网易其实对歌单进行了分页操作,也就是说我们在爬取每个分类的时候还要知道在这个分类中的歌单共有多少页,所以接下来要去解析 每一类对应有多少页的歌单 (为了缩小爬取量只用了每个风格5页歌单,每一页包含35个歌单)

解析页数

⑤ 拿到每一页的歌单之后

我们就需要去遍历这一页的每一个歌单,并且拿到 歌单相应信息。我们需要的信息有 【歌单风格,歌单名字,歌单收藏量】分别为 【style,name,counts】

遍历一页中的每一个歌单

获得歌单信息及包含的歌曲列表,并携带这些信息继续去解析歌曲列表中包含的歌曲

⑥ 最复杂的一步来了

我们现在需要找到每首歌曲中所包含的信息,我们所需要的有【歌曲名字,歌曲歌手,歌词】其中前两个都好办,只有最后一个歌词,是没有办法直接获取到的,因为歌词是动态加载出来的,为了解决这个问题,我们引入[ selenium + phantomJS ] 来模拟浏览器行为,之所以选择phantom是因为他是无界面的浏览器无需渲染,速度更快一些。

首先在初始化的部分,将PhantomJS的设置初始化。添加headers和timeout。

然后在解析每个music的时候,使用PhantomJS来加载歌词界面,并获得到歌词。(由于获得歌词中包含<br>等这样的Html元素标签,所以通过正则手段去掉)最终将获得到的全部信息通过Pipeline输出到文件。

这样我们数据提取的过程就结束了,我们得到了一个.csv格式的文件输出,其中每一行就是一首歌及该歌曲的相应信息。部分截图如下:

.csv输出文件部分截图

最后我们就可以用这些数据去进行一些可视化绘图,比如不同风格中最受欢迎的歌手,以及每个风格中的Top10歌曲,不同风格中歌单的平均长。

可视化部分

2.数据清洗与特征选择

因为提取到数据还是相对完善,并没有出现复杂的数据清洗需求。因此只是简单的对数据做了一次去掉Nan空值的操作。因为我们做风格分类,所以我们考虑使用每一首歌曲的歌词作为特征,因此我们将爬取到的信息中的歌词和风格单提出来,其中歌词作为特征,风格作为标签。基于此构建一个牛逼的分类器,实现我们的风格分类。

通过一些复杂的正则和替换操作,拿到最终的训练数据,格式如下:

训练数据

接下来呢,我们搞个有意思的东西【词云】 我们使用WordCloud 和 jieba 来实现这个小功能。效果图如下:

古风类

英伦类

是不是还足够炫酷的样子!小插曲而已,那么接下来干点正事。我们要去构建模型了

Let us Go!!!

3.模型构建

因为分类问题嘛,我们现在只选取其中的2类进行分类,分别为【古风、英伦】。

首先因为数量不一致,会导致分类器的偏向问题,于是我们首先要对2类样本做一个剪裁。让英伦类样本数量大致与古风类样本相同。

样本数据加载并剪裁到数量一致

然后呐,我们需要去掉一些对我们分类起不到作用甚至是有干扰的单词,也就是停用词。

停用词:在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据(或文本)之前或之后会自动过滤掉某些字或词,这些字或词即被称为Stop Words(停用词)。这些停用词都是人工输入、非自动化生成的,生成后的停用词会形成一个停用词表。

我们接下来有好多种方法可以用来做这个分类

  • 第一种思路是使用词频进行分类,可以通过构建每句话的词频向量完成我们的任务。类似可见新闻文本分类,垃圾邮件等。贝叶斯对这类问题处理的已经很不错了。
  • 第二种就是使用了Word2Vec,这个工具可以根据词义构建词义向量。即语义上相近的两个单词那么他们之间的向量距离也更为相近,反之亦然。

举个例子:

香蕉,苹果 对应的词义向量的欧氏距离更为相近,而 香蕉 , 轮胎 对应的词义向量的欧氏距离要更远。

我们这里选取了第二种方案,使用word2vec对jieba拆分的单词做词义向量构建,然后将每一首歌的歌词中所包含的单词的词义向量相加并取均值,以这个最终结果向量作为该歌曲歌词的含义向量。并重新构建训练数据和测试数据。

最终,我们使用SVM分类器实现最后的模型分类

在经过SVM拟合后的结果如下:

最终训练结果

模型证实我们的分类效能有84%左右。我们仍然可以通过调参的方式去改进模型,提高准确率,这里不再提及。接下来我们可是要迫不及待的去检验一下成果了!

4.预测

哇!这一步真的是去感觉自己的劳动果实味道如何。预测是个享受的过程,中间不必赘述,咱直接跳到最后看看我们都能预测出来什么?

预测结果

就这样我们亲手实现了一波机器学习流程。回看一下我们所做的,其实数据科学离我们很近,AI离我们也没有那么遥远!加油!

原文发布于微信公众号 - 大数据文摘(BigDataDigest)

原文发表时间:2017-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ArrayZoneYour的专栏

TensorFlow强化学习入门(2)——基于策略的Agents

在本教程系列的(1)中,我演示了如何构建一个agent来在多个选择中选取最有价值的一个。在本文中,我将讲解如何得到一个从现实世界中获取 观测值 ,并作出 长期收...

84160
来自专栏CreateAMind

OPENAI进化策略学习-强化学习的扩展替代-速度快!

本文由谷歌翻译 https://blog.openai.com/evolution-strategies/

14020
来自专栏机器之心

TPU加AutoML:50美元快速训练高效的ImageNet图像分类网络

机器之心整理 参与:刘晓坤、思源 昨日,Jeff Dean 在推特上表示他们在 ImageNet 图像分类上发布了新的 DAWNBench 结果,新型 Amoe...

405110
来自专栏CDA数据分析师

如何利用 Excel 进行高级数据分析?

高级的数据分析会涉及回归分析、方差分析和T检验等方法,不要看这些内容貌似跟日常工作毫无关系,其实往高处走,MBA的课程也是包含这些内容的,所以早学晚学都得学,干...

24280
来自专栏PPV课数据科学社区

只需七步就能掌握Python数据准备

摘要: 本文主要讲述了如何在python中用七步就能完成中数据准备。 上图为CRISP-DM模型中的数据准备   下面七个步骤涵盖了数据准备的概念,个别任务...

34170
来自专栏企鹅号快讯

机器学习在web攻击检测中的应用实践

作者简介 岳良, 携程信息安全部高级安全工程师。2015年加入携程,主要负责渗透测试,安全评审,安全产品设计。 一、背景 ? 在web应用攻击检测的发展历史中,...

79570
来自专栏AI研习社

TensorFlow 全网最全学习资料汇总之TensorFlow的技术应用【4】

【AI研习社】关注AI前沿、开发技巧及技术教程等方面的内容。欢迎技术开发类文章、视频教程等内容投稿,邮件发送至:zhangxian@leiphone.com 随...

33670
来自专栏AI研习社

Kaggle 机器学习之模型融合(stacking)心得

此文道出了本人学习 Stacking 入门级应用的心路历程。 在学习过程中感谢 @贝尔塔的模型融合方法(http://t.cn/R62UGLF),以及如何在 K...

47760
来自专栏思影科技

结合fMRI对猕猴面部刺激处理区域(AF)的神经元集群内部的功能特异性研究

来自美国国家心理卫生研究所的Soo Hyun Park 等人在Neuron杂志上发表了一篇文章,结合了fMRI影像与电生理信号研究了前底(AF)区域的神经元集群...

41080
来自专栏大数据挖掘DT机器学习

天池大赛—商场中精确定位用户所在店铺 作品分享

题目回顾 题目地址: 题目要求给定一条用户的消费记录,求该用户当前所在的店铺。 下面介绍题目数据和评测方式 1. 店铺和商场信息表(mall) ? 2. 用户...

54560

扫码关注云+社区

领取腾讯云代金券