tensorflow学习笔记之word2vec

word2vec是训练词向量的方法,tensorflow自带的word2vec代码实现的是Skip-gram方法,即使用中心词来预测周边词。
代码比较简单,BP的一个前向后向过程,主要学习BP网络的搭建方法

</pre><pre code_snippet_id="1951995" snippet_file_name="blog_20161027_1_6826181" name="code" class="python">def maybe_download(filename, expected_bytes)数据下载方法,下载完毕是一个zip文件,只有一行,全是单词,单词之间以空格分隔
 

def read_data(filename): 
读数据,输出一个list,里面的每个项是一个词

def build_dataset(words):  
return data, count, dictionary, reverse_dictionary 
data是词的list
count是一个counter,保存词和词频
dictionary是一个dict,保存词和词序号
reverse_dictionary是字典的翻转,存储词序号和词

def generate_batch(batch_size, num_skips, skip_window)
每次调用,随机选择数据,构造一个batch
batch_size,batch的大小
num_skips, 训练样本的源端要使用几次,出于n-skip算法的原因,一个中心词要对应多个周边词
skip_windows,左右各考虑多少个词,skip_windows*2=num_skips
return batch, labels 
batch数据,numpy多维数组,形状[batch_size]
label数据,numpy多维数组,形状[batch_size, 1],最终的训练数据实际上是成对的,即“一个中心词-->一个周边词”,所以一维矩阵就可以。
此处用了二维矩阵,应该是出于nce_loss函数的需求。
 

构造网络:

train_inputs = tf.placeholder(tf.int32, shape=[batch_size])                    
train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])                 
valid_dataset = tf.constant(valid_examples, dtype=tf.int32) 

两个placeholder变量,用来接通训练数据。一个constant用来保存开发集数据。

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

nce_weights = tf.Variable(tf.truncated_normal([vocabulary_size, embedding_size],  stddev=1.0 / math.sqrt(embedding_size)))  
nce_biases = tf.Variable(tf.zeros([vocabulary_size]))

待训练的变量

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值