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调用进行评论,并亲自查看.
详细信息如果你感兴趣:在构建词汇后立即初始化向量:在你的情况下,它是model.build_vocab(…)调用,它又调用model.reset_doc_weights()方法(参见gensim/models/doc2vec.py
的源代码) ),无论句子是什么,它都会随机初始化所有向量.如果此时你重置初始化并分配相等的向量,它们不应再分叉.
从理论上讲,如果训练相同的句子足够长,即使初始化程度不同,算法也应收敛到同一个向量.但实际上,它不会发生,我认为你不应该担心这一点.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。