什么是doc2vec训练迭代?

3 python gensim word2vec deep-learning doc2vec

我是doc2vec的新手.我最初试图理解doc2vec,下面提到的是我使用Gensim的代码.正如我所希望的,我得到了两个文件的训练模型和文档向量.

但是,我想知道在几个时代重新训练模型的好处以及如何在Gensim中进行训练?我们可以使用iteralpha参数来做,还是我们必须单独训练它for loop?请让我知道如何更改以下代码以训练20个epoches的模型.

此外,我有兴趣知道word2vec模型还需要多次训练迭代.

# Import libraries
from gensim.models import doc2vec
from collections import namedtuple

# Load data
doc1 = ["This is a sentence", "This is another sentence"]

# Transform data
docs = []
analyzedDocument = namedtuple('AnalyzedDocument', 'words tags')
for i, text in enumerate(doc1):
    words = text.lower().split()
    tags = [i]
    docs.append(analyzedDocument(words, tags))

# Train model
model = doc2vec.Doc2Vec(docs, size = 100, window = 300, min_count = 1, workers = 4)

# Get the vectors
model.docvecs[0]
model.docvecs[1]
Run Code Online (Sandbox Code Playgroud)

goj*_*omo 7

Word2Vec和相关的算法(如'Paragraph Vectors'又名Doc2Vec)通常会对文本语料库进行多次训练.

如果您还在对象初始化中提供语料库以触发即时训练,则Gensim的Word2Vec/ Doc2Vec允许iter参数指定传递次数.(上面的代码通过提供构造函数调用docs来完成此操作Doc2Vec(docs, ...).)

如果未指定,itergensim使用的默认值为5,以匹配Google原始word2vec.c版本使用的默认值.所以上面的代码已经使用了5个培训通行证.

已发表的Doc2Vec作品通常使用10-20次.如果您想要执行20次传递,则可以将Doc2Vec初始化更改为:

model = doc2vec.Doc2Vec(docs, iter=20, ...)
Run Code Online (Sandbox Code Playgroud)

因为Doc2Vec经常为每个文档使用唯一标识符标记,所以更多的迭代可能更重要,因此随着模型的逐步改进,每个doc-vector都会在培训过程中多次进行培训.另一方面,因为Word2Vec语料库中的单词可能出现在整个语料库中的任何位置,所以每个单词的相关向量将在模型改进的过程中在过程的早期和中期以及后期进行多次调整 - 即使只进行一次通过.(因此,对于一个巨大的,不同的Word2Vec语料库,使用少于默认通道数的思维是可以想象的.)

不需要自己进行循环,大多数用户不应该这样做.如果你做管理的独立build_vocab()train()步骤你自己,而不是供应的更简单的步骤docs在初始化呼叫语料库触发即时的训练,那么你必须提供一个epochs参数train()-它会执行的遍数,所以你仍然只需要一个电话train().

  • 像这样召唤`train()`10次有很多问题.如果你的呼叫没有错误,并且你将默认的'iter`保留为5,那么每个呼叫都会进行5次传递 - 所以你将获得50次传递数据,而不是10次.另外,每次调用`train( ``将学习率从起始的'alpha`滑动到'min_alpha`,所以它会变为高 - 低,高 - 低等 - 对SGD来说根本不正确.但是,因为这个错误很常见,最新的gensim甚至不会让你在没有明确的`epochs`参数的情况下调用`train()`,所以在最新的gensim中它会出错.不要这样做. (2认同)
  • 是的,因为后者不会按照您的意图行事,或者管理学习率,甚至没有错误地运行(在最近的gensim版本中). (2认同)