记录一下
以skip-gram为例
1.W为词向量矩阵,存储着v个n长度的词向量
2.因为矩阵过于大,且过于稀疏,因此tf.matmul(x,W)采用根据x的向量索引进行查W表来进行代替,具体代码为
embedding = tf.Variable(tf.random_uniform([vocab_size, embedding_size], -1,1))
embed = tf.nn.embedding_lookup(embedding, inputs)
3.对获取的词向量采用softmax回归计算上下文单词的概率
4.由于训练速度过慢,因此采用负采样来更新权重
softmax_w = tf.Variable(tf.truncated_normal([vocab_size, embedding_size], stddev=0.1))
softmax_b = tf.Variable(tf.zeros(vocab_size))
loss = tf.nn.sampled_softmax_loss(softmax_w, softmax_b, labels, n_sampled, embed, vocab_size)
cost = tf.reduce_mean(loss)
optimizer = tf.train.AdamOptimizer().minimize(cost)