我以不同的方式使用 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]
我想知道
为什么我改变句子后结果没有改变?
为什么当我刚刚更新值时结果发生变化?
最佳答案
Word2Vec 作为一种算法需要大量、多样化的数据集来将词向量训练成有意义的排列。
使用玩具大小的训练数据,您不会得到合理的结果,也不会了解算法的行为或优点。
另请注意:
Word2Vec
使用随机初始化和随机采样作为其过程的一部分,因此即使对完全相同的数据进行运行,每次运行也可能会产生不同的结果。然而,有了实际数量和种类的数据,每次运行都应该产生一个与任何其他运行一样有用的模型(即使许多确切的位置/相对排名可能会有所不同)。嵌套的列表,例如您的第一个“句子”(
[["1", "2"], ["1", "3"]]
) ,不是Word2Vec
的有效训练输入。每个“句子”应该是一个简单的字符串标记(单词)列表。
我建议您尝试使用真实的自然语言训练数据,以及真实文本中出现的单词数量和各种对比用法。我建议训练数据至少包含几千个独特的单词,其中每个单词都有 5 个或更多不同的用法示例。
实际上 gensim 中捆绑了一个这样的小型语料库,作为其自测试代码和介绍教程的辅助。它被称为“Lee Corpus”,是一个古老的研究语料库,包含约 300 篇短新闻文章,每篇几百字。您可以在 gensim Word2Vec 教程的“训练您自己的模型”部分查看其使用示例:
https://radimrehurek.com/gensim/auto_examples/tutorials/run_word2vec.html#training-your-own-model
关于python - 了解 gensim Word2Vec most_similar 结果的 3 个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59634935/