CBOW与skip-gram:为什么要颠倒上下文和目标词?

54
此页面中,它说:

[...] skip-gram反转了上下文和目标,并试图从其目标单词预测每个上下文单词 [...]

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

(quick, brown), (brown, quick)

那么,如果最终结果相同,为什么还要区分上下文和目标呢?

此外,在Udacity的Deep Learning课程中练习word2vec时,我想知道为什么他们在这个问题上如此强调这两种方法的不同:

与skip-gram的另一种Word2Vec模型CBOW(Continuous Bag of Words)相比,CBOW模型中,您预测一个单词的向量的上下文单词而不是从上下文单词预测单词向量。实现并评估在text8数据集上训练的CBOW模型。

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

3个回答

107
以下是我对这个问题过于简化和天真的理解:
我们知道,CBOW模型学习通过上下文来预测单词,或者说通过查看上下文最大化目标单词的概率。然而,这对于罕见单词来说是一个问题。例如,在给出上下文“昨天是一天真的[...]”的情况下,CBOW模型会告诉你最有可能的单词是“美丽”或“好”。像“愉快”的单词将得到模型更少的关注,因为它的设计是预测最有可能的单词。这个单词会被更频繁出现的单词的很多例子所平滑掉。
另一方面,skip-gram模型旨在预测上下文。给定单词“愉快”,它必须理解这个单词并告诉我们上下文极有可能是“昨天是一天真的[...]”或其他相关上下文。使用skip-gram模型,“愉快”这个单词不会与“美丽”这个单词竞争,而是会将“愉快+上下文”配对作为新的观察结果进行处理。
更新:感谢@0xF分享这篇文章
根据Mikolov的说法:
skip-gram模型:在少量训练数据下表现良好,能很好地表示罕见单词或短语。
CBOW模型:比skip-gram模型快几倍的训练速度,对于频繁出现的单词精度略高。
另外还有一篇关于这个话题的补充内容,可以在这里找到。在“skip-gram”模式中,与“CBOW”相比,不是将上下文单词求平均值,而是将每个上下文单词用作成对的训练示例。也就是说,网络会接收到四个skip-gram示例,即[predict 'ate' from 'The'],[predict 'ate' from 'cat'],[predict 'ate' from 'the']和[predict 'ate' from 'mouse'],而不是一个CBOW示例,例如[predict 'ate' from average('The', 'cat', 'the', 'mouse')]。(同样会发生随机窗口缩小,因此有一半的时间只会出现最近单词的两个示例。)

2
这篇Quora帖子[https://www.quora.com/What-are-the-continuous-bag-of-words-and-skip-gram-architectures]说skip-gram训练所需的数据比cbow更少,与您发表的评论形成了相反的观点。您能否通过任何已发表的论文等来证明您的回答? - 0xF
2
谢谢指出这个问题!那篇文章提供的解释很有道理,所以我已经更新了我的答案。 - Serhiy

1
这与你在任何给定点计算的确切内容有关。如果您开始查看包含每个概率计算更大上下文的模型,差异将变得更加清晰。
在skip-gram中,您正在从句子中当前位置的单词“跳过”当前单词(以及可能的一些上下文)来计算上下文单词。结果可以是一个以上的单词(但如果您的上下文窗口只有一个单词长,则不会超过一个单词)。
在CBOW中,您正在从上下文单词计算当前单词,因此您将始终只有一个单词作为结果。

我仍然不清楚它们之间的区别,唯一似乎发生变化的是句子开头和结尾附近单词的填充方式:在一个模型中,输入大小或输出大小中将有更多的总单词数,或者说同样的单词被显示的频率更高。在一个无限长的句子中,这两个模型不会有我正在介绍的不平等填充概念。 - Guillaume Chevalier
作为一个例子,如果要更改我发送的Udacity链接中模型的配置,应该怎么做?在我看来,只是用输入示例替换标签就可以了,但这不可能是真的,因为差别会如此微不足道... - Guillaume Chevalier

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接