在this页面中,据说:
[...] skip-gram反转上下文和目标,并尝试从其目标词预测每个上下文单词[...]
然而,看看它产生的训练数据集,X和Y对的内容似乎是可互换的,因为那两对(X,Y):
(quick, brown), (brown, quick)
那么,为什么在上下文和目标之间区分那么多,如果最终是同一个东西呢?
另外,在做Udacity's Deep Learning course exercise on word2vec时,我想知道为什么他们似乎在这两个方法之间做了很多区别呢:
skip-gram的另一种选择是另一种称为CBOW(连续词袋)的Word2Vec模型。在CBOW模型中,您不是从单词向量预测上下文单词,而是从其上下文中所有单词向量的总和预测单词。实施和评估在text8数据集上训练的CBOW模型。
这不会产生相同的结果吗?
答案 0 :(得分:48)
这是我对这种差异的过分简化和相当幼稚的理解:
如我们所知, CBOW 正在学习根据上下文预测单词。或者通过查看上下文来最大化目标词的概率。这恰好是罕见词语的问题。例如,给定上下文yesterday was a really [...] day
CBOW模型会告诉您该词很可能是beautiful
或nice
。像delightful
这样的单词对模型的关注会少得多,因为它旨在预测最可能的单词。这个词将在很多例子中用更频繁的词来平滑。
另一方面, skip-gram 模型旨在预测上下文。给定delightful
这个词,它必须理解它并告诉我们上下文很可能是yesterday was really [...] day
,或者其他一些相关的上下文。使用 skip-gram ,单词delightful
将不会尝试与单词beautiful
竞争,而是delightful+context
对将被视为新观察。
更新
感谢@ 0xF分享this article
据Mikolov说。
Skip-gram:适用于少量的训练数据,甚至代表罕见的单词或短语。
CBOW:训练的速度比跳过快几倍,对于频繁的单词的准确度略高一些
找到了另一个主题here:
在" skip-gram"模式替代" CBOW"而不是平均 上下文单词,每个用作成对训练的例子。那 取而代之的是一个CBOW示例,例如[预测' ate'从 平均值('','''''鼠标')],网络呈现 四个skip-gram示例[预测' ate'来自''],[预测' ate' 来自' cat'],[预测' ate'来自'],[预测' ate'来自' mouse']。 (同样的随机窗口减少发生,所以有一半的时间 只是两个最近的单词的例子。)
答案 1 :(得分:0)
它与您在任何给定点上计算的具体内容有关。如果您开始查看为每个概率计算包含更大上下文的模型,差异将变得更加清晰。
在skip-gram中,你从句子当前位置的单词计算上下文单词;你跳过"跳过"计算中的当前单词(可能还有一些上下文)。结果可以是多个单词(但如果您的上下文窗口只有一个单词,则不会。)
在CBOW中,您从上下文单词中计算当前单词,因此您只会有一个单词作为结果。