tensorflow word2vec详解
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详解的更多相关文章
- Word2Vec详解
Word2Vec详解 word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练:其次,该工具得到的训练结果--词向量(word embedding),可以很好地度量词与词之间的相似性.随着 ...
- 机器学习:gensim之Word2Vec 详解
一 前言 Word2Vec是同上一篇提及的PageRank一样,都是Google的工程师和机器学习专家所提出的的:在学习这些算法.模型的时候,最好优先去看Google提出者的原汁Paper和Proje ...
- TensorFlow 安装详解
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! 『不要把手段当成目标 — <一个瑜伽行者的自传>』 本文提纲 1. 机器学习 2 ...
- NLP之——Word2Vec详解
2013年,Google开源了一款用于词向量计算的工具--word2vec,引起了工业界和学术界的关注.首先,word2vec可以在百万数量级的词典和上亿的数据集上进行高效地训练:其次,该工具得到的训 ...
- word2vec详解与实战
有那么一句话 不懂word2vec,就别说自己是研究人工智能->机器学习->自然语言处理(NLP)->文本挖掘的 所以接下来我就从头至尾的详细讲解一下word2vec这个东西. 简要 ...
- Tensorflow BatchNormalization详解:4_使用tf.nn.batch_normalization函数实现Batch Normalization操作
使用tf.nn.batch_normalization函数实现Batch Normalization操作 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearnin ...
- Tensorflow BatchNormalization详解:3_使用tf.layers高级函数来构建带有BatchNormalization的神经网络
Batch Normalization: 使用tf.layers高级函数来构建带有Batch Normalization的神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴 ...
- Tensorflow BatchNormalization详解:2_使用tf.layers高级函数来构建神经网络
Batch Normalization: 使用tf.layers高级函数来构建神经网络 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 吴恩达deeplearningai课程 课程笔 ...
- TensorFlow分布式详解
每次 TensorFlow 运算都被描述成计算图的形式,允许结构和运算操作配置所具备的自由度能够被分配到各个分布式节点上.计算图可以分成多个子图,分配给服务器集群中的不同节点. 强烈推荐读者阅读论文& ...
随机推荐
- python3 控制安卓手机的飞行模式遇到的问题汇总
一.首先调通电脑对手机能落实 adb shell命令 验证通过标准:控制wifi开关的命令,能让wifi功能开启和关闭 (adb shell svc wifi enable 和 adb she ...
- [笔记] HOW2J.CN网站记录的java笔记_第四部分_HTML
1.写一个显示Hello World的网页, <html> <body> <p>Hello World</p> </body> </h ...
- 了解Spring的基本概念
参考资料:https://www.jianshu.com/p/1c483bd8fd6d 在正式学习Spring框架之前,肯定有很多疑问,比如说: 1.Spring中经常出现的IOC.AOP.DI是什么 ...
- spark集群搭建(三台虚拟机)——kafka集群搭建(4)
!!!该系列使用三台虚拟机搭建一个完整的spark集群,集群环境如下: virtualBox5.2.Ubuntu14.04.securecrt7.3.6_x64英文版(连接虚拟机) jdk1.7.0. ...
- systemd单元文件
前面我们提到过systemd启动可以对相相互依赖的串行的服务,也是可以并行启动的.在systemd中使用单元替换init的脚本来进行系统初始化.这节将要介绍系统初始化中,作为systemd的最小单元, ...
- flex一些属性
// 改变主轴的方向 flex-direction: column; // display:flex的子元素无法设置宽度 // 子元素有个flex-shrink属性,表示在父元素宽度不够的情况下是否自 ...
- GitHub远程库的搭建以及使用
GitHub远程库的搭建 一).配置SSH 步骤: 1).注册GitHub账号 2).本地git仓库与远程的GitHub仓库的传输要通过SSH进行加密 3).创建SSH key 1.检查在用户主目 ...
- C#变量---xdd
cshape(c#)学习笔记 1. string str1=Console.ReadLine();//键盘输入的默认为字符串 2. Console.WriteLine('你的成绩是'+a+'分'); ...
- 2 JAVA语言的基本规则
1. 类名 类名需使用字母开头,使用驼峰命名法,如HelloWorld,对应的文件为 HelloWorld.java,与类名保持一致.编译好的字节码文件为 HelloWord.class. 2. 区分 ...
- linuxLVM
一.概念性的东西 LVM2:Logical Volume Manager ,Cersion 2 LVM,依赖于内核的dm模块(将一个或多个底层的设备组织成一个逻辑设备的模块).可以将多个物理分区通过软 ...