[我以不同的方式使用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中捆绑了一个很小的语料库,以帮助其进行自测代码和入门教程。它被称为“李语料库”,是一种古老的研究语料库,包含大约300篇短消息,每篇文章有数百个单词。您可以在gensim Word2Vec教程的“训练自己的模型”部分中看到其用法的示例:
https://radimrehurek.com/gensim/auto_examples/tutorials/run_word2vec.html#training-your-own-model