Sto cercando di capire come funziona word2vec example e non capisco veramente quale sia lo scopo dei pesi e dei bias passati nella funzione nse_loss. Ci sono due input variabili nella funzione: pesi (più bias) e incorporamento.Qual è lo scopo dei pesi e dei bias nell'esempio di tensorflow word2vec?
# 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]))
Entrambi sono inizializzati casualmente e (per quanto ho capito) entrambi sono soggetti ad aggiornamenti durante l'apprendimento.
# 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))
Suppongo che entrambi dovrebbero rappresentare un modello addestrato. Tuttavia i pesi e le distorsioni non vengono mai utilizzati in seguito per i calcoli di similitudine. Invece, viene utilizzato un solo componente:
# 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)
Quindi, che dire del secondo componente del modello? Perché pese e pregiudizi vengono ignorati?
Grazie.
Vedo cosa intendi, ma in questo caso, l'input per parola e l'output per parola sono valori casuali da embeddings. Di solito, durante il processo di apprendimento vengono aggiornati solo pesi e bias dei livelli. Ma in questo caso (ciò che mi confonde) il processo di apprendimento aggiorna gli input, gli output (che provengono entrambi da parti diverse degli embeddings) così come i pesi. Inoltre, l'apprendimento sembra essere casuale poiché i pesi sono casuali per ogni parola. Mi sto perdendo qualcosa? – WarGoth
Non sono valori casuali, sono valori selezionati casualmente. Quando si dispone di un set di dati e si eseguirà l'algoritmo per diverse epoche ciò che si fa è di randomizzare l'ordine del set di dati in ogni epoca, ecco perché i valori vengono selezionati casualmente. I pesi sono casuali all'inizio e quindi vengono modificati dall'ottimizzatore in ogni lotto. Sono casuali all'inizio per evitare di rimanere bloccati nei minimi locali. – jorgemf
Per me è piuttosto sconvolgente. Intendi dire che non abbiamo bisogno di pesi poiché abbiamo bisogno solo di informazioni sulla relazione tra le parole, non dei valori "assoluti"? E in tali operazioni matematiche tutti i pesi si cancellerebbero? – WarGoth