maybe_download

下载text8.zip.可以手工下载下来.然后指定text8.zip的路径.

read_data

解压text8.zip,把数据读入到data中. data是一个长数组,保存了所有单词.单词之间用空格分开.text8.zip解决后是一个文本文件,这个文本文件的内容非常简单只有字母组成的单词,单词之间用空格分开,没有别的字符.

build_dataset

将出现次数最多的前50000个词和出现的次数放到数据结构count中.count是个dict,每个元素是个list,list的第0个元素是单词,list的第1个元素是出现次数.dictionary的key是单词,value是单词对应的一个编号. data和words相对对应,words是个单词的list,data是个编号的list,惟一要注意的地方是当单词不在最常用的50000个时,编号为0. 最后把所有不常用的单词(不在top 50000中)记为UNK,出现资料为所有不常用的单词之和.reverse_dictionary也是一个dict,只是把dictionary的key和value反过来了.

generate_batch

作用是给点一个单词,找到它前面和后面的单词.batch_size=8单词是8个词作为一个句子.skip_window=2,表示一个单词的前2个和后2个单词可能当成它周围的单词.num_skips=4表示在每个单词的前后一共选4个单词,认为这4个单词是它周围的单词.返回值batch相当于基准单词,labels相当于基准单词周围的单词.

词向量的构造

embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))

构造了一个结构为(50000, 128)的词向量.

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

每次从词向量中取出train_inputs去训练.

norm = tf.sqrt(tf.reduce_sum(tf.square(embeddings), 1, keep_dims=True))
normalized_embeddings = embeddings / norm

把词向量化为单位向量.

valid_embeddings = tf.nn.embedding_lookup(normalized_embeddings, valid_dataset)  # 取出16个  (16*128)
similarity = tf.matmul(valid_embeddings, normalized_embeddings, transpose_b=True) # 16*50000 选出的16个单词和50000个词的相似度

先从所有单位词向量中选出16个词向量,结构为(16*128). valid_embeddings乘以normalized_embeddings的转置(128,50000)后,得到一个结构为(16,50000)的矩阵.表示选出的16个单词和50000个单词的相似度.

top n相似度

sim = similarity.eval()  # 16*50000
for i in xrange(valid_size): # 0...15
valid_word = reverse_dictionary[valid_examples[i]] # 选16个单词
top_k = 8 # number of nearest neighbors
nearest = (-sim[i, :]).argsort()[1:top_k + 1] # 相似度最大的是它自己,所以[1,top_k+1],nearest保存最大相似度的索引
log_str = "Nearest to %s:" % valid_word
for k in xrange(top_k):
close_word = reverse_dictionary[nearest[k]] # 由索引找到单词
log_str = "%s %s," % (log_str, close_word)
print(log_str)

tensorflow word2vec详解的更多相关文章

  1. Word2Vec详解

    Word2Vec详解 word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练:其次,该工具得到的训练结果--词向量(word embedding),可以很好地度量词与词之间的相似性.随着 ...

  2. 机器学习:gensim之Word2Vec 详解

    一 前言 Word2Vec是同上一篇提及的PageRank一样,都是Google的工程师和机器学习专家所提出的的:在学习这些算法.模型的时候,最好优先去看Google提出者的原汁Paper和Proje ...

  3. TensorFlow 安装详解

    摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 『不要把手段当成目标 — <一个瑜伽行者的自传>』   本文提纲 1. 机器学习 2 ...

  4. NLP之——Word2Vec详解

    2013年,Google开源了一款用于词向量计算的工具--word2vec,引起了工业界和学术界的关注.首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练:其次,该工具得到的训 ...

  5. word2vec详解与实战

    有那么一句话 不懂word2vec,就别说自己是研究人工智能->机器学习->自然语言处理(NLP)->文本挖掘的 所以接下来我就从头至尾的详细讲解一下word2vec这个东西. 简要 ...

  6. Tensorflow BatchNormalization详解:4_使用tf.nn.batch_normalization函数实现Batch Normalization操作

    使用tf.nn.batch_normalization函数实现Batch Normalization操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearnin ...

  7. Tensorflow BatchNormalization详解:3_使用tf.layers高级函数来构建带有BatchNormalization的神经网络

    Batch Normalization: 使用tf.layers高级函数来构建带有Batch Normalization的神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴 ...

  8. Tensorflow BatchNormalization详解:2_使用tf.layers高级函数来构建神经网络

    Batch Normalization: 使用tf.layers高级函数来构建神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearningai课程 课程笔 ...

  9. TensorFlow分布式详解

    每次 TensorFlow 运算都被描述成计算图的形式,允许结构和运算操作配置所具备的自由度能够被分配到各个分布式节点上.计算图可以分成多个子图,分配给服务器集群中的不同节点. 强烈推荐读者阅读论文& ...

随机推荐

  1. C++中对C的扩展学习新增语法——引用

    引用 引用的好处: 1.引用的好处 C++使用结构体,不需要再使用 typedef. 2.值传递是将实参进行拷贝,赋值给形参,如果对象比较大,每次拷贝效率比较低,并且函数内部无法修改外部变量的值,能力 ...

  2. linux服务器MySQL数据从磁盘拷贝以及恢复

    偶有感触:遇到这个问题,经过一个下午的排查, 终于解决. 故事情节:我的阿里云服务器突然被黑客攻击了,整个系统down了. 找客服,他们排查说usr目录的文件全部丢失.让我重新初始化系统盘.初始化之前 ...

  3. Node 入门

    Node 入门 NodeJs 安装,HelloWorld 下载地址 https://nodejs.org/zh-cn/ https://nodejs.org/dist/ 用 Node命令行输出Hell ...

  4. 搭建Nginx正向代理服务

    需求背景: 前段时间公司因为业务需求需要部署一个正向代理,需要内网服务通过正向代理访问到外网移动端厂商域名通道等效果,之前一直用nginx做四层或者七层的反向代理,正向代理还是第一次配置,配置的过程也 ...

  5. 剑指Offer-20.包含min函数的栈(C++/Java)

    题目: 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). 分析: 因为题目要求得到栈中最小元素的min函数时间复杂度为O(1),这里便不选择遍历栈 ...

  6. AutoCad 二次开发 文字镜像

    AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...

  7. Git的使用和基本概念理解

    参考:https://www.liaoxuefeng.com/wiki/896043488029600 一).git的使用: 1.创建版本库(Resopsitory),相当于一个目录,目录中所有的文件 ...

  8. 24 道 shell 脚本面试题

    想要成为中高级phper, shell 脚本是需要掌握的,它有助于你在工作环境中自动完成很多任务. 如下是一些面试过程中,经常会遇到的 shell 脚本面试问题及解答: Q:1 Shell脚本是什么. ...

  9. 使用lib-flexible.js适配移动端UI设计750px设计图

    最近在和设计沟通关于设计图尺寸大小和前端实际页面尺寸大小不一致的情况,我们的UI设计是使用的iPone6的,(iphone6:    375px*667px  实际像素:750px*1334px)如果 ...

  10. python线程条件变量Condition(31)

    对于线程与线程之间的交互我们在前面的文章已经介绍了 python 互斥锁Lock / python事件Event , 今天继续介绍一种线程交互方式 – 线程条件变量Condition. 一.线程条件变 ...