什么是 doc2vec 训练迭代?

What are doc2vec training iterations?

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

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

另外,我很想知道 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]

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

Gensim 的 Word2Vec/Doc2Vec 允许通过 iter 参数指定遍数,如果您还在对象初始化中提供语料库以触发立即训练. (您上面的代码通过向 Doc2Vec(docs, ...) 构造函数调用提供 docs 来做到这一点。)

如果未指定,gensim 使用的默认 iter 值为 5,以匹配 Google 的原始 word2vec.c 版本使用的默认值。所以你上面的代码已经使用了 5 次训练。

已发布的 Doc2Vec 作品通常使用 10-20 遍。如果你想做 20 遍,你可以将 Doc2Vec 初始化更改为:

model = doc2vec.Doc2Vec(docs, iter=20, ...)

因为Doc2Vec经常为每个文档使用唯一的标识符标签,更多的迭代可能更重要,因此每个文档向量在训练过程中多次出现用于训练,随着模型逐渐改善。另一方面,由于 Word2Vec 语料库中的词可能出现在整个语料库的任何地方,每个词的关联向量将在模型改进的过程中进行早期、中期和后期的多次调整——即使只有一个单程。 (因此,对于一个巨大的、变化多端的 Word2Vec 语料库,使用少于默认遍数的次数是可以想象的。)

不需要自己做循环,大多数用户也不应该。如果您确实自己管理单独的 build_vocab()train() 步骤,而不是更简单的步骤,即在初始化程序调用中提供 docs 语料库以触发立即训练,那么您必须提供 epochstrain() 的参数 – 它将执行该次数的传递,因此您仍然只需要调用一次 train()