当我必须手动运行迭代时,纪元在Doc2Vec中意味着什么并进行训练?

Suh*_*pta 4 python gensim doc2vec

我试图理解函数中的epochs参数Doc2Vecepochs函数中的参数train

在以下代码片段中,我手动设置了4000次迭代的循环。是否需要或在Doc2Vec中传递4000作为纪元参数足够?另外epochsin Doc2Vec与时代in有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))
Run Code Online (Sandbox Code Playgroud)

此外,权重如何以及何时更新?

goj*_*omo 6

您不必手动运行迭代,并且除非您是出于非常特定的原因而需要这样做的专家,否则不应train()多次调用。如果您在复制的某个在线示例中看到了此技术,则该示例可能已过时且具有误导性。

调用train()一次,并将您的首选通过次数作为epochs参数。

另外,请勿使用alpha较低的(0.001)初始学习率,然后将其提高到min_alpha大于(25 0.025)的值-这不是应该的工作方式,并且大多数用户不需要调整与- alpha相关的默认值完全没有 (同样,如果您是从某个地方的在线示例中获得此信息,那将是一个糟糕的示例。请让他们知道他们在提供错误的建议。)

而且,4000个训练纪元是非常大的。当处理成千上万到数百万个文档时,在已发表的作品中通常使用10-20的值。如果您的数据集较小,则可能无法很好地使用Doc2Vec,但是有时更多的纪元(或更小的纪元vector_size)仍可以从微小数据中学习到一些可推广的知识-但仍希望使用更近的纪元(而不是数千个纪元)。

不错的介绍(尽管只有很少的数据集, Doc2Vec)是与doc2vec-lee.ipynbgensim捆绑在一起的Jupyter笔记本,也可以在以下位置在线查看:

https://github.com/RaRe-Technologies/gensim/blob/develop/docs/notebooks/doc2vec-lee.ipynb

祝好运!