问题描述
我试图了解 word2vec 如何在给定单词列表的情况下预测单词。 具体来说,我使用以下参数在 50 万条推文的 twitter 数据上训练了我的 skip-gram 模型:
model = gensim.models.Word2Vec(data, window=5, workers=7, sg=1, min_count=10, size=200)
鉴于词discrimination
和uberx
,我得到以下输出:
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”的正确词?
1楼
skip-gram 模型就像填补空白的问题一样工作。 比如有两个推特数据:
1)
现在是夏天。 今天是 ___。
下雪了。 今天很热。
2)
现在是冬天。 今天是 ____。
下雪了。 今天很冷。
通过训练一个模型来预测空白,模型了解到这两个词的表示,无论是(寒冷和冬天)还是(炎热和夏天),应该更接近。
同时也了解到应该拉大“cold”和“summer”的距离,因为当上下文中包含“cold”时,空白更可能是“winter”,从而抑制了“winter”的可能性。是“夏天”。
因此,即使没有一个数据包含“cold”和“summer”,模型仍然可以学习到这两个词之间的关系。
这是我对skip-gram的拙见。 欢迎大家讨论:)