【问题标题】:TensorFlow word2vec tutorial inputTensorFlow word2vec 教程输入
【发布时间】:2017-08-27 04:32:39
【问题描述】:

在浏览 TensorFlow word2vec tutorial 时,我很难按照教程中关于将输入存储到 skip-gram 模型的占位符的说明进行操作。解释指出

skip-gram 模型需要两个输入。一个是一个满是整数的batch 表示源上下文词,另一个是目标词......现在我们需要做的是查找批处理中每个源词的向量......现在我们有了每个词的嵌入,我们'想尝试预测目标词。

但是,由于我们使用的是 skip-gram 模型(而不是 CBOW),我们是否应该改为查找每个目标词的词向量,然后根据目标词预测上下文词?

此外,我假设下面的代码首先为目标词(输入)声明一个占位符,然后为源上下文词(我们的标签)声明一个占位符。

train_inputs = tf.placeholder(tf.int32, shape=[batch_size])
train_labels = tf.placeholder(tf.int32, shape=[batch_size, 1])

我误解了教程吗?

【问题讨论】:

    标签: tensorflow word2vec


    【解决方案1】:

    skip-gram 教程假设您的数据集是这样的:

    (quick, the), (quick, brown), (brown, quick), (brown, fox), ...

    它打算作为对(输入,输出)=(中心字,上下文字)。

    事实上,如果您对多个(输入、输出)对进行平均,您将获得类似于在每个示例中预测每个上下文词的行为。

    使用 NCE 作为损失函数也证明了这种选择是合理的,并且 NCE 试图在一些噪声词(随机选择)中区分单个目标词(上下文的词之一)。

    您的输入和输出占位符应该具有相同的维度(batch_size,1),但输入只是(batch_size),因为嵌入层会自动扩展维度,而损失函数(您提供标签的位置)需要一个矩阵作为输入。

    所以,本教程并不是 Mikolov 的 skip-gram 模型的精确实现,而是为了代码的简单性和可读性做了一些近似。

    【讨论】:

    • 所以输入是中心词,标签是上下文词?我将“目标词”解释为指的是那些中心词。来自教程:“回想一下,skip-gram 反转上下文和目标,并尝试从其目标词预测每个上下文词”。
    • 我们说的是同一件事。给定一个像context1 context2 center context3 context4 这样的上下文,你把它翻译成像(center, context1), (center, context2), (center, context3) 这样的对。所以你的输入是上下文的中心词,你的输出是上下文的词之一
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2017-10-17
    • 1970-01-01
    • 2018-06-29
    相关资源
    最近更新 更多