Этот поток приближается: Для чего нужны веса и смещения в примере с tensorflow word2vec?
Но мне все еще чего-то не хватает в моей интерпретации этого: https://github.com/tensorflow/tensorflow/blob/r1.2/tensorflow/examples/tutorials/word2vec/word2vec_basic.py
Насколько я понимаю, вы скармливаете сети индексы целевых и контекстных слов из своего словаря.
_, loss_val = session.run([optimizer, loss], feed_dict=feed_dict)
average_loss += loss_val
Затем пакетные входные данные просматриваются, чтобы вернуть векторы, которые случайным образом сгенерированы в начале.
embeddings = tf.Variable(
tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
# Look up embeddings for inputs.
embed = tf.nn.embedding_lookup(embeddings, train_inputs)
Затем оптимизатор настраивает веса и смещения, чтобы лучше всего предсказать метку, в отличие от случайных альтернатив num_sampled.
loss = tf.reduce_mean(
tf.nn.nce_loss(weights=nce_weights,
biases=nce_biases,
labels=train_labels,
inputs=embed,
num_sampled=num_sampled,
num_classes=vocabulary_size))
# Construct the SGD optimizer using a learning rate of 1.0.
optimizer = tf.train.GradientDescentOptimizer(1.0).minimize(loss)
У меня следующие вопросы:
Где обновляется переменная вложений?. Мне кажется, что я мог бы получить окончательный результат, либо пропустив индекс слова через нейронную сеть, либо просто взяв
final_embeddings
векторов и используя их. Но я не понимаю, гдеembeddings
когда-нибудь меняется от его случайной инициализации.Если бы мне пришлось нарисовать этот вычислительный график, как бы он выглядел (или еще лучше, как это лучше всего сделать)?
Выполняется ли при этом сразу все пары контекст / цель в пакете? Или по одному?