当前位置: 代码迷 >> python >> word2vec 如何正确预测单词但实际数据集不包含它?
  详细解决方案

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

热度:66   发布时间:2023-07-16 10:54:58.0

我试图了解 word2vec 如何在给定单词列表的情况下预测单词。 具体来说,我使用以下参数在 50 万条推文的 twitter 数据上训练了我的 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 个单词的数据点的单个实例. 所以我的问题是,如果模型从未在一条推文中同时看到这 3 个词,那么它怎么知道“accommodation disabled”这个词是上下文“discrimination”和“uberx”的正确词?

skip-gram 模型就像填补空白的问题一样工作。 比如有两个推特数据:

1)

现在是夏天。 今天是 ___。

下雪了。 今天很热。

2)

现在是冬天。 今天是 ____。

下雪了。 今天很冷。

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

同时也了解到应该拉大“cold”和“summer”的距离,因为当上下文中包含“cold”时,空白更可能是“winter”,从而抑制了“winter”的可能性。是“夏天”。

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

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