Qual é a finalidade dos pesos e desvios no exemplo tensorflow word2vec?

Estou tentando entender comoexemplo word2vec funciona e realmente não entende qual é o propósito dos pesos e preconceitos passados para a função nse_loss. Existem duas entradas variáveis na função: pesos (mais vieses) e incorporação.

# 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]))

Ambos são inicializados aleatoriamente e (tanto quanto eu entendo) ambos estão sujeitos a atualizações durante o aprendizado.

# 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))

Suponho que ambos deveriam representar um modelo treinado. No entanto, pesos e preconceitos nunca são usados posteriormente para cálculos de similaridade. Em vez disso, apenas um componente é usado:

# 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)

E o segundo componente do modelo? Por que pesagens e preconceitos estão sendo ignorados?

Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion