代码之家  ›  专栏  ›  技术社区  ›  Suhail Gupta

当我不得不手动运行迭代时,在doc2vec和train中epochs是什么意思?

  •  3
  • Suhail Gupta  · 技术社区  · 7 年前

    我在努力理解 epochs 中的参数 Doc2Vec 功能和 时代 中的参数 train 功能。

    在下面的代码片段中,我手动设置了一个4000次迭代的循环。在doc2vec中是否需要或传递4000作为epochs参数就足够了?以及如何 时代 在里面 DOC2矢量 与时代不同 火车 是吗?

    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))
    

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

    1 回复  |  直到 7 年前
        1
  •  5
  •   gojomo    7 年前

    您不必手动运行迭代,而且 不应该 呼叫 train() 不止一次,除非你是专家,因为非常具体的原因需要这样做。如果你已经在你正在复制的一些在线例子中看到了这种技术,那么这个例子很可能已经过时了,并且具有误导性。

    呼叫 训练() 一次,用你喜欢的传球次数作为 epochs 参数。

    另外,不要用开始 alpha 学习率低( 0.001 )然后上升到 min_alpha 值大25倍( 0.025 )-这不是应该的工作方式,大多数用户不需要调整 阿尔法 -相关的违约。(同样,如果你是从某个地方的在线例子中得到这个结果的话——那是个糟糕的例子。让他们知道他们给出了错误的建议。)

    另外,4000个训练阶段的规模也大得离谱。当处理数万到数百万的文档时,10-20的值在已发表的作品中很常见。如果数据集较小,则可能无法很好地处理 Doc2Vec ,但有时更多的时代(或更小 vector_size )仍然可以从微小的数据中学习一些可概括的东西,但仍然希望使用接近几十个时代(而不是数千个)。

    一个好的介绍(尽管有一个很小的数据集 DOC2矢量 doc2vec-lee.ipynb Jupyter笔记本,与Gensim捆绑在一起,也可以在以下网站上查看:

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

    祝你好运!