Какова цель весов и смещений в примере tensflow word2vec?
Я пытаюсь понять какпример word2vec работает и не совсем понимает, для чего нужны веса и смещения, переданные в функцию nse_loss. В функцию входят два переменных ввода: веса (плюс смещения) и вложение.
# Look up embeddings for inputs.
embeddings = tf.Variable(
tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))
embed = tf.nn.embedding_lookup(embeddings, train_inputs)
# Construct the variables for the NCE loss
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]))
Оба инициализируются случайным образом и (насколько я понимаю) оба подлежат обновлению в процессе обучения.
# Compute the average NCE loss for the batch.
loss = tf.reduce_mean(
tf.nn.nce_loss(nce_weights, nce_biases, embed, train_labels,
num_sampled, vocabulary_size))
Я полагаю, что они оба должны представлять собой обученную модель. Однако веса и смещения никогда не используются позже для расчетов подобия. Вместо этого используется только один компонент:
# Compute the cosine similarity between minibatch examples and all embeddings.
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)
similarity = tf.matmul(
valid_embeddings, normalized_embeddings, transpose_b=True)
Так что насчет второго компонента модели? Почему весы и уклоны игнорируются?
Спасибо.