我试图了解epochs
函数中的Doc2Vec
参数和epochs
函数中的train
参数。
在以下代码段中,我手动设置了4000次迭代的循环。是否需要或在Doc2Vec中传递4000作为纪元参数足够?另外,epochs
中的Doc2Vec
与train
中的时代有何不同?
documents = Documents(train_set)
model = Doc2Vec(vector_size=100, dbow_words=1, dm=0, epochs=4000, window=5,
seed=1337, min_count=5, workers=4, alpha=0.001, min_alpha=0.025)
model.build_vocab(documents)
for epoch in range(model.epochs):
print("epoch "+str(epoch))
model.train(documents, total_examples=total_length, epochs=1)
ckpnt = model_name+"_epoch_"+str(epoch)
model.save(ckpnt)
print("Saving {}".format(ckpnt))
此外,权重如何以及何时更新?
答案 0 :(得分:4)
您不必手动运行迭代,并且不应多次调用train()
,除非您是出于特殊原因需要这样做的专家。如果您在复制的某个在线示例中看到了此技术,则该示例可能已过时且具有误导性。
使用您首选的通过次数作为train()
参数,调用一次epochs
。
此外,请勿使用低(alpha
)的起始0.001
学习率,然后将其提高到min_alpha
值大25倍(0.025
)的情况。 -这不是应该的工作方式,大多数用户根本不需要调整与alpha
相关的默认设置。 (同样,如果您是从某个地方的在线示例获得此信息-这是一个不好的示例。请让他们知道他们在提供错误的建议。)
此外,4000个训练纪元是非常大的。当处理成千上万到数百万个文档时,在已发表的作品中通常将值设为10-20。如果您的数据集较小,则可能无法与Doc2Vec
配合使用,但是有时更多的纪元(或更小的vector_size
)仍可以从微小数据中学习到可推广的知识-但仍希望使用更近的纪元(不是数千个)。
一个不错的介绍(尽管只有很少的数据集无法与Doc2Vec
一起使用)是doc2vec-lee.ipynb
Jupyter笔记本,它与gensim捆绑在一起,也可以在线查看:
https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-lee.ipynb
祝你好运!