资源技术动态通过摇滚乐队来学习 TensorFlow,Word2Vec 模型和 TSNE 算法

通过摇滚乐队来学习 TensorFlow,Word2Vec 模型和 TSNE 算法

2019-09-24 | |  87 |   0

原标题:通过摇滚乐队来学习 TensorFlow,Word2Vec 模型和 TSNE 算法

来源:AI研习社      原文链接:https://www.yanxishe.com/TextTranslation/842


发起:雷锋字幕组 校对:Gerald Durrell 审核:Gerald Durrell     参与翻译(3人):林子、余杭、Emily1

英文原文:Learn TensorFlow, the Word2Vec model, and the TSNE algorithm using rock bands


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

1534401192615458.png

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


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


Word2VEC模型


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


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


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


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


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


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


建立数据集


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


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


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


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


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


TensorFlow


这里有无数的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个带标签的乐队绘制的图。 希望这个项目能给你启发性。 一起动手建造,探索和玩耍。

1569315152955780.png

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

THE END

免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。

合作及投稿邮箱:E-mail:editor@tusaishared.com

上一篇:三分钟带你读懂 BERT

下一篇:七分钟理解 facebook 的音乐风格转换

用户评价
全部评价

热门资源

  • 应用笔画宽度变换...

    应用背景:是盲人辅助系统,城市环境中的机器导航...

  • GAN之根据文本描述...

    一些比较好玩的任务也就应运而生,比如图像修复、...

  • 端到端语音识别时...

    从上世纪 50 年代诞生到 2012 年引入 DNN 后识别效...

  • 人体姿态估计的过...

    人体姿态估计是计算机视觉中一个很基础的问题。从...

  • 谷歌发布TyDi QA语...

    为了鼓励对多语言问答技术的研究,谷歌发布了 TyDi...