在浏览TensorFlow word2vec tutorial时,我很难按照教程关于将输入存储到skip-gram模型的占位符的说明。解释说明
skip-gram模型有两个输入。一个是一整批整数 表示源上下文单词,另一个表示目标单词...现在我们需要做的是查找批处理中每个源单词的向量...现在我们有每个单词的嵌入,我们我想尝试预测目标词。
但是,由于我们使用的是skip-gram模型(而不是CBOW),我们不应该为每个目标单词查找单词vector,然后预测给定目标单词的上下文单词?
此外,我假设下面的代码首先声明目标词(输入)的占位符,然后是源上下文词(我们的标签)的占位符。
train_inputs = tf.placeholder(tf.int32, shape=[batch_size])
train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])
我误解了教程吗?
答案 0 :(得分:0)
skip-gram教程假设您的数据集如下所示:
(快速,),(快速,棕色),(棕色,快速),(棕色,狐狸),......
用作对(输入,输出)=(center_word,context_word)。
事实上,如果你对多个(输入,输出)对进行平均,你将获得类似于在每个例子中预测每个上下文单词的行为。
这种选择也可以通过使用NCE作为损失函数来证明,并且NCE试图在一些噪声词(随机选择)中区分单个目标词(上下文中的一个词)。
您的输入和输出占位符应具有相同的维度(batch_size,1)
,但输入只是(batch_size)
,因为嵌入图层会自动扩展维度,而损失函数(您提供标签的位置)需要一个矩阵作为输入
因此,本教程并不是Mikolov的skip-gram模型的精确实现,而是为了代码简单性和可读性而进行了一些近似。