word2vec如何正确预测单词但实际数据集不包含它?

How does word2vec predicts the word correctly but the actual dataset does not contain it?

我正在尝试了解 word2vec 如何根据给定的单词列表预测单词。 具体来说,我使用以下参数在 50 万条推文的推特数据上训练了我的 skip-gram 模型:

model = gensim.models.Word2Vec(data, window=5, workers=7, sg=1, min_count=10, size=200)

给定单词 discriminationuberx,我得到以下输出:

model.wv.most_similar(positive=[PorterStemmer().stem(WordNetLemmatizer().lemmatize("discrimination", pos='v')), WordNetLemmatizer().lemmatize("uberx", pos='v')], topn=30)
[('discret', 0.7425585985183716),
 ('fold_wheelchair', 0.7286415696144104),
 ('illeg_deni', 0.7280288338661194),
 ('tradit_cab', 0.7262350916862488),
 ('mobil_aid', 0.7252357602119446),
 ('accommod_disabl', 0.724936842918396),
 ('uberwav', 0.720955491065979),
 ('discrimin_disabl', 0.7206833958625793),
 ('deni_access', 0.7202375531196594),...]

但是,当我搜索我转储到硬盘驱动器上的数据集 data 时,对于单词 "discrimination"、"uberx" 以及输出列表中的任何其他单词,我永远找不到包含所有 3 个单词的数据点的单个实例。所以我的问题是,模型如何知道,比如说,单词 "accommodation disabled" 是上下文 "discrimination" 和 "uberx" 的正确单词,如果它从未在单个单词中同时看到这 3 个单词鸣叫?

skip-gram 模型就像填空题一样工作。比如twitter数据有两条:

1)

现在是夏天。今天是 ___.

现在 ______。今天很热。

2)

现在是冬天。今天是____.

现在 ______。今天很冷。

通过训练一个模型来预测空白,该模型了解到这两个词的表示,无论是(寒冷和冬天)还是(炎热和夏天),应该更接近。

同时,它也学习到"cold"和"summer"之间的距离应该增加,因为当上下文包含"cold"时,空白更可能是"winter",这反过来又抑制了 "summer".

的可能性

因此,即使没有包含 "cold" 和 "summer" 的数据,模型仍然可以学习这两个词之间的关系。

这是我对skip-gram的拙见。欢迎大家讨论:)