Nlp CBOW v.s.skip gram:为什么要颠倒上下文和目标词?

Nlp CBOW v.s.skip gram:为什么要颠倒上下文和目标词?,nlp,tensorflow,deep-learning,word2vec,word-embedding,Nlp,Tensorflow,Deep Learning,Word2vec,Word Embedding,在第页,据说: […]skip gram反转上下文和目标,并尝试从目标词预测每个上下文词[…] 但是,查看它生成的训练数据集,X和Y对的内容似乎是可交换的,因为这两对(X,Y): (快速,棕色),(棕色,快速) 那么,如果最终是同一件事,为什么要在上下文和目标之间区分那么多呢 另外,我想知道,为什么他们在这个问题上似乎对这两种方法有这么大的区别: 另一种跳过gram的方法是另一种称为CBOW(连续词包)的Word2Vec模型。在CBOW模型中,不是从单词向量预测上下文单词,而是从上下文中所有单词

在第页,据说:

[…]skip gram反转上下文和目标,并尝试从目标词预测每个上下文词[…]

但是,查看它生成的训练数据集,X和Y对的内容似乎是可交换的,因为这两对(X,Y):

(快速,棕色),(棕色,快速)

那么,如果最终是同一件事,为什么要在上下文和目标之间区分那么多呢

另外,我想知道,为什么他们在这个问题上似乎对这两种方法有这么大的区别:

另一种跳过gram的方法是另一种称为CBOW(连续词包)的Word2Vec模型。在CBOW模型中,不是从单词向量预测上下文单词,而是从上下文中所有单词向量的总和预测单词。实施并评估在text8数据集上培训的CBOW模型


这难道不会产生相同的结果吗?

这与你在任何给定点上精确计算的内容有关。如果你开始研究为每种概率计算加入更大背景的模型,差别就会变得更明显

在skip gram中,您正在根据句子中当前位置的单词计算上下文单词;您正在计算中“跳过”当前单词(可能还有一点上下文)。结果可以是多个单词(但如果上下文窗口只有一个单词长,则不能)


在CBOW中,您正在根据上下文单词计算当前单词,因此您将只能得到一个单词

以下是我对差异的过于简单和天真的理解:

正如我们所知,CBOW正在学习根据上下文预测单词。或者通过观察上下文来最大化目标词的概率。而这恰好是罕见词汇的一个问题。例如,考虑到上下文
昨天真的是[…]天
CBOW模型将告诉您,最有可能的单词是
美丽
漂亮
。像
delicious
这样的单词将很少受到模型的关注,因为它被设计用来预测最可能的单词。这个词将在许多例子中用更频繁的词加以修饰

另一方面,设计了跳过gram模型来预测上下文。考虑到“令人愉快”这个词,它必须理解它,并告诉我们,上下文很可能是“昨天真的是[…]天”,或者其他相关上下文。使用skip gram时,单词
delicious
不会试图与单词
beautiful
竞争,相反,
delicious+context
对将被视为新的观察结果

更新

感谢@0xF的分享

据米科洛夫说

跳过语法:适用于少量的训练数据,甚至可以很好地表示罕见的单词或短语

CBOW:训练速度比skip gram快几倍,对常用词的准确度略高

该主题还有一个补充内容:

在“跳过克”模式下,替代“CBOW”,而不是平均 上下文单词,每一个都用作成对的训练示例。那个 是,代替一个CBOW示例,例如[predict'ate'from] 平均值('The','cat','The','mouse')),网络显示为 四个skip gram示例[predict'ate'from'The'],[predict'ate' 来自“猫”],[预测“吃”来自“老鼠”],[预测“吃”来自“老鼠”]。 (发生相同的随机窗口缩减,因此只有 请举两个最接近的单词的例子。)


我仍然不清楚两者之间的区别,唯一似乎有所改变的是句子开头和结尾附近的单词填充:在一个模型中,输入大小或输出大小上的单词总数会更多,这取决于相同单词的显示频率。在一个无限长的句子中,这两个模型不会有我正在介绍的不相等填充的概念。例如,如何在我发送的Udacity链接中更改模型的配置?在我看来,只有用输入示例交换标签才行,但这不可能是真的,差别太小了……这篇quora帖子[说skip gram需要的训练数据比cbow少,这与你的评论正好相反。你能通过发表的论文证明你的答案吗?谢谢你指出这一点!那篇文章中提供的解释很有意义,因此我更新了我的答案。