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)

最新文章

  1. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 忘记密码功能改进、手机短信、电子邮件
  2. Windows Phone 十三、吐司通知
  3. 理解 OpenStack + Ceph (7): Ceph 的基本操作和常见故障排除方法
  4. 统计学 nested_design 嵌套设计
  5. storyBoard配置错误导致崩溃 superview]: unrecognized selector...
  6. 单机最大tcp连接数
  7. TCP/IP详解学习笔记(5)-- ICMP:internet 控制报文协议
  8. [听听音乐]when you believe [singer: mariah carey]
  9. IMAP收邮件
  10. HDU-3001 Travelling
  11. AJAX顺序输出
  12. bzoj3697
  13. BFM1
  14. Oracle 12c最新特性
  15. ubunt 基于deb 配置本地apt 源 分成仅本机使用,局域网使用2种
  16. strstr库函数实现
  17. numpy统计分布显示
  18. Android Tools 开发工具库开源项目总结
  19. python 三大框架之一Flask入门
  20. shell 脚本中将输出内容赋值给一个变量时的换行问题

热门文章

  1. 微信 AES 解密报错 Illegal key size 三种解决办法
  2. 过滤条件的时候用between和<>的区别
  3. [java] 笔记 from黑马
  4. Idea集成SpringBoot实现两种热部署方式(亲测有效)
  5. webStorm中NodeJs 没有智能提示
  6. Tsx写一个通用的button组件
  7. expect 自动填充密码
  8. 01-MongoDB数据库基础
  9. Mysql 存储过程声明及使用
  10. 小白学 Python 爬虫(5):前置准备(四)数据库基础