【问题标题】:Understanding gensim Word2Vec most_similar results for 3 words了解 gensim Word2Vec most_similar 结果为 3 个词
【发布时间】:2020-01-07 19:31:03
【问题描述】:

我使用 3 个单词“1”、“2”、“3”以不同的方式构造句子,并观察到每个单词的词向量都没有变化。

以下是不同的句子

类型 1:[["1", "2"], ["1", "3"]]

类型 2:[["1", "2", "3"]]

类型 3:[["1", "2"], ["3"]]

我正在训练Word2Vec模型如下

model = Word2Vec(sentences,min_count=1,size=2)
print (model.wv.most_similar("1"))
print (model.wv.most_similar("2"))
print (model.wv.most_similar("3"))
print (model.wv['1'])
print (model.wv['2'])
print (model.wv['3'])

改变句子类型的结果是一样的

[('3', 0.5377859473228455), ('2', -0.5831003785133362)]
[('1', -0.5831003189086914), ('3', -0.9985027313232422)]
[('1', 0.5377858281135559), ('2', -0.9985026717185974)]
[-0.24893647 -0.24495095]
[ 0.19231372 -0.03319569]
[-0.22207274  0.05098101]

当我将单词“1”更改为假设“101”时,结果也会发生变化

[('3', 0.5407046675682068), ('2', -0.5859125256538391)]
[('101', -0.5859125256538391), ('3', -0.9985027313232422)]
[('101', 0.540704607963562), ('2', -0.9985026717185974)]
[-0.05898098 -0.0576357 ]
[ 0.19231372 -0.03319569]
[-0.22207274  0.05098101]

我想知道

  1. 为什么换句后结果没有变化?

  2. 为什么我刚刚更新值时结果会改变?

【问题讨论】:

    标签: python nlp gensim word2vec


    【解决方案1】:

    Word2Vec 作为一种算法,需要大量多样的数据集来将词向量训练成有意义的排列。

    使用玩具大小的人为训练数据,您不会得到合理的结果,也不会了解算法的行为或好处。

    另请注意:

    • Word2Vec 使用随机初始化和随机采样作为其过程的一部分,因此即使在完全相同的数据上运行,每次运行也可能产生不同的结果。但是,对于实际数量和种类繁多的数据,每次运行都应该产生一个与任何其他运行一样有用的模型(即使许多确切的位置/相对排名可能会有所不同)。

    • 嵌套的列表列表,例如您的第一个“句子”([["1", "2"], ["1", "3"]]),对于 Word2Vec 来说不是有效的训练输入。每个“句子”应该是一个简单的字符串标记(单词)列表。

    我建议您尝试使用真实文本中出现的单词数量和各种对比用法的真实自然语言训练数据。我建议训练数据至少有几千个独特的词,每个词有 5 个或更多不同的用法示例。

    在 gensim 中实际上捆绑了一个这样的小型语料库,作为其自测代码和介绍教程的辅助工具。它被称为“李语料库”,是一个古老的研究语料库,包含大约 300 篇短新闻文章,每篇文章几百字。您可以在 gensim Word2Vec 教程的“训练您自己的模型”部分查看其使用示例:

    https://radimrehurek.com/gensim/auto_examples/tutorials/run_word2vec.html#training-your-own-model

    【讨论】:

    • [["my", "name", "is", "harry"], ["Your", "name", "is", "Ron"]] 是一个有效的句子列表?同样 [["1", "2"], ["1", "3"]] 也是一个有效的列表,对吧?也同意它需要大数据集。但在这种情况下,“1”不应该与“2”和“3”同样相似吗?
    • 是的,[["1", "2"], ["1", "3"]] 将作为所有示例的序列 (sentences) 有效。但不是一个句子——我没有意识到你所有的“Type 1”、“Type 2”等例子都在替换sentences
    • 有了这么小的人为数据集,对于最终结果“应该”或“不应该”是什么情况,真的无话可说。特别是,即使在您的语料库中,使用上下文完全相同的词也不一定会出现在同一个地方,或者与其他参考词“同样”相似,因为初始化和训练的固有随机性模型。您应该只期待有意义的结果,这些结果与合理预期与更大、不同的训练数据相匹配。 (即使在那里,也没有精确的等式,只是粗略的相关性。)
    猜你喜欢
    • 2019-07-01
    • 1970-01-01
    • 2018-06-16
    • 1970-01-01
    • 2018-07-21
    • 2022-01-19
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多