gpt4 book ai didi

python - 为什么 Doc2vec 为相同的文本提供 2 个不同的向量

转载 作者:太空狗 更新时间:2023-10-30 02:15:28 27 4
gpt4 key购买 nike

我正在使用 Doc2vec 从单词中获取向量。请看我下面的代码:

from gensim.models.doc2vec import TaggedDocument
f = open('test.txt','r')

trainings = [TaggedDocument(words = data.strip().split(","),tags = [i]) for i,data in enumerate(f)


model = Doc2Vec(vector_size=5, epochs=55, seed = 1, dm_concat=1)

model.build_vocab(trainings)
model.train(trainings, total_examples=model.corpus_count, epochs=model.epochs)

model.save("doc2vec.model")

model = Doc2Vec.load('doc2vec.model')
for i in range(len(model.docvecs)):
print(i,model.docvecs[i])

我有一个 test.txt 文件,它的内容有 2 行,这两行的内容是相同的(它们是“a”)我用 doc2vec 训练并得到了模型,但问题是虽然 2 行的内容相同,但 doc2vec 给了我 2 个不同的向量。

0 [ 0.02730868  0.00393569 -0.08150548 -0.04009786 -0.01400406]
1 [ 0.03916578 -0.06423566 -0.05350181 -0.00726833 -0.08292392]

我不知道为什么会这样。我认为这些向量是相同的。你能解释一下吗?如果我想为相同的词制作相同的向量,在这种情况下我应该怎么做?

最佳答案

Doc2Vec(和 Word2Vec)算法中存在固有的随机性,例如初始向量已经是随机的,即使对于相同的句子也是不同的。您可以评论 model.train 调用并亲自查看。

详细信息,如果您感兴趣:向量在构建 vocab 后立即初始化:在您的情况下,它是 model.build_vocab(...) 调用,后者又调用 model.reset_doc_weights() 方法(参见 gensim/models/doc2vec.py 处的源代码),它随机初始化所有向量,无论句子是什么。如果此时您重置初始化并分配相等的向量,它们应该不会再发散了。

理论上,如果您训练相同的句子足够长,即使初始化不同,算法也应该收敛到相同的向量。但实际上,这不会发生,我认为您不应该为此担心。

关于python - 为什么 Doc2vec 为相同的文本提供 2 个不同的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50362506/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com