Tensorflow word2vec中的NCE损失与普通神经网络

Tensorflow word2vec中的NCE损失与普通神经网络,tensorflow,machine-learning,nlp,word2vec,Tensorflow,Machine Learning,Nlp,Word2vec,当我试图学习更多关于NLP的知识时,我意识到人们在使用NCE损失时没有定义一个连接的NN。更具体地说: # Define Embeddings: embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0)) # NCE loss parameters nce_weights = tf.Variable(tf.truncated_normal([vocabulary_size,

当我试图学习更多关于NLP的知识时,我意识到人们在使用NCE损失时没有定义一个连接的NN。更具体地说:

# Define Embeddings:
embeddings = tf.Variable(tf.random_uniform([vocabulary_size, embedding_size], -1.0, 1.0))

# NCE loss parameters
nce_weights = tf.Variable(tf.truncated_normal([vocabulary_size, embedding_size],
                                               stddev=1.0 / np.sqrt(embedding_size)))
nce_biases = tf.Variable(tf.zeros([vocabulary_size]))

# Create data/target placeholders
x_inputs = tf.placeholder(tf.int32, shape=[batch_size])
y_target = tf.placeholder(tf.int32, shape=[batch_size, 1])
valid_dataset = tf.constant(valid_examples, dtype=tf.int32)

# Lookup the word embedding:
embed = tf.nn.embedding_lookup(embeddings, x_inputs)

# Get loss from prediction
loss = tf.reduce_mean(tf.nn.nce_loss(weights=nce_weights,
                                     biases=nce_biases,
                                     labels=y_target,
                                     inputs=embed,
                                     num_sampled=num_sampled,
                                     num_classes=vocabulary_size))
相反,为什么人们不在最后一层定义一个连接的NN和一个带有sigmoid的激活函数?如果我们使用一种热编码,并且与最常见的值表示无关,那么我的建议是否可行?如果我的问题有点愚蠢,我很抱歉,因为我还不太熟悉NLP


谢谢

与编程无关,更适合姐妹站点。@desertnaut我相信这是一个典型的ML问题。既然“机器学习”标签存在,它可能就属于这里了?关于这一点有很多不同的意见。。。大家的共识似乎是,这里的ML问题与实现/编程问题直接相关,而更具理论/概念色彩的问题(如您的问题)属于CV。。。无论如何,没有什么是一成不变的,这只是我的建议——不管你接受与否:)