CBOW v.s. skip-gram:为什么要反转上下文和目标词?

时间:2016-07-10 01:21:35

标签: nlp tensorflow deep-learning word2vec word-embedding

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模型。

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

2 个答案:

答案 0 :(得分:48)

这是我对这种差异的过分简化和相当幼稚的理解:

如我们所知, CBOW 正在学习根据上下文预测单词。或者通过查看上下文来最大化目标词的概率。这恰好是罕见词语的问题。例如,给定上下文yesterday was a really [...] day CBOW模型会告诉您该词很可能是beautifulnice。像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中,您从上下文单词中计算当前单词,因此您只会有一个单词作为结果。