前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Tensorflow 的 word2vec 详细解释:basic篇

Tensorflow 的 word2vec 详细解释:basic篇

原创
作者头像
腾讯移动品质中心TMQ
修改于 2017-08-09 01:23:00
修改于 2017-08-09 01:23:00
3K0
举报

​Word2Vec即Word to vector(词汇转向量)。

我们希望词义相近的两个单词,在映射之后依然保持相近,词义很远的单词直接则保持很远的映射距离。

关于Word2Vec实例总结为6步:

1、下载数据;

2、将原词汇数据转换为字典映射;

3、为 skip-gram模型 建立一个扫描器;

4、建立并训练 skip-gram 模型;

5、开始训练模型;

6、结果可视化。

现在来详细解说。

1、下载数据

打开下载进来的word词汇数据,由于是无监督学习,并没有标签,就只是整整100M大小文本数据。

这是第一步下载得到的数据:

2、将原词汇数据转换为字典映射

然后开始第二步将原词汇数据转换为字典映射,比如我取出这段文本的头一句,它会进行如下变换:

现在我们的词汇文本变成了用数字编号替代的格式以及词汇表和逆词汇表。逆词汇只是编号为key,词汇为value。

3、为skip-gram 模型建立一个扫描器

首先看一下扫描器函数:

defgenerate_batch(batch_size, num_skips, skip_window):

batch_size是指一次扫描多少块,skip_window为左右上下文取词的长短,num_skips输入数字的重用次数。假设我们的扫描器先扫这大段文字的前8个单词,左右各取1个单词,重用次数为2次。我们就会观察到如下结果:

关于参数设置:

Batch_size每次sgd训练时候扫描的数据大小, embedding_size 词向量的大小,skip_window窗口大小。

Num_skips = 2 表示input用了产生label的次数限制。

demo中默认是2,可以设置为1。

对比下:

默认2的时候:

设置1的时候:

就是对于一个中心词 在window范围 随机选取num_skips个词,产生一系列(input_id, output_id) 作为(batch_instance, label)这些都是正样本。

4、建立图形

这里谈得都是嵌套,那么先来定义一个嵌套参数矩阵。我们用唯一的随机值来初始化这个大矩阵。

对噪声-比对的损失计算就使用一个逻辑回归模型。对此,我们需要对语料库中的每个单词定义一个权重值和偏差值。(也可称之为输出权重 与之对应的 输入嵌套值)。定义如下。

我们有了这些参数之后,就可以定义Skip-Gram模型了。简单起见,假设我们已经把语料库中的文字整型化了,这样每个整型代表一个单词。Skip-Gram模型有两个输入。一个是一组用整型表示的上下文单词,另一个是目标单词。给这些输入建立占位符节点,之后就可以填入数据了。

然后我们需要对批数据中的单词建立嵌套向量,TensorFlow提供了方便的工具函数。

embed = tf.nn.embedding_lookup(embeddings, train_inputs)

好了,现在我们有了每个单词的嵌套向量,接下来就是使用噪声-比对的训练方式来预测目标单词。

我们对损失函数建立了图形节点,然后我们需要计算相应梯度和更新参数的节点,比如说在这里我们会使用随机梯度下降法,TensorFlow也已经封装好了该过程。

训练模型

训练的过程很简单,只要在循环中使用feed_dict不断给占位符填充数据,同时调用 session.run即可。

现在通过上面一步,我们构造出了input和label,就可以进行监督学习,下面

5、NCE Loss

这里为什么不用更为常见的Softmax + Cross-Entropy 呢?

因为如果在这里使用Softmax + Cross-Entropy作为损伤函数会有一个问题,Softmax当有几万+的分类时,速率会大大下降。

其速度对比如下:

10000 个类,Softmax每秒处理 10000 个样本,NCE每秒处理 30000 个样本。

100000 个类,Softmax每秒处理 1000 个样本,NCE每秒处理 20000 个样本。

这里再整理出其他同学关于 NCE LOSS 源码的理解,下面就是一段 NCE LOSS 的实现代码,但不得而知 Tensorflow 是否使用该NCE LOSS的实现。

NCE的主要思想是,对于每一个样本,除了本身的label,同时采样出N个其他的label,从而我们只需要计算样本在这N+1个label上的概率,而不用计算样本在所有label上的概率。而样本在每个label上的概率最终用了Logistic的损失函数。

这里可谓是整个 Word2Vec 的关键。

至此,已经搭建好训练模型,然后便可以进行分批次的训练即可。那么下一个问题是完成训练后,我们如何判断两个词汇的相似度呢?

这里我们使用 cos 来表示相似度会比使用 l2 向量差值会好一些。

这是根据训练方式所决定的,因为向量的长度与分类无关。

6、最后调用 skitlearn的TSNE模块进行降维到2元,(plot_with_labels函数)绘图展示:

获取更多测试干货,请搜索微信公众号:腾讯移动品质中心TMQ!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Tensorflow实现word2vec
摘要总结:本文研究了如何通过使用技术社区中的内容编辑人员来提高内容质量,并总结了相关的方法和实践。
GavinZhou
2018/01/02
1.4K0
Tensorflow实现word2vec
Word2vec原理浅析及tensorflow实现
词向量的重要意义在于将自然语言转换成了计算机能够理解的向量。相对于词袋模型、TF-IDF等模型,词向量能抓住词的上下文、语义,衡量词与词的相似性,在文本分类、情感分析等许多自然语言处理领域有重要作用。
用户1332428
2018/07/30
6360
Word2vec原理浅析及tensorflow实现
TensorFlow2.0 代码实战专栏(四):Word2Vec (Word Embedding)
使用TensorFlow 2.0实现Word2Vec算法计算单词的向量表示,这个例子是使用一小部分维基百科文章来训练的。
磐创AI
2019/12/05
3.7K0
TensorFlow-9-词的向量表示
今日资料: https://www.tensorflow.org/tutorials/word2vec 中文版: http://wiki.jikexueyuan.com/project/tensorflow-zh/tutorials/word2vec.html 这一节是关于 word2vec 模型的,可以用来学习词的向量表达,也叫‘word embeddings’。 之前写过一篇:word2vec 模型思想和代码实现,里面有 skip-gram 算法的简单实现。 http://www.jianshu
杨熹
2018/04/03
9510
TensorFlow-9-词的向量表示
超详细总结之Word2Vec(一)原理推导[通俗易懂]
本章是介绍Word2Vec的原理推导部分,后面还会有基于TensorFlow的Word2Vec代码实现讲解。
全栈程序员站长
2022/08/30
2.3K0
超详细总结之Word2Vec(一)原理推导[通俗易懂]
一文详解 Word2vec 之 Skip-Gram 模型(结构篇)
这次的分享主要是对Word2Vec模型的两篇英文文档的翻译、理解和整合,这两篇英文文档都是介绍Word2Vec中的Skip-Gram模型。下一篇专栏文章将会用TensorFlow实现基础版Word2Vec的skip-gram模型,所以本篇文章先做一个理论铺垫。 原文英文文档请参考链接: - Word2Vec Tutorial - The Skip-Gram Model http://t.cn/Rc5RfJ2 - Word2Vec (Part 1): NLP With Deep Learning with T
AI研习社
2018/03/19
3.2K0
一文详解 Word2vec 之 Skip-Gram 模型(结构篇)
白话Word2Vec
顾名思义,Word2Vec就是把单词转换成向量。它本质上是一种单词聚类的方法,是实现单词语义推测、句子情感分析等目的一种手段。
机器学习AI算法工程
2019/10/28
7610
白话Word2Vec
教程 | 在Python和TensorFlow上构建Word2Vec词嵌入模型
选自adventuresinmachinelearning 机器之心编译 参与:李诗萌、刘晓坤 本文详细介绍了 word2vector 模型的模型架构,以及 TensorFlow 的实现过程,包括数据
机器之心
2018/05/09
1.9K0
教程 | 在Python和TensorFlow上构建Word2Vec词嵌入模型
从锅炉工到AI专家(9)
无监督学习 前面已经说过了无监督学习的概念。无监督学习在实际的工作中应用还是比较多见的。 从典型的应用上说,监督学习比较多用在“分类”上,利用给定的数据,做出一个决策,这个决策在有限的给定可能性中选择其中一种。各类识别、自动驾驶等都属于这一类。 无监督学习则是“聚类”,算法自行寻找输入数据集的规律,并把它们按照规律分别组合,同样特征的放到一个类群。像自然语言理解、推荐算法、数据画像等,都属于这类(实际实现中还是比较多用半监督学习,但最早概念的导入还是属于无监督学习)。 无监督学习的确是没有人工的标注,
俺踏月色而来
2018/06/20
6330
tensorflow 0.10 word2vec 源码解析
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/u012436149/article/details/52848013
ke1th
2019/05/27
8330
cs224d-第二课-word2vec
首先我想说下为什么会去学习cs224d,原先我一直是做工程的,做了大概3年,产品做了好多,但是大多不幸夭折了,上线没多久就下线,最后实在是经受不住心灵的折磨,转行想做大数据,机器学习的,前不久自己学习完了Udacity的深度学习,课程挺好,但是在实际工作中,发现课程中的数据都是给你准备好的,实践中哪来这么多好的数据,只能自己去通过各种手段搞数据,苦不堪言。在找数据的过程中,发现做多的数据还是文本数据,不懂个nlp怎么处理呢,于是就来学习cs224d这门课程,希望在学习过程中能快速将课程所学应用到工作中,fighting!
zhuanxu
2018/08/23
7140
cs224d-第二课-word2vec
DL杂记:word2vec之TF-IDF、共轭矩阵、cbow、skip-gram
版权声明:本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。 https://blog.csdn.net/u014365862/article/details/87800246
MachineLP
2019/05/26
8100
【NLP实战】tensorflow词向量训练实战
实战是学习一门技术最好的方式,也是深入了解一门技术唯一的方式。因此,NLP专栏计划推出一个实战专栏,让有兴趣的同学在看文章之余也可以自己动手试一试。
用户1508658
2019/10/14
1.1K0
【NLP实战】tensorflow词向量训练实战
一文详解 Word2vec 之 Skip-Gram 模型(实现篇)
前言 上一篇的专栏介绍了Word2Vec中的Skip-Gram模型的结构和训练,如果看过的小伙伴可以直接开始动手用TensorFlow实现自己的Word2Vec模型,本篇文章将利用TensorFlow来完成Skip-Gram模型。还不是很了解Skip-Gram思想的小伙伴可以先看一下上一篇的专栏内容。 本篇实战代码的目的主要是加深对Skip-Gram模型中一些思想和trick的理解。由于受限于语料规模、语料质量、算法细节以及训练成本的原因,训练出的结果显然是无法跟gensim封装的Word2Vec相比的
AI研习社
2018/03/19
1.8K0
一文详解 Word2vec 之 Skip-Gram 模型(实现篇)
[TensorFlow深度学习深入]实战一·使用embedding_lookup模块对Word2Vec训练保存与简单使用
One hot representation用来表示词向量非常简单,但是却有很多问题。最大的问题是我们的词汇表一般都非常大,比如达到百万级别,这样每个词都用百万维的向量来表示简直是内存的灾难。这样的向量其实除了一个位置是1,其余的位置全部都是0,表达的效率不高,能不能把词向量的维度变小呢?
小宋是呢
2019/06/27
1.8K0
NLP中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert
一、文本表示和各词向量间的对比 1、文本表示哪些方法? 2、怎么从语言模型理解词向量?怎么理解分布式假设? 3、传统的词向量有什么问题?怎么解决?各种词向量的特点是什么? 4、word2vec和NNLM对比有什么区别?(word2vec vs NNLM) 5、word2vec和fastText对比有什么区别?(word2vec vs fastText) 6、glove和word2vec、 LSA对比有什么区别?(word2vec vs glove vs LSA) 7、 elmo、GPT、bert三者之间有什么区别?(elmo vs GPT vs bert)
zenRRan
2019/06/14
3.8K0
NLP中的词向量对比:word2vec/glove/fastText/elmo/GPT/bert
Word2Vec —— 深度学习的一小步,自然语言处理的一大步
Word2Vec 模型用来学习单词的向量表示,我们称为「词嵌入」。通常作为一种预处理步骤,在这之后词向量被送入判别模型(通常是 RNN)生成预测结果和执行各种有趣的操作。
AI研习社
2018/07/26
4560
Word2Vec —— 深度学习的一小步,自然语言处理的一大步
word2vec理论与实践
导读 本文简单的介绍了Google 于 2013 年开源推出的一个用于获取 word vector 的工具包(word2vec),并且简单的介绍了其中的两个训练模型(Skip-gram,CBOW),以及两种加速的方法(Hierarchical Softmax,Negative Sampling)。 一 、word2vec word2vec最初是由Tomas Mikolov 2013年在ICLR发表的一篇文章 Efficient Estimation of Word Representations in Ve
zenRRan
2018/04/10
9680
word2vec理论与实践
TF入门04-TF实现Word2Vec
Word2Vec是一组用来产生词嵌入的模型,包括两种主要的模型:skip-gram和CBOW。
公众号-不为谁写的歌
2020/07/23
1.1K0
无所不能的Embedding 1 - Word2vec模型详解&代码实现
word2vec是google 2013年提出的,从大规模语料中训练词向量的模型,在许多场景中都有应用,信息提取相似度计算等等。也是从word2vec开始,embedding在各个领域的应用开始流行,所以拿word2vec来作为开篇再合适不过了。本文希望可以较全面的给出Word2vec从模型结构概述,推导,训练,和基于tf.estimator实现的具体细节。完整代码戳这里 https://github.com/DSXiangLi/Embedding
风雨中的小七
2020/08/11
1.9K0
无所不能的Embedding 1 - Word2vec模型详解&代码实现
推荐阅读
相关推荐
Tensorflow实现word2vec
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档