【问题标题】:Skip gram in word2vec - what is the number of outputs在 word2vec 中跳过 gram - 输出的数量是多少
【发布时间】:2018-04-12 01:32:22
【问题描述】:

下面的图片经常被用来描述带有skip-gram的word2vec模型:

但是,在stackoverflow上阅读this discussion之后,似乎word2vec实际上以1个单词和输入和1个单词作为输出。输出词是从窗口中随机采样的。 (这会执行 X 次以生成 X 个输入/输出对。)

在我看来,上面的图像没有正确描述网络。我的问题是:是 1 输入/1 输出标准(Tensorflow word2vec 教程采用这种方法并将其称为 skip-gram)还是某些网络实际上采用了上图的结构?

【问题讨论】:

    标签: word2vec


    【解决方案1】:

    这不是一个很好的图表。

    在 CBOW 中,这些收敛箭头是一次发生的平均,以创建一个单一的“训练示例”(期望的预测),即 (average(context1, context2, ..., contextN) -> 目标-单词)。 (实际上,平均比图中显示的“SUM”更常见。)

    在 Skip-Gram 中,那些发散的箭头是一个接一个地进行的多个训练示例(期望的预测)。

    在这两个图中,虽然它们看起来有点像神经网络节点架构,但实际的隐藏层和内部连接权重只是隐含在中间列到右列的箭头内。

    Skip-gram 始终是 1 个“输入”上下文词,用于预测附近(在有效“窗口”内)的 1 个“输出”目标词。

    实现倾向于遍历整个有效窗口,因此每个(上下文 -> 目标)对都被用作训练示例。在实践中,如果你认为中心词是目标词和它周围的每个词都是上下文词,或者中心词是上下文词和它周围的每个词都是目标词,这并不重要——两者方法导致训练完全相同的一组(单词->单词)对,只是迭代顺序略有不同。 (我相信最初的 Word2Vec 论文以一种方式描述了它,但后来 Google 发布的代码以另一种方式进行了描述,原因是缓存效率略高。)

    实际上,对于所考虑的每个中心词,有效窗口被选择为从 1 到配置的最大 window 值的某个随机数。事实证明,这实际上是一种廉价的方式,可以对更近的词进行加权:直接的邻居总是训练对的一部分,有时只是更远的词。也就是说,对不是从整个窗口中随机采样的——它只是一个随机的窗口大小。 (还有另一个下采样,其中最常用的词将被随机丢弃,以免过度训练它们而牺牲不常用的词,但这是一个完全独立的过程,没有反映在上面。)

    在 CBOW 中,最多有 2*window 输入-输出对的 (context-word -> target-word) 形式,有一个输入-输出对 (context-words-average -> target-单词)。 (在 CBOW 中,循环为一个中心词创建单个 N:1 训练示例的平均值,然后将反向传播的错误拆分到所有贡献的词中。在 skip-gram 中,循环创建多个交替的 1:1 训练-一个中心词的例子。)

    【讨论】:

      猜你喜欢
      • 2019-02-01
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 2019-10-15
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      相关资源
      最近更新 更多