zoukankan      html  css  js  c++  java
  • 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)
    
  • 相关阅读:
    根据IP定位用户所在城市信息
    Laravel根据Ip获取国家,城市信息
    基于thinkphp实现根据用户ip判断地理位置并提供对应天气信息的应用
    Linux利用OneinStack搭建环境
    五大主流浏览器及四大内核1
    手机QQ浏览器属于代理服务器吗?
    各种浏览器怎么换ip
    微信浏览器到底是什么内核?
    交谈10要素,
    广告行业的大数据处理架构实践
  • 原文地址:https://www.cnblogs.com/zhouyang209117/p/6780026.html
Copyright © 2011-2022 走看看