word2vec - word2vec 中的 Skip gram - 输出数量是多少

标签 word2vec

下面的图像通常用来描述带有skip-gram的word2vec模型:

enter image description here

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

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

最佳答案

这不是一个很好的图表。

在 CBOW 中,这些收敛箭头是一次性发生的平均值,用于创建一个“训练示例”(所需的预测),即 (average(context1, context2, ..., contextN) -> target -单词)。 (实际上,平均比图中所示的“SUM”更常见。)

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

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

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

实现往往会迭代整个有效窗口,因此每个(上下文 -> 目标)对都被用作训练示例。在实践中,如果您将中心词视为目标词及其周围的每个词作为上下文词,或者将中心词视为上下文词及其周围的每个词作为目标词,这并不重要 - 两者都可以方法会导致训练完全相同的一组(单词 -> 单词)对,只是迭代顺序略有不同。 (我相信最初的 Word2Vec 论文以一种方式描述了它,但后来 Google 发布的代码以另一种方式进行了处理,因为缓存效率稍好一些。)

事实上,对于所考虑的每个中心词,有效窗口被选择为从 1 到配置的最大窗口值之间的某个随机数。事实证明,这是一种本质上对较近的单词赋予更多权重的廉价方法:最接近的单词始终是训练对的一部分,有时只是更远的单词。也就是说,对不是从整个窗口中随机采样的 - 它只是随机的窗口大小。 (还有另一种下采样,其中最频繁的单词将被随机丢弃,以免以不太频繁的单词为代价而过度训练它们,但这是一个完全独立的过程,上面没有反射(reflect)出来。)

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

关于word2vec - word2vec 中的 Skip gram - 输出数量是多少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49766360/

相关文章:

scikit-learn - 可视化从gensim生成的word2vec

python - 使用 DBSCAN 聚类 word2vec 输出的故障排除技巧

scala - 是否可以将 word2vec 预训练的可用向量加载到 Spark 中?

python - 使用 embedding_vector 实现 Word2Vec 模型时出错

c - fastText 和 word2vec : NaNs in accuracy computation code

python - 在 Keras 上合并图层(点积)

python - Tensorflow - 在 tensorflow.models.embeddings 中没有名为 'embeddings' 的模块

java - RNTN在java中的实现

machine-learning - Word2Vec:单词不在词汇表中,尽管它在语料库中

python - 无法在 <module 'Word2VecKeyedVectors' > 上获取属性 'gensim.models.keyedvectors'