首页
学习
活动
专区
工具
TVP
发布

利用摇滚乐队学习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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180908A19JTW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券