gpt4 book ai didi

machine-learning - tensorflow word2vec 示例中权重和偏差的目的是什么?

转载 作者:行者123 更新时间:2023-11-30 08:24:08 26 4
gpt4 key购买 nike

我试图了解如何 word2vec example有效,但并不真正理解传递给 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)

那么模型的第二个组成部分呢?为什么权重和偏见被忽视?

谢谢。

最佳答案

在 word2vec 中,您想要的是单词的向量表示。为此,您可以使用神经网络等。所以你有输入神经元、输出和隐藏层。学习向量表示的方法是建立一个隐藏层,其神经元数量与向量中所需的维度相同。每个字有一个输入,每个字有一个输出。然后训练网络从输出中学习输入,但在中间有一个较小的层,您可以将其视为向量中输入的编码。这是权重和偏差。但稍后您不需要它们,您用于测试的是一个字典,其中包含单词和代表该单词的向量。这比运行神经网络来获取表示更快。这就是为什么你以后看不到它。

你写的关于余弦距离的最后一个代码是为了知道哪些向量与你计算的向量接近。您有一些单词(向量),您进行了一些操作(例如:国王 - 男人 + 女人),然后您有一个要在结果中转换的向量。这是所有向量之间运行的余弦函数(皇后与运算结果向量的距离最小)。

总而言之,您在验证阶段看不到权重和偏差,因为您不需要它们。您使用在训练中创建的字典。

更新 s0urcer 更好地解释了如何创建矢量表示。

网络的输入层和输出层代表单词。这意味着如果该单词不存在,则该值为 0;如果该单词存在,则该值为 1。第一个位置是一个单词,第二个位置是另一个单词,依此类推。您的输入/输出神经元就像单词一样。

中间层是上下文,或者是单词的向量表示。

现在,您使用句子或一组连续单词来训练网络。从这一组中,您取出一个单词并将其设置为输入,其他单词作为网络的输出。所以基本上网络会学习一个单词如何与其上下文中的其他单词相关。

要获得每个单词的向量表示,您将该单词的输入神经元设置为 1 并查看上下文层(中间层)的值。这些值是向量的值。由于除了单词为 1 之外的所有输入均为 0,因此这些值是输入神经元与上下文的连接权重。

稍后你不再使用网络,因为你不需要计算上下文层的所有值,那样会更慢。您只需要在字典中检查该单词的这些值是什么。

关于machine-learning - tensorflow word2vec 示例中权重和偏差的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37982478/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com