【问题标题】:How does word2vec predicts the word correctly but the actual dataset does not contain it?word2vec 如何正确预测单词但实际数据集不包含它?
【发布时间】:2020-03-22 07:00:22
【问题描述】:

我试图了解 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 个单词。所以我的问题是,如果模型从未在一条推文中同时看到这 3 个词,那么模型如何知道,例如,“accommodation disabled”这个词是上下文“discrimination”和“uberx”的正确词?

【问题讨论】:

    标签: python nlp word2vec


    【解决方案1】:

    skip-gram 模型的工作原理类似于填空问题。比如有两个推特数据:

    1)

    现在是夏天。今天是___。

    现在是______。今天很热。

    2)

    现在是冬天。今天是____。

    现在是______。今天很冷。

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

    同时,它还了解到“寒冷”和“夏天”之间的距离应该增加,因为当上下文包含“寒冷”时,空白更可能是“冬天”,这反过来又抑制了成为“夏天”的可能性。

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

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

    【讨论】:

    • 我要补充一点:这种行为不仅是 skip-gram 模式,还有替代的 CBOW 模式。通过 word2vec 的重复训练传递训练数据,以及将单词表示为密集(或者可能是“压缩”)嵌入的强制效果,在一个比所有已知单词的计数小得多的维度空间中,以及隐藏的方式到输出的权重在所有输入到输出的预测路径之间共享,迫使相似预测的词被强制进入同一个“邻居”,即使它们从未共同出现。 (只需要与其他相似词的共现模式。)
    猜你喜欢
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-01
    相关资源
    最近更新 更多