Python gensim/docs/notebooks/doc2vec-lee.ipynb结果不可重复
根据本github教程:gensim/docs/notebooks/doc2vec-lee.ipynb 我应该得到大约96%的准确率 以下是使用jupyter 4.3.1笔记本电脑上的gensim 0.13.4的代码,全部来自Anaconda NavigatorPython gensim/docs/notebooks/doc2vec-lee.ipynb结果不可重复,python,doc2vec,Python,Doc2vec,根据本github教程:gensim/docs/notebooks/doc2vec-lee.ipynb 我应该得到大约96%的准确率 以下是使用jupyter 4.3.1笔记本电脑上的gensim 0.13.4的代码,全部来自Anaconda Navigator import gensim import os import collections import smart_open import random # Set file names for train data test_data
import gensim
import os
import collections
import smart_open
import random
# Set file names for train data
test_data_dir='{}'.format(os.sep).join \
([gensim.__path__[0],'test','test_data'])
lee_train_file = test_data_dir + os.sep + 'lee_background.cor'
def read_corpus(fname, tokens_only=False):
with smart_open.smart_open(fname, encoding="iso-8859-1") as f:
for i, line in enumerate(f):
if tokens_only:
yield gensim.utils.simple_preprocess(line)
else:
# For training data, add tags
yield gensim.models.doc2vec.TaggedDocument \
(gensim.utils.simple_preprocess(line), [i])
train_corpus = list(read_corpus(lee_train_file))
model = gensim.models.doc2vec.Doc2Vec(size=50, min_count=2, iter=10)
model.build_vocab(train_corpus)
model.train(train_corpus)
ranks = []
second_ranks = []
for doc_id in range(len(train_corpus)):
inferred_vector = model.infer_vector(train_corpus[doc_id].words)
sims = model.docvecs.most_similar([inferred_vector] \
, topn=len(model.docvecs))
rank = [docid for docid, sim in sims].index(doc_id)
ranks.append(rank)
second_ranks.append(sims[1])
collections.Counter(ranks)
在模型评估教程中:
它们的产出是:
Counter({0: 292, 1: 8})
我越来越
Counter({0: 31,
1: 24,
2: 16,
3: 19,
4: 16,
5: 8,
6: 8,
7: 10,
8: 7,
9: 10,
10: 12,
11: 12,
12: 5,
13: 9,
...
为什么我没有得到接近他们准确度的东西?谢谢你发现了。由于随机初始化和不同的操作系统数字库,在如此小的语料库上,准确性和类似文档差异很大。我在教程中删除了对准确性的引用 要获得可重复的doc2vec结果,需要大量语料库和数十小时的训练
同样在Gensim邮件列表上我感谢上面@Lev Konst的回复。正如他也提到的,这在Gensim邮件列表中得到了回答 模型=gensim.models.doc2vec.doc2vec(尺寸=55,最小计数=2,iter=60,hs=1,负数=0)生产:
Wall time: 12.5 s
Counter({0: 292, 1: 8})
Wall time: 12 s
Counter({0: 291, 1: 9})
Wall time: 16.4 s
Counter({0: 290, 1: 10})
Wall time: 20.6 s
Counter({0: 295, 1: 5})
Wall time: 21.3 s
Counter({0: 292, 1: 8})
Wall time: 20.6 s
Counter({0: 292, 1: 8})
Wall time: 16.7 s
Counter({0: 296, 1: 4})
Wall time: 15.4 s
Counter({0: 292, 1: 8})
Wall time: 15.3 s
Counter({0: 295, 1: 5})
Wall time: 14.8 s
Counter({0: 292, 1: 8})
看起来,增加迭代次数和/或添加hs=1,负=0将产生更接近笔记本的结果
hs=1,负值=0似乎产生了更好的结果,尽管平均而言。
如果只增加迭代次数,那么在某些运行中,将有一些秩,而不是0或1
然而,正如我们可以看到的那样,hs=1,负值=0,排名都在前两名的范围内
然而,我在gensim google groups列表中得知,如果数据集的大小低于最佳精度,则可能会出现更多变化
谢谢john欢迎来到SO!你的问题缺乏基本格式,也不清楚你在问什么。尝试编辑问题,并显示解决问题所采取的步骤。此外,除非完全必要,否则避免提及外部链接。请阅读: