利用摇滚乐队学习TensorFlow,Word2Vec模型和TSNE算法

本文为 AI 研习社编译的技术博客,原标题 Learn TensorFlow, the Word2Vec model, and the TSNE algorithm using rock bands。 翻译 | 林子、余杭、Emily1 校对 | 老赵 整理 | 令双

艺术家低维嵌入的K-聚类

学习“TensorFlow方式”来构建神经网络似乎是开始机器学习的一大障碍。在本教程中,我们将一步一步地介绍使用Kaggle的Pitchfork数据构建Band s2vec模型时涉及的所有关键步骤。

有关完整代码,请查看GitHub页面:

https://github.com/patricoferris/machinelearning/blob/master/word2vec/Pitchfork.ipynb

Word2VEC模型

神经网络消耗数字并产生数字。他们非常擅长。但是给他们一些文本,他们会发脾气,什么也不做。如果神经网络的任务是压缩数字并产生有意义的输出,那么我们的工作就是确保我们所输入的任何东西都是有意义的。这种寻求有意义的信息促成了Word2Vec模型。

使用词的一种方法是形成一个one-hot编码向量。创建一个长(在词汇表中的不同单词的数量)的零值列表,并且每个单词指向这个列表的唯一索引。如果我们看到这个单词,就让这个索引成为列表中的一项。

虽然这种方法是有效的,但它需要很大的空间,完全没有意义。“好的”和“优秀”类似于“鸭子”和“黑洞”。如果只有一种方式来矢量化单词,以便我们保持这种上下文相似性…

很开心,这儿有办法!

通过使用神经网络,我们可以生成单词的‘嵌入’。而这些向量表示的是从我们网络中的连接权重中提取的每个唯一的单词。

但问题仍然存在:我们如何确保它们有意义? 答案是输入成对的单词作为目标单词和上下文单词。不断重复这个过程,同时也输入一些不好的例子,神经网络就会开始学习到哪些单词会一起出现以及这些单词是如何形成一个图形的。这就如同一个由上下文关联词语组成的社交网络。“好”可以关联到“有帮助的”,还可以再关联到“关心的”。而我们的任务就是把这些数据输入到神经网络中。

最常见的方法之一是Skipgram模型,基于在文本数据集上移动窗口来生成这些目标上下文配对。但是,如果我们的数据不是句子,但我们仍然具有语境意义呢?在本教程中,我们的单词是艺术家姓名,我们的上下文是流派和平均评论分数。如果艺术家a和b同属一个流派并且具有相似的平均评论分数,我们希望他们有所关联。让我们开始吧。

建立数据集

Pitchfork 是一个美国音乐杂志网站。该网站主要有摇滚、独立和新音乐。他们的网站上删除了已经一些发给Kaggle的数据。这些信息包含与每个艺术家相关的评论、流派和日期等。

让我们创建一个艺术家类,并用字典来存储我们想要的所有有用的信息。

现在,我们想建立符合目标上下文的流派与平均分数一一对应的关系。要做到这一点,我们将创建两个字典:一个是不同的独特的类型,另一个是分数(离散到整数)。

我们将把所有的艺术家添加到这些词典中的相应类型和平均分数中,以便以后在生成艺术家成对时使用。

在进入TensorFlow代码之前的最后一步:生成批处理!批处理就像我们的神经网络将用于每个时期的数据样本。一个时期是一个扫描横跨神经网络在训练阶段。我们要生成两个numpy数组。其中包含以下代码:

TensorFlow

这里有无数的TensorFlow教程和知识来源。这些优秀文章(https://medium.freecodecamp.org/search?q=tensorflow)中的任何一个都会帮助你。这些文档是很好的参考资料。下面的代码主要基于word2vec教程,来自于TensorFlow。希望我可以揭秘其中的一些,我把它归结为一些要点。

第一步是理解“图形”含义。这对于TensorBoard可视化和在神经网络内创建数据流的心理图像是非常有用的。

花些时间阅读下面的代码和注释。在将数据送到神经网络之前,我们必须初始化我们要使用的所有部分。占位符是输入我们所给的“feed_dict”。这些变量是我们最终会调整的图表的可变部分。我们的模型中最重要的部分是损失函数。这是我们如何很好的做评估,以及我们如何可以提高的宝库。

噪声对比估计(NCE)是一种损失函数。通常我们会使用交叉熵和softmax,但是在自然语言处理中,我们所有的类都是一个个单一独立的词。

计算方面,这是糟糕的。NCE将问题的框架从类的概率改变到目标上下文匹配是否正确(二进制分类)。它做了一个真正的配对,然后样本得到坏的配对,常数

| num_sampled

控制这个常数。我们的神经网络学习区分这些好的和坏的配对。最终,它可以学习上下文!你可以阅读更多关于NCE和它是如何工作的。

运行神经网络

现在一切都设置好了,我们只需要按下绿色的“go”按钮并稍微旋转一下拇指。

使用TSNE进行可视化

好吧,我们还没完成。 我们现在为艺术家提供了上下文丰富的64维向量,但可能维度太多,反而无法真正想象它的实用性。

幸运的是,我们可以将这些信息压缩成两个维度,同时保留64个维度所具有的所有属性! 这是T分布式随机邻居嵌入,简称TSNE。这个视频很好地解释了TSNE背后的主要思想,但我将尝试给出一个广泛的概述。

TSNE是一种降维的方法,它保留了更高维度的相似性(如欧氏距离)。为此,这个方法首先要构建使用正态分布计算的点对点相似度矩阵。分布的中心是第一个点,第二个点的相似度是分布在远离分布中心的点之间的距离处的值。现在我们有两个点对点相似矩阵。然后,该算法缓慢移动较低维度的点,试图使其看起来像保留相似性的较高维度的矩阵。再重复一遍。 值得庆幸的是,Sci-kit Learn有一个功能可以为我们做数字运算。

结果

对所有的艺术家数据通过低维嵌入绘图。

这些嵌入令人惊讶的地方在于支持数学运算,经典例子是:

King — Man + Woman = Queen

或与它相近,再举另一个例子。

取Coil(英国实验音乐团体)的低维嵌入,包含以下流派的乐队,

[‘electronic’, ‘experimental', ‘rock’]

平均分数是

7.9

现在减去Elder Ones,一个包含以下流派乐队的低维嵌入,

['electronic']

平均分数是

7.8

使用此嵌入差异,找到最接近的乐队并打印其名称和流派。

Artist: black lips, Mean Score: 7.48, Genres: ['rock', 'rock', 'rock', 'rock', 'rock'] 
Artist: crookers, Mean Score: 5.5, Genres: ['electronic']
Artist: guided by voices, Mean Score: 7.23043478261, Genres: ['rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock', 'rock']

方法有效! 摇滚乐队和电子乐队的分数非常近。 下面是前300个带标签的乐队绘制的图。 希望这个项目能给你启发性。 一起动手建造,探索和玩耍。

三百个艺术家带标签的绘制图

原文链接:

https://medium.freecodecamp.org/learn-tensorflow-the-word2vec-model-and-the-tsne-algorithm-using-rock-bands-97c99b5dcb3a

原文发布于微信公众号 - AI研习社(okweiwu)

原文发表时间:2018-09-08

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

中国剩余定理详解

引入 我国古代数学著作《孙子算经》中有一道题目,它的描述是这样的 今有物不知其数,三三数之余二;五五数之余三;七七数之余二。问物几何? 这道题用现代数学理...

38511
来自专栏CVer

[计算机视觉论文速递] ECCV 2018 专场3

Amusi 将日常整理的论文都会同步发布到 daily-paper-computer-vision 上。名字有点露骨,还请见谅。喜欢的童鞋,欢迎star、for...

810
来自专栏杨熹的专栏

机器学习-多元线性回归

A. 用途: 可以用来预测,由多种因素影响的结果。 B. 建立公式: ? C. 求解方法: 方法1. Gradient Descent: ? ...

3575
来自专栏数据魔术师

机器学习| 一个简单的入门实例-员工离职预测

2016年,我国员工离职率达到20.1%,一线城市22.4%,意味着你身边每10个同事中就有2个会离职。科技行业员工离职率最高,达到25.1%,其中主动...

3893
来自专栏机器之心

计算语言顶会ACL 2018最佳论文公布!这些大学与研究员榜上有名

1. Finding syntax in human encephalography with beam search(尚未公开)

1300
来自专栏机器学习、深度学习

人群分析--ResnetCrowd: A Residual Deep Learning Architecture

ResnetCrowd: A Residual Deep Learning Architecture for Crowd Counting, Violent B...

2577
来自专栏智能算法

10 种机器学习算法的要点(附 Python 和 R 代码)

本文由 伯乐在线 - Agatha 翻译,唐尤华 校稿。 英文出处:SUNIL RAY。欢迎加入翻译组。 前言 谷歌董事长施密特曾说过:虽然谷歌的无人驾驶汽车和...

4585
来自专栏机器之心

专栏 | 为模型减减肥:谈谈移动/嵌入式端的深度学习

机器之心专栏 作者:李飞 本文为机器之心矽说专栏系列文章之一,对模型压缩进行了深度解读。 1. 为什么要为深度学习模型减肥 随着深度学习的发展,神经网络模...

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

【学习】SPSS聚类分析全过程

案例数据源: 有20种12盎司啤酒成分和价格的数据,变量包括啤酒名称、热量、钠含量、酒精含量、价格。数据来自《SPSS for Windows 统计分析》dat...

3716
来自专栏海天一树

Python从0实现朴素贝叶斯分类器

朴素贝叶斯算法是一个直观的方法,使用每个属性归属于某个类的概率来做预测。你可以使用这种监督性学习方法,对一个预测性建模问题进行概率建模。 给定一个类,朴素贝叶斯...

6912

扫码关注云+社区

领取腾讯云代金券